Qt中判断windows系统位数

Posted 12oz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt中判断windows系统位数相关的知识,希望对你有一定的参考价值。

因为要通过对系统位数的判断,来决定程序中不同的操作。

最开始想到Qt中是否有封装好的类,发现了QSysInfo类可以为我们提供一些有关当前系统的底层信息。在QSysInfo类中 QSysInfo::WordSize 可以返回“编译应用程序的平台的指针大小(32或64)”。但是在实际使用过程中,发现其返回的32或64是根据编译器决定的,若编译成32位即返回32,63位即返回64。

所以只能使用windows系统函数来判断当前系统环境,在Windows系统函数中有一个IsWow64Process function,可使用确定指定的进程是否在WOW64下运行。但官方明确说明:

为了与不支持此功能的操作系统兼容,请调用 GetProcAddress来检测是否 在Kernel32.dll中实现了IsWow64Process。如果GetProcAddress成功,则调用此函数是安全的。否则,WOW64不存在。请注意,此技术不是检测操作系统是否为64位版本的Windows的可靠方法,因为当前版本的32位Windows中的Kernel32.dll也包含此功能。

所以使用 GetProcAddress function,此方法可以从指定的动态链接库(DLL)中检索导出的函数或变量的地址。在Kernel32.dll中有一个GetNativeSystemInfo function可以检索有关当前系统的信息,向改函数中传入一个SYSTEM_INFO structure,在改结构体中包含了处理器体系结构(wProcessorArchitecture属性)可以是:PROCESSOR_ARCHITECTURE_AMD64、PROCESSOR_ARCHITECTURE_ARM、PROCESSOR_ARCHITECTURE_ARM64、PROCESSOR_ARCHITECTURE_IA64、PROCESSOR_ARCHITECTURE_INTEL、PROCESSOR_ARCHITECTURE_UNKNOWN这些值中的一个,所以可以根据这些值来判断系统是否为64位。

具体代码如下:

 1 BOOL Is64BitSystem()
 2 {
 3     typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
 4     PGNSI pGNSI;
 5     SYSTEM_INFO si;
 6     ZeroMemory(&si, sizeof(SYSTEM_INFO));
 7     pGNSI =(PGNSI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");
 8     if (pGNSI)
 9     {
10         pGNSI(&si);
11 
12         if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
13             si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ||
14             si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM64)
15         {
16             return TRUE;
17         }
18     }
19     return FALSE;
20 }

 

以上是关于Qt中判断windows系统位数的主要内容,如果未能解决你的问题,请参考以下文章

QT添加windows静态库

QT 实用代码片段

qt 5添加 windows 静态库

Qt调用系统DLL,判断网络连接状态

QT 可以与 Windows 原生集成吗?

QT 进程基础 QT如何判断另外一个进程在运行