簡體   English   中英

檢查Windows版本

[英]Checking the Windows version

我希望只為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");
}

前面的代碼為我提供了直接了解Windows版本的方法。

還有另一種讓我使用Windows版本的簡便方法嗎?
但是不要忘了(== Windows-XP不是> = Windows-XP)?

BOOL WINAPI是WindowsXPOrGreater(void); 在此處檢查其他人: https : //msdn.microsoft.com/zh-cn/library/windows/desktop/dn424972(v=vs.85).aspx

盡管您應該緩存來自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");
}

否則,請考慮使用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");
}

如果您不反對使用宏,則可以使用

#ifdef WINDOWS_XP
  // Code
#elif defined WINDOWS_7
  // Other code
#endif

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM