检测Windows操作系统是64位还是32位

错误的做法:

bool IsOs64Bit()
{
    SYSTEM_INFO si = { 0 };
    ::GetSystemInfo(&si);
    if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
    {
        return true;
    }

    return false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这里wProcessorArchitecture 字段是处理器架构,不一定操作系统就是64位,所以行不通。

正确的做法:

bool IsWow64()
{
    typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);   
    BOOL bIsWow64 = FALSE;
    LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(_T("kernel32")), "IsWow64Process");

    if (NULL != fnIsWow64Process)
    {
        if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
        {
            return false;
        }
    }
    return bIsWow64 != 0 ? true : false; 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

另外GetNativeSystemInfo这个API也可以。 
参考链接: 
http://lixinlixin2008.iteye.com/blog/1728161 
http://www.cnblogs.com/walfud/articles/2311065.html 
http://blog.csdn.net/playstudy/article/details/8259653 
http://www.cnblogs.com/zyl910/archive/2012/02/19/vcis64.html

------------------------------------------------------

ps:by thanklife

但是百度百科上讲并不能根据这个来判断是还不是64位的操作系统。

http://baike.baidu.com/link?url=3evHBjVzKSEGAUYz_HQDko22yNigtNadBuF0EjhZA-S1xDA0RnnxC3RmBN2IiWKLiDuTS5aPL7DcoYnVYKClQHTwDho9fnCM8bHlx1UX5fC

hProcess
进程句柄。该句柄必须具有PROCESS_QUERY_INFORMATION 或者 PROCESS_QUERY_LIMITED_INFORMATION 访问权限
Wow64Process
指向一个bool值,
如果该进程是32位进程,运行在64操作系统下,该值为true,否则为false。
如果该进程是一个64位应用程序,运行在64位系统上,该值也被设置为false。


下面应该是判断是处理器的架构吧。

BOOL Is64bitSystem()

{
SYSTEM_INFO si;
GetNativeSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || 
si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
return TRUE;
else
return FALSE;
}

你可能感兴趣的:(VC)