1. 程式人生 > >識別作業系統版本

識別作業系統版本

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 VistaWindows 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

1

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