如何在C++上检测Windows 32或64位?

Ted*_*Ted 5 c++ windows winapi visual-c++

如何在C++上检测Windows 32或64位?我在.Net中看到很多例子,但我需要C++.IsWow64Process()也不适用于我,因为"如果进程在32位Windows下运行,则该值设置为FALSE.如果进程是在64位Windows下运行的64位应用程序,则值为也设为FALSE"

如果我在32位操作系统下有32位进程,如果我在64位操作系统下有64位进程,则我有假,我有假

但我不关心过程位我需要OS位

Dav*_*nan 14

用于检测有关底层系统的信息的Win32 API函数是GetNativeSystemInfo.调用该函数并读取函数填充wProcessorArchitectureSYSTEM_INFO结构的成员.

虽然实际上可以IsWow64Process用来检测这个.如果您致电IsWow64ProcessTRUE返回,那么您就知道您在64位系统上运行.否则,FALSE返回.然后你只需要测试一个指针的大小.32位指针表示32位系统,64位指针表示64位系统.实际上,您可以从编译器提供的条件中获取信息,具体取决于您使用的编译器,因为指针的大小在编译时是已知的.

Raymond Chen在博客文章中描述了这种方法.他帮助我包含了我在这里重现的代码:

BOOL Is64BitWindows()
{
#if defined(_WIN64)
 return TRUE;  // 64-bit programs run only on Win64
#elif defined(_WIN32)
 // 32-bit programs run on both 32-bit and 64-bit Windows
 // so must sniff
 BOOL f64 = FALSE;
 return IsWow64Process(GetCurrentProcess(), &f64) && f64;
#else
 return FALSE; // Win64 does not support Win16
#endif
}
Run Code Online (Sandbox Code Playgroud)

  • @vz0:`IsWow64Process()` 返回 TRUE/FALSE 以指示 `BOOL` 变量是否已更新。如果为 TRUE,则该变量指示所请求的进程是否是 WOW64 进程(32 位在 64 位上运行)。这就是为什么需要额外检查的原因:`return ((查询成功) && (查询结果为真));` (4认同)
  • @vz0 不,对 `IsWow64Process()` 的调用会修改 `f64` (2认同)