擷取系統版本資訊
BOOL GetVersionEx(LPOSVERSIONINFO lpVersionInformation);
參數說明:
lpVersionInformation指向一個OSVERSIONINFO資料結構的指針,用于填充作業系統版本資訊。
在調用GetVersionEx函數之前,先将OSVERSIONINFO資料結構的dwOSVersionInfoSize成員設定為為sizeof(OSVERSIONINFO)。
傳回值:
如果函數成功,傳回值為非零。
如果函數失敗,傳回值為零。為了獲得更多錯誤資訊,可調用GetLastError函數。如果您給OSVERSIONINFO結構體的dwOSVersionInfoSize成員指定一個無效值,函數将失敗。
備注:
該GetVersionEx函數取代了GetVersion函數的功能,它是獲得作業系統版本号資訊的首選方法。新的應用程式應該使用GetVersionEx函數,而不是GetVersion函數。
先列出OSVERSIONINFO結構,用于表示版本資訊
typedef struct _OSVERSIONINFOA {
DWORD dwOSVersionInfoSize; //結構體大小
DWORD dwMajorVersion; //主版本号
DWORD dwMinorVersion; //次版本号
DWORD dwBuildNumber; //建構号
DWORD dwPlatformId; //平台相關資訊
CHAR szCSDVersion[ 128 ]; // 版本維護資訊
} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
typedef struct _OSVERSIONINFOW {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
WCHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage
} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW;
#ifdef UNICODE
typedef OSVERSIONINFOW OSVERSIONINFO;
typedef POSVERSIONINFOW POSVERSIONINFO;
typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
#else
typedef OSVERSIONINFOA OSVERSIONINFO;
typedef POSVERSIONINFOA POSVERSIONINFO;
typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
#endif // UNICODE
typedef struct _OSVERSIONINFOEXA {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
CHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wReserved[2];
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
typedef struct _OSVERSIONINFOEXW {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
WCHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wReserved[2];
} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
//
// dwPlatformId 的定義:
//
#define VER_PLATFORM_WIN32s 0
#define VER_PLATFORM_WIN32_WINDOWS 1
#define VER_PLATFORM_WIN32_NT 2
編寫的例子
// getversionag.cpp : 定義控制台應用程式的入口點。
//
#include <Windows.h>
#include <stdio.h>
void ShowVersionInfo()
{
OSVERSIONINFO ovex;
TCHAR szVersionInfo[1024];
*szVersionInfo = NULL;
ovex.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(!GetVersionEx(&ovex))
{
printf("擷取系統版本資訊錯誤:%d\n",GetLastError());
return;
}
if(ovex.dwMajorVersion == 5)
{
if(ovex.dwMinorVersion == 0) //5.0
{
lstrcat(szVersionInfo,TEXT("Windows 2000"));
}
else if(ovex.dwMinorVersion == 1) //5.1
{
lstrcat(szVersionInfo,TEXT("Windows XP"));
}
else if(ovex.dwMinorVersion == 2) //5.2
{
lstrcat(szVersionInfo,TEXT("Windows Server 2003"));
}
}
else if(ovex.dwMajorVersion == 6)
{
if(ovex.dwMinorVersion == 0)
{
lstrcat(szVersionInfo,TEXT("Windows Vista"));
}
else if(ovex.dwMinorVersion == 1)
{
lstrcat(szVersionInfo,TEXT("Windows 7"));
}
}
else if(ovex.dwMajorVersion == 7)
{
if(ovex.dwMinorVersion == 0)
{
lstrcat(szVersionInfo,TEXT("Windows 8"));
}
else if(ovex.dwMinorVersion == 1)
{
lstrcat(szVersionInfo,TEXT("Windows 10"));
}
}
else
{
lstrcat(szVersionInfo,TEXT("windows NT 4.0 或者其他版本"));
}
printf("%s\n",szVersionInfo);
printf("OS Version:%d.%d Build %d",ovex.dwMajorVersion,ovex.dwMinorVersion,
ovex.dwBuildNumber);
printf(" %s\n",ovex.szCSDVersion);
}
int main(int argc, CHAR* argv[])
{
ShowVersionInfo();
return 0;
}```