[英]Checking the Windows version
I want a code to be executed just for Windows-XP but I must check whether the current windows is Windows-XP or not. 我希望只为Windows-XP执行代码,但我必须检查当前窗口是否为Windows-XP。
wxPlatformInfo windows = wxPlatformInfo::Get();
int winXP[] = { 5,1 };
int winXP64[] = { 5,2 };
if (windows.GetOSMajorVersion() == winXP[0] && windows.GetOSMinorVersion() == winXP[1]) {
wxLogMessage("Windows XP");
} else if (windows.GetOSMajorVersion() == winXP64[0] && windows.GetOSMinorVersion() == winXP64[1]) {
wxLogMessage("Windows XP 64Bit");
}
The previous code gives me the direct way to know the windows version. 前面的代码为我提供了直接了解Windows版本的方法。
is there another short way that gives me the windows version? 还有另一种让我使用Windows版本的简便方法吗?
But don't forget (== window-XP not >= windows-XP)? 但是不要忘了(== Windows-XP不是> = Windows-XP)?
BOOL WINAPI IsWindowsXPOrGreater(void); BOOL WINAPI是WindowsXPOrGreater(void); check others here : https://msdn.microsoft.com/en-us/library/windows/desktop/dn424972(v=vs.85).aspx
在此处检查其他人: https : //msdn.microsoft.com/zh-cn/library/windows/desktop/dn424972(v=vs.85).aspx
What you already have is about as short as you can get, though you should cache the results from wxPlatformInfo
: 尽管您应该缓存来自
wxPlatformInfo
的结果,但是您已经拥有的内容将尽可能地短:
wxPlatformInfo windows = wxPlatformInfo::Get();
int major = windows.GetOSMajorVersion();
int minor = windows.GetOSMinorVersion();
if (major == 5 && minor == 1) {
wxLogMessage("Windows XP");
} else if (major == 5 && minor == 2) {
wxLogMessage("Windows XP 64Bit");
}
Otherwise, consider using VerifyVersionInfo()
to let the OS compare the version numbers for you: 否则,请考虑使用
VerifyVersionInfo()
让操作系统为您比较版本号:
bool IsWinXP32Bit()
{
OSVERSIONINFOEX osvi = {};
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
osvi.dwMajorVersion = 5;
osvi.dwMinorVersion = 1;
osvi.wServicePackMajor = 0;
osvi.wServicePackMinor = 0;
DWORDLONG dwlConditionMask = 0;
VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_EQUAL);
VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_EQUAL);
VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL);
return VerifyVersionInfo(&osvi,
VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
dwlConditionMask);
}
bool IsWinXP64Bit()
{
OSVERSIONINFOEX osvi = {};
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
osvi.dwMajorVersion = 5;
osvi.dwMinorVersion = 2;
osvi.wServicePackMajor = 0;
osvi.wServicePackMinor = 0;
DWORDLONG dwlConditionMask = 0;
VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_EQUAL);
VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_EQUAL);
VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL);
return VerifyVersionInfo(&osvi,
VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
dwlConditionMask);
}
...
if (IsWinXP32Bit())
wxLogMessage("Windows XP");
} else if (IsWinXP64Bit()) {
wxLogMessage("Windows XP 64Bit");
}
If you're not against using macros, you can use 如果您不反对使用宏,则可以使用
#ifdef WINDOWS_XP
// Code
#elif defined WINDOWS_7
// Other code
#endif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.