現在のWindows OSが32ビットか64ビットかを検出したい。 C++を使用してそれを達成する方法は? OSのビットタイプが必要なプロセッサタイプは必要ありません。これは、64ビットプロセッサに32ビットOSをインストールできるためです。
呼び出す関数は IsWow64Process
または IsWow64Process2
。 64ビットWindowsで実行されている場合、32ビットアプリケーションに通知します。
プログラムが64ビット用にコンパイルされている場合、既に認識されています。
コードが64ビットで実行されている場合、Windowsは64ビットです。チェックするものはありません。プロセスが32ビットコールの場合 IsWow64Process()
-32ビットプロセスは、64ビットWindows上のWOW64で実行され、それ以外の場合はWOW64なしで実行されます。
bool getWindowsBit(bool & isWindows64bit)
{
#if _WIN64
isWindows64bit = true;
return true;
#Elif _WIN32
BOOL isWow64 = FALSE;
//IsWow64Process is not available on all supported versions of Windows.
//Use GetModuleHandle to get a handle to the DLL that contains the function
//and GetProcAddress to get a pointer to the function if available.
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)
GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if(fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(), &isWow64))
return false;
if(isWow64)
isWindows64bit = true;
else
isWindows64bit = false;
return true;
}
else
return false;
#else
assert(0);
return false;
#endif
}
IsWow64Process を使用できます。アプリが32ビットアプリの場合、x64 OSで実行している場合は32ビットです
GetNativeSystemInfo
を使用する必要があります。これが32ビットオペレーティングシステムで動作すると予想される場合、 LoadLibrary
+ GetProcAddress
を使用する必要があります。この機能が利用できないことに対処します。したがって、それが失敗した場合、32ビットオペレーティングシステムであることがわかります。そうでない場合、SYSTEM_INFO.wProcessorArchitecture
は、エミュレートされたものではなく、実際のプロセッサタイプを提供します。
GetNativeSystemInfo
関数を使用します。 LPSYSTEM_INFO
パラメータを使用して、必要なものを取得します。
SYSTEM_INFO
構造:
wProcessorArchitecture
インストールされているオペレーティングシステムのプロセッサアーキテクチャ。
Windowsコマンドsysteminfo
をプログラムのプロセスとして実行できます。
#include <stdlib.h>
system("systeminfo");
返されるカテゴリの1つはシステムタイプです。
その出力読み取り:System Type: x86-based PC
、またはSystem Type: x64-based PC
これは、他の人が提供するものよりも複雑なソリューションかもしれませんが、可能性として追加したいと思いました。 (たぶん、あなたも追加情報を求めています。)
別の方法を次に示します。 GetSystemWow64Directory -"WOW64が使用するシステムディレクトリのパスを取得します。このディレクトリは32ビットWindowsには存在しません。" 「32ビットWindowsでは、関数は常に失敗し、拡張エラーは_ERROR_CALL_NOT_IMPLEMENTED
_に設定されます。」
私は個人的に_IsWow64Process
_の使用法について確信がありません。なぜなら、MSDNで_IsWow64Process
_の説明に「この技術はオペレーティングシステムが64 32ビットWindowsの現在のバージョンのKernel32.dllにもこの関数が含まれているため、Windowsのビットバージョン。」