Reputation: 2973
How might I discover, at runtime, using Qt, if a user's system is Win 7-32 or Win7-64?
Upvotes: 3
Views: 1255
Reputation: 32645
For the case of Qt 5 you can use QSysInfo static functions like prettyProductName()
and currentCpuArchitecture()
.
Upvotes: 1
Reputation: 98425
There is no way of doing it exclusively using Qt, AFAIK. Below is how you can do it.
#include <windows.h>
#include <tchar.h>
#include <QtCore/QSysInfo>
typedef enum { Win_64, Win_32, Error, Other } OsType;
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
OsType checkOS() {
#ifndef Q_OS_WIN32
return Other;
#else
// An application compiled for 64 bits can only run on a 64 bit os,
// so no need to check any further.
if (QSysInfo::WordSize == 64) return Win7_64;
// A 32 bit application may be running on a 64 bit OS.
BOOL is64 = FALSE;
// IsWow64Process may not be available in kernel32 on all Windows versions, so we bind to it
// at runtime.
LPFN_ISWOW64PROCESS fnIsWow64Process;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)
GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
// No way it's a 64 bit OS if it doesn't have this API.
if (fnIsWow64Process == NULL) return Win_32;
// Note that GetCurrentProcess() can't fail.
if (!IsWow64Process(GetCurrentProcess(), &is64)) return Error; // The check has failed.
return is64 ? Win_64 : Win_32;
#endif
}
Upvotes: 2