Natural Intelligence による記事要点まとめ
・WebView2 を利用するとアプリにブラウザを埋め込める。
・WebView2 のバージョンはレジストリに記録されている。
・バージョン情報のキーは 32/64 ビット版で異なる。
Visual C++ でコーディングされたプログラムでウェブ関係の処理を行いたく調べてみると、 Android などと同様に、Windows にも WebView コントロールが存在するようです。
WebView は古いブラウザ Internet Explorer を利用するものとなっており、 今は Microsoft のブラウザは Edge が標準ですので WebView2 という名前になっているようです。
ここではまず、WebView2 を利用する前に、WebView2 ランタイムがすでにシステムに存在するかを確認します。
Windows 10 ではバージョンや、Office 365 などの何らかのプログラムと共にランタイムがインストールされている場合があるようです。 Windows 11 では標準でランタイムがインストールされているらしいです。
ちなみに WebView2 にはバージョン固定で利用できるものと、常に最新にアップデートされる
WebView2 がシステムにあるかどうかの判断は、レジストリにバージョン番号が書かれているかどうかで判断できるようです。
レジストリの位置が 32 ビット版 Windows と 64 ビット版 Windows で異なるということですが、 今はほぼ 64 ビット版 Windows と考えてよいかと思います。 わざわざ 32 ビット版を利用している場合は、32 ビット版であることを理解して使っているのではないでしょうか。
とはいえ、一応確認すべきですから、稼働している Windows が何ビット版であるかを確認します。
なお、本サイトのご利用に際しては、必ずプライバシーポリシー(免責事項等)をご参照ください。
投稿 June 17, 2025
実行しているプログラム自身が 32 ビット版 Windows で実行されているか、64 ビット版 Windows で実行されているかを調べる関数 IsOSx64 を定義します。 ちなみに 64 ビット版を x64、32 ビット版を x86 と呼んでいます。
#include <windows.h> bool IsOSx64(void) { BOOL bRet = FALSE; IsWow64Process(GetCurrentProcess(), &bRet); if (bRet) { return true; }
まずは IsWow64Process 関数 で、 WOW64 で実行されているかどうかを調べます。 WOW64 とは、64 ビット版 Windows 上で 32 ビットアプリを動作させる仕組みです。
32 ビットアプリは 64 ビット版 Windows でも動作します。
64 ビットアプリは 32 ビット版 Windows では動作しません(起動できません)。
ですので、このチェック関数は 32 ビットアプリでのみ利用価値があります。
64 ビットアプリであるなら、
IsWow64Process 関数 は第 2 引数で TRUE または FALSE を返します。 TRUE が返されたら WOW64 で動作している、ということです。
32 ビットアプリ + 64 ビット版 Windows の場合、WOW64 で動作していますから TRUE が返ります。 実は TRUE が返るのはこのケースだけですので、この場合は「64 ビット版 Windows で動作中」で確定です。
64 ビットアプリ + 64 ビット版 Windows の場合、WOW64 での動作ではありませんから FALSE が返ります。 そもそも 64 ビットアプリとして動作している時点で 32 ビット版 Windows ではありません。
32 ビットアプリ + 32 ビット版 Windows の可能性もあります。 この場合は WOW64 で動作しているわけではないので FALSE が返ります。
64 ビットアプリ + 32 ビット版 Windows の場合はそもそもこの exe を起動できませんから、除外です。
ここまで、実行ファイル自身が 32 ビットアプリか 64 ビットアプリかで決定可能ですが、 コードとしてどちらであっても判断するには、次のようにすると良いようです。
SYSTEM_INFO si; GetNativeSystemInfo(&si); switch (si.wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_AMD64: return true; // 64 ビット case PROCESSOR_ARCHITECTURE_ARM: //case PROCESSOR_ARCHITECTURE_ARM64: case PROCESSOR_ARCHITECTURE_IA64: break; case PROCESSOR_ARCHITECTURE_INTEL: break; case PROCESSOR_ARCHITECTURE_UNKNOWN: // 不明 default: break; } return false; // 32 ビット判定 }
GetNativeSystemInfo 関数 は、「現在のシステムに関する情報を取得する」関数なのですが、条件によって異なる目的に使うようです。 ちなみにビルドが通らない場合、 _WIN32_WINNT を 0x0501 以降に設定する必要あります。 ご注意ください。
この時点で「WOW64 で実行されているアプリケーション」ではないことがわかっています。
目的は、64 ビットアプリが 64 ビット版 Windows で動作しているか、32 ビットアプリが 32 ビット版 Windows で動作しているかの区別です。
関数呼び出しにより返されるのは SYSTEM_INFO 構造体 です。
複数の PC でテストできるわけではないのですが、 インストールされているオペレーティング システムのプロセッサ アーキテクチャを表す wProcessorArchitecture メンバを参照すると良さそうでした。
これが PROCESSOR_ARCHITECTURE_AMD64 であれば、 AMD でも Intel でも、64 ビットプロセッサ―で動作しているということです。 試せる範囲内ではこのとき 64 ビット版 Windows と考えて良さそうですが、 わざと 32 ビット版 Windows を利用しているケースを除外(検出)できない気もします。
ARM 系の CPU や Intel Itanium ベースの場合は判断しにくく除外しています。
PROCESSOR_ARCHITECTURE_INTEL であれば x86 系、すなわち 32 ビット CPU です。 64 ビット版 Windows は動作しませんので、32 ビット版 Windows で確定です。
不完全感も残りますが、実用上は十分ではないかと思います。
試していないのですが、実行している自分の exe を読み取りモードでアクセスできれば、 自分が 32 ビットアプリか 64 ビットアプリかがわかりますので完璧です。
32/64 ビット EXE/DLL チェッカー
実行ファイル exe やライブラリファイル dll が 32 ビットなのか、64 ビットなのかを判断する方法について書いています。
特に DLL は、ビット数の異なるアプリからは呼び出せませんので、注意が必要です。
投稿 June 17, 2025
では、WebView2 のバージョン番号を取得しましょう。
64 ビット版 Windows の場合、 レジストリの HKEY_LOCAL_MACHINE キーの中の SOFTWARE\\WOW6432Node\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5} にある pv キー(REG_SZ = 文字列)にバージョン番号が書かれているということです。
WebView2 ランタイムがなければ pv キーは存在せず、pv キーがあっても空欄ならインストールされていない、と判断できるようです。 Windows 10 Pro で試したところ、137.0.3296.83 と表示されました。
32 ビット版 Windows の場合、 同 HKEY_LOCAL_MACHINE キーの中の SOFTWARE\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5} にある pv キー(REG_SZ = 文字列)にバージョン番号が書かれているということです。
試せませんが、そうだということです。
と方法を記録しましたが、それが意味があるのかどうかはわかりません。 どうやらシステムにインストールされていてもいなくても、ランライム配布パッケージを用意するほうが良いようです。
まあ、せっかく固定バージョンで使っていたのにあるソフトにより更新されちゃった、とか、 エバーグリーン版だったのに無理やり固定にされた、とか、そういうのは回避できるのかもしれません。
なお、WebView2 ランタイムがインストールされていても、WebView2 を利用した開発には SDK が別途必要ということですから、 SDK についても調査していきます。
▼ Amazon 広告 ▼
Visual C++ 2022 パーフェクトマスター (Perfect Master 188)
かんたん Visual C++[改訂 3 版] (プログラミングの教科書)
Visual C++ では、リストボックスの文字サイズをプロパティで変更することはできません。 ここでは自由な文字サイズに変更したり、別のフォントにしたりしています。
Windows PC で 2 台のモニタを接続している場合、2 台接続を検出し、座標を特定するためのコードについて書いています。
すでにインストールされている VS 2019 をアンインストールし、VS Community 2022 をインストールしなおしています。