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

来源:互联网 发布:韩国域名注册商 编辑:程序博客网 时间:2024/05/17 21:57

错误的做法:

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

这里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; }

另外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

0 0