如何获取Windows OS类型(摘自Notepad++)
#include <windows.h>
#include <iostream>
using namespace std;
enum winVer {
WV_UNKNOWN,
WV_WIN32S,
WV_95,
WV_98,
WV_ME,
WV_NT,
WV_W2K,
WV_XP,
WV_S2003,
WV_XPX64,
WV_VISTA,
WV_WIN7,
WV_WIN8
};
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
winVer getWindowsVersion()
{
OSVERSIONINFOEX osvi;
SYSTEM_INFO si;
PGNSI pGNSI;
ZeroMemory(&si, sizeof(SYSTEM_INFO));
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
BOOL bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *)&osvi);
if (!bOsVersionInfoEx) {
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) {
return WV_UNKNOWN;
}
}
pGNSI = (PGNSI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");
if(pGNSI != NULL) {
pGNSI(&si);
}
else {
GetSystemInfo(&si);
}
switch (osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT:
{
if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2 )
{
return WV_WIN8;
}
if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1 )
{
return WV_WIN7;
}
if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 )
{
return WV_VISTA;
}
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
{
if (osvi.wProductType == VER_NT_WORKSTATION &&
si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
{
return WV_XPX64;
}
return WV_S2003;
}
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
return WV_XP;
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
return WV_W2K;
if ( osvi.dwMajorVersion <= 4 )
return WV_NT;
}
break;
// Test for the Windows Me/98/95.
case VER_PLATFORM_WIN32_WINDOWS:
{
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
{
return WV_95;
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
{
return WV_98;
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
{
return WV_ME;
}
}
break;
case VER_PLATFORM_WIN32s:
return WV_WIN32S;
default :
return WV_UNKNOWN;
}
return WV_UNKNOWN;
}
int main()
{
winVer ver = getWindowsVersion();
switch(ver)
{
case WV_WIN7:
cout << "win7" << endl;
break;
case WV_XP:
cout << "WinXp" << endl;
break;
default:
cout << "else" << endl;
break;
}
return 0;
}
posted on 2013-06-21 17:09 MoreNotepad++ 阅读(319) 评论(0) 收藏 举报
浙公网安备 33010602011771号