識別作業系統版本
07年7月份的時候在專案中做了一份作業系統識別的功能。當時是為了針對不同的作業系統實現不同的流程。今天,同樣又有這個需求了。但由於,時隔一年有點想不起來了,於是又翻出來“陳年舊賬”查找了一下。
實現功能後,覺得還是把一下常用的方法記錄下來吧,方便自己的同時也能方便一下正在搜尋該方法的朋友。
首先簡單瞭解一下OSVERSIONINFO結構體。在這個結構體中包含了作業系統的主版本號、副版本號等資訊。結構定義如下:
typedef struct _OSVERSIONINFO{DWORDdwOSVersionInfoSize;
} OSVERSIONINFO;
dwMajorVersion
Value |
Meaning |
4 |
Windows NT 4.0, Windows Me, Windows 98, Windows 95. |
5 |
Windows Server 2003 R2, Windows Server 2003, Windows XP, Windows 2000. |
6 |
Windows Vista, Windows Server 2008. |
dwMinorVersion 成員是作業系統的副版本號,請參考下表。
Value |
Meaning |
0 |
Windows Vista, Windows Server 2008, Windows 2000, Windows NT 4.0, Windows 95. |
1 |
Windows XP. |
2 |
Windows Server 2003 R2, Windows Server 2003, Windows XP Professional x64 Edition. |
10 |
Windows 98. |
90 |
Windows Me. |
dwPlatformId成員是用來識別作業系統,請參考下表。
Value |
Meaning |
VER_PLATFORM_WIN32_NT2 |
Windows Vista, Windows Server 2008, Windows Server 2003, Windows XP, Windows 2000, Windows NT. |
VER_PLATFORM_WIN32_WINDOWS |
Windows Me, Windows 98, Windows 95. |
使用上面介紹的這三個成員就可以完成作業系統識別的工作了。
程式碼:
OSVERSIONINFO versionInfo;
::ZeroMemory(&versionInfo, sizeof(versionInfo));
versionInfo.dwOSVersionInfoSize = sizeof(versionInfo);
::GetVersionEx(&versionInfo);
使用GetVersionEx()函式來填充這個結構體,這樣我們關心的資訊就都找到了,剩下的事情只是做簡單的判斷。
例如:如何判斷是Windows XP 系統
BOOL IsWinXp()
{
if(m_dwPlatformId == VER_PLATFORM_WIN32_NT && (m_dwMajorVersion == 5 && m_dwMinorVersion >= 1))
{
return TRUE;
}
return FALSE;
}
本文只是很膚淺的引子,具體的內容請參看MSDN