天天看點

擷取系統版本資訊 GetVersionEx

擷取系統版本資訊

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;
}```