• 转:Windows版本判断大全


    /*****************************************************************************
    
    Operating System Version PlatformID
    
    Windows 8 6.2 VER_PLATFORM_WIN32_NT (=2)
    
    Windows 7 6.1 VER_PLATFORM_WIN32_NT
    
    Windows Server 2008 R2 6.1 VER_PLATFORM_WIN32_NT
    
    Windows Server 2008 6.0 VER_PLATFORM_WIN32_NT
    
    Windows Vista 6.0 VER_PLATFORM_WIN32_NT
    
    Windows Server 2003 R2 5.2 VER_PLATFORM_WIN32_NT
    
    Windows Server 2003 5.2 VER_PLATFORM_WIN32_NT
    
    Windows XP 64-Bit Edition 5.2 VER_PLATFORM_WIN32_NT
    
    Windows XP 5.1 VER_PLATFORM_WIN32_NT
    
    Windows 2000 5.0 VER_PLATFORM_WIN32_NT
    
    Windows NT 4.0 4.0 VER_PLATFORM_WIN32_NT
    
    Windows NT 3.51 3.51 ? VER_PLATFORM_WIN32_NT
    
    Windows Millennium Edition 4.90 VER_PLATFORM_WIN32_WINDOWS (=1)
    
    Windows 98 4.10 VER_PLATFORM_WIN32_WINDOWS
    
    Windows 95 4.0 VER_PLATFORM_WIN32_WINDOWS
    
    Windows 3.1 3.1 ? VER_PLATFORM_WIN32s (=0)
    
    *****************************************************************************/
    
    #include "stdafx.h"
    
    #include<windows.h>
    
    //#include<tchar.h>
    
    //#include <stdio.h>
    
    #include<strsafe.h>
    
    #pragma comment(lib,"User32.lib")
    
    #pragma comment(lib,"Advapi32.lib")//VS2005 Express needed
    
    #define BUFSIZE 256
    
    #define PRODUCT_ULTIMATE 0x00000001
    
    #define PRODUCT_HOME_BASIC 0x00000002
    
    #define PRODUCT_HOME_PREMIUM 0x00000003
    
    #define PRODUCT_ENTERPRISE 0x00000004
    
    #define PRODUCT_HOME_BASIC_N 0x00000005
    
    #define PRODUCT_BUSINESS 0x00000006
    
    #define PRODUCT_STANDARD_SERVER 0x00000007
    
    #define PRODUCT_DATACENTER_SERVER 0x00000008
    
    #define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
    
    #define PRODUCT_ENTERPRISE_SERVER 0x0000000A
    
    #define PRODUCT_STARTER 0x0000000B
    
    #define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
    
    #define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
    
    #define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
    
    #define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
    
    #define PRODUCT_BUSINESS_N 0x00000010
    
    #define PRODUCT_WEB_SERVER 0x00000011
    
    #define PRODUCT_CLUSTER_SERVER 0x00000012
    
    #define PRODUCT_HOME_SERVER 0x00000013
    
    #define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
    
    #define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
    
    #define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
    
    #define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
    
    #define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
    
    #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
    
    #define PRODUCT_HOME_PREMIUM_N 0x0000001A
    
    #define PRODUCT_ENTERPRISE_N 0x0000001B
    
    #define PRODUCT_ULTIMATE_N 0x0000001C
    
    #define PRODUCT_WEB_SERVER_CORE 0x0000001D
    
    #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
    
    #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
    
    #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
    
    #define PRODUCT_SMALLBUSINESS_SERVER_PRIME 0x00000021
    
    #define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
    
    #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
    
    #define PRODUCT_STANDARD_SERVER_V 0x00000024
    
    #define PRODUCT_DATACENTER_SERVER_V 0x00000025
    
    #define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
    
    #define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
    
    #define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
    
    #define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
    
    #define PRODUCT_HYPERV 0x0000002A
    
    #define PRODUCT_PROFESSIONAL 0x00000030
    
    #define SM_TABLETPC 86
    
    #define SM_MEDIACENTER 87
    
    #define SM_STARTER 88
    
    #define SM_SERVERR2 89
    
    /*#define VER_SERVER_NT 0x80000000
    
    #define VER_WORKSTATION_NT 0x40000000
    
    #define VER_SUITE_SMALLBUSINESS 0x00000001
    
    #define VER_SUITE_ENTERPRISE 0x00000002
    
    #define VER_SUITE_BACKOFFICE 0x00000004
    
    #define VER_SUITE_COMMUNICATIONS 0x00000008
    
    #define VER_SUITE_TERMINAL 0x00000010
    
    #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
    
    #define VER_SUITE_EMBEDDEDNT 0x00000040
    
    #define VER_SUITE_DATACENTER 0x00000080
    
    #define VER_SUITE_SINGLEUSERTS 0x00000100
    
    #define VER_SUITE_PERSONAL 0x00000200
    
    #define VER_SUITE_BLADE 0x00000400
    
    #define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
    
    #define VER_SUITE_SECURITY_APPLIANCE 0x00001000
    
    #define VER_SUITE_STORAGE_SERVER 0x00002000
    
    #define VER_SUITE_COMPUTE_SERVER 0x00004000*/
    
    #define VER_SUITE_WH_SERVER 0x00008000
    
    typedef void(WINAPI *PGNSI)(LPSYSTEM_INFO);
    
    typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
    
    BOOL GetOSDisplayString( LPTSTR pszOS)
    
    {
    
    	OSVERSIONINFOEX osvi;
    
    	SYSTEM_INFO si;
    
    	PGNSI pGNSI;
    
    	PGPI pGPI;
    
    	BOOL bOsVersionInfoEx;
    
    	DWORD dwType;
    
    	ZeroMemory(&si,sizeof(SYSTEM_INFO));
    
    	ZeroMemory(&osvi,sizeof(OSVERSIONINFOEX));
    
    	osvi.dwOSVersionInfoSize =sizeof(OSVERSIONINFOEX);
    
    	bOsVersionInfoEx =GetVersionEx((OSVERSIONINFO*)&osvi);
    
    	if(!bOsVersionInfoEx)
    
    		return FALSE;
    
    	// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
    
    	pGNSI =(PGNSI)GetProcAddress(
    
    		GetModuleHandle(TEXT("kernel32.dll")),
    
    		"GetNativeSystemInfo");
    
    	if(NULL != pGNSI)
    
    		pGNSI(&si);
    
    	else
    
    		GetSystemInfo(&si);
    
    	if( VER_PLATFORM_WIN32_NT==osvi.dwPlatformId &&
    
    		osvi.dwMajorVersion >4)
    
    	{
    
    		StringCchCopy(pszOS, BUFSIZE, TEXT("Microsoft "));
    
    		// Test for the specific product.
    
    		if( osvi.dwMajorVersion >=6)
    
    		{
    
    			if( osvi.dwMajorVersion >6|| osvi.dwMinorVersion >2)
    
    			{
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Windows 8 Later "));// for new OS
    
    			}
    
    			elseif( osvi.dwMinorVersion ==0)
    
    			{
    
    				if( osvi.wProductType == VER_NT_WORKSTATION )
    
    					StringCchCat(pszOS, BUFSIZE, TEXT("Windows Vista "));
    
    				else
    
    					StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 "));
    
    			}
    
    			elseif( osvi.dwMinorVersion ==1)
    
    			{
    
    				if( osvi.wProductType == VER_NT_WORKSTATION )
    
    					StringCchCat(pszOS, BUFSIZE, TEXT("Windows 7 "));
    
    				else
    
    					StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 R2 "));
    
    			}
    
    			elseif( osvi.dwMinorVersion ==2)
    
    			{
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Windows 8 "));
    
    			}
    
    			pGPI =(PGPI)GetProcAddress(
    
    				GetModuleHandle(TEXT("kernel32.dll")),
    
    				"GetProductInfo");
    
    			pGPI( osvi.dwMajorVersion, osvi.dwMinorVersion,0,0,&dwType);
    
    			switch( dwType )
    
    			{
    
    			case PRODUCT_ULTIMATE:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Ultimate Edition"));
    
    				break;
    
    			case PRODUCT_PROFESSIONAL:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Professional"));
    
    				break;
    
    			case PRODUCT_HOME_PREMIUM:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Home Premium Edition"));
    
    				break;
    
    			case PRODUCT_HOME_BASIC:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Home Basic Edition"));
    
    				break;
    
    			case PRODUCT_ENTERPRISE:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition"));
    
    				break;
    
    			case PRODUCT_BUSINESS:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Business Edition"));
    
    				break;
    
    			case PRODUCT_STARTER:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Starter Edition"));
    
    				break;
    
    			case PRODUCT_CLUSTER_SERVER:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Cluster Server Edition"));
    
    				break;
    
    			case PRODUCT_DATACENTER_SERVER:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition"));
    
    				break;
    
    			case PRODUCT_DATACENTER_SERVER_CORE:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition (core installation)"));
    
    				break;
    
    			case PRODUCT_ENTERPRISE_SERVER:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition"));
    
    				break;
    
    			case PRODUCT_ENTERPRISE_SERVER_CORE:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition (core installation)"));
    
    				break;
    
    			case PRODUCT_ENTERPRISE_SERVER_IA64:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition for Itanium-based Systems"));
    
    				break;
    
    			case PRODUCT_SMALLBUSINESS_SERVER:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server"));
    
    				break;
    
    			case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server Premium Edition"));
    
    				break;
    
    			case PRODUCT_STANDARD_SERVER:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition"));
    
    				break;
    
    			case PRODUCT_STANDARD_SERVER_CORE:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition (core installation)"));
    
    				break;
    
    			case PRODUCT_WEB_SERVER:
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Web Server Edition"));
    
    				break;
    
    			}
    
    		}
    
    		elseif(/*osvi.dwMajorVersion == 5 &&*/ osvi.dwMinorVersion ==2)
    
    		{
    
    			if(GetSystemMetrics(SM_SERVERR2))
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2003 R2, "));
    
    			elseif( osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER )
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Windows Storage Server 2003"));
    
    			elseif( osvi.wSuiteMask & VER_SUITE_WH_SERVER )
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Windows Home Server"));
    
    			elseif( osvi.wProductType == VER_NT_WORKSTATION &&
    
    				si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
    
    			{
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Windows XP Professional x64 Edition"));
    
    			}
    
    			else
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2003, "));
    
    			// Test for the server type.
    
    			if( osvi.wProductType != VER_NT_WORKSTATION )
    
    			{
    
    				if( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64 )
    
    				{
    
    					if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition for Itanium-based Systems"));
    
    					elseif( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition for Itanium-based Systems"));
    
    				}
    
    				elseif( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
    
    				{
    
    					if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter x64 Edition"));
    
    					else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise x64 Edition"));
    
    					else
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Standard x64 Edition"));
    
    				}
    
    				else
    
    				{
    
    					if( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Compute Cluster Edition"));
    
    					else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition"));
    
    					else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition"));
    
    					else if( osvi.wSuiteMask & VER_SUITE_BLADE )
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Web Edition"));
    
    					else
    
    						StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition"));
    
    				}
    
    			}
    
    		}
    
    		elseif(/*osvi.dwMajorVersion == 5 &&*/ osvi.dwMinorVersion ==1)
    
    		{
    
    			StringCchCat(pszOS, BUFSIZE, TEXT("Windows XP "));
    
    			if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Home Edition"));
    
    			else 
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Professional"));
    
    		}
    
    		elseif(/*osvi.dwMajorVersion == 5 &&*/ osvi.dwMinorVersion ==0)
    
    		{
    
    			StringCchCat(pszOS, BUFSIZE, TEXT("Windows 2000 "));
    
    			if( osvi.wProductType == VER_NT_WORKSTATION )
    
    			{
    
    				StringCchCat(pszOS, BUFSIZE, TEXT("Professional"));
    
    			}
    
    			else
    
    			{
    
    				if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
    
    					StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Server"));
    
    				elseif( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
    
    					StringCchCat(pszOS, BUFSIZE, TEXT("Advanced Server"));
    
    				else
    
    					StringCchCat(pszOS, BUFSIZE, TEXT("Server"));
    
    			}
    
    		}
    
    		// Include service pack (if any) and build number.
    
    		if( _tcslen(osvi.szCSDVersion)>0)
    
    		{
    
    			StringCchCat(pszOS, BUFSIZE, TEXT(" "));
    
    			StringCchCat(pszOS, BUFSIZE, osvi.szCSDVersion);
    
    		}
    
    		TCHAR buf[80];
    
    		StringCchPrintf( buf,80, TEXT(" (build %d)"), osvi.dwBuildNumber);
    
    		StringCchCat(pszOS, BUFSIZE, buf);
    
    		if( osvi.dwMajorVersion >=6)
    
    		{
    
    			if( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
    
    				StringCchCat(pszOS, BUFSIZE, TEXT(", 64-bit"));
    
    			elseif(si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
    
    				StringCchCat(pszOS, BUFSIZE, TEXT(", 32-bit"));
    
    		}
    
    		return TRUE;
    
    	}
    
    	else
    
    	{
    
    		return FALSE;
    
    	}
    
    }
    
    BOOL GetOldOSVer(LPSTR pszOldOS)
    
    {
    
    	OSVERSIONINFOEXA osvi;
    
    	BOOL bOsVersionInfoEx;
    
    	ZeroMemory(&osvi,sizeof(OSVERSIONINFOEXA));
    
    	// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
    
    	// If that fails, try using the OSVERSIONINFO structure.
    
    	osvi.dwOSVersionInfoSize =sizeof(OSVERSIONINFOEXA);
    
    	bOsVersionInfoEx =GetVersionExA((OSVERSIONINFOA *)&osvi);
    
    	if(!bOsVersionInfoEx )
    
    	{
    
    		osvi.dwOSVersionInfoSize =sizeof(OSVERSIONINFOA);
    
    		if(!GetVersionExA((OSVERSIONINFOA *)&osvi))
    
    		{
    
    			StringCchCatA(pszOldOS, BUFSIZE,"Unknow Windows?");
    
    			return FALSE;
    
    		}
    
    	}
    
    	switch(osvi.dwPlatformId)
    
    	{
    
    		// Test for the Windows NT product family.
    
    	case VER_PLATFORM_WIN32_NT:
    
    		if(osvi.dwMajorVersion <=4){
    
    			StringCchCatA(pszOldOS, BUFSIZE,"Microsoft Windows NT ");
    
    		}else{
    
    			return FALSE;
    
    		}
    
    		break;
    
    		// Test for the Windows Me/98/95.
    
    	case VER_PLATFORM_WIN32_WINDOWS:
    
    		if(osvi.dwMajorVersion ==4)
    
    		{
    
    			switch(osvi.dwMinorVersion)
    
    			{
    
    			case 0:
    
    				StringCchCatA(pszOldOS, BUFSIZE,"Microsoft Windows 95 ");
    
    				if(osvi.szCSDVersion[1]=='C'|| osvi.szCSDVersion[1]=='B')
    
    					StringCchCatA(pszOldOS, BUFSIZE,"OSR2 ");
    
    				break;
    
    			case 3://??
    
    				StringCchCatA(pszOldOS, BUFSIZE,"Microsoft Windows 95 OSR2 ");
    
    			case 10:
    
    				StringCchCatA(pszOldOS, BUFSIZE,"Microsoft Windows 98 ");
    
    				if( osvi.szCSDVersion[1]=='A'|| osvi.szCSDVersion[1]=='B')
    
    					StringCchCatA(pszOldOS, BUFSIZE,"SE ");
    
    				break;
    
    			case 90:
    
    				StringCchCatA(pszOldOS, BUFSIZE,"Microsoft Windows Millennium Edition ");
    
    				break;
    
    			}
    
    		}
    
    		break;
    
    	case VER_PLATFORM_WIN32s:
    
    		StringCchCatA(pszOldOS, BUFSIZE,"Microsoft Win32s ");
    
    		break;
    
    	default:
    
    		return FALSE;
    
    	}
    
    	if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
    
    	{
    
    		// Test for specific product on Windows NT 4.0 SP6 and later.
    
    		if( bOsVersionInfoEx )
    
    		{
    
    			// Test for the workstation type.
    
    			if( osvi.wProductType == VER_NT_WORKSTATION)
    
    			{
    
    				if( osvi.dwMajorVersion ==4)
    
    					StringCchCatA(pszOldOS, BUFSIZE,"Workstation 4.0 ");
    
    				elseif( osvi.wSuiteMask & VER_SUITE_PERSONAL )
    
    					StringCchCatA(pszOldOS, BUFSIZE,"Home Edition ");
    
    				else
    
    					StringCchCatA(pszOldOS, BUFSIZE,"Professional ");
    
    			}
    
    			// Test for the server type.
    
    			elseif( osvi.wProductType == VER_NT_SERVER ||
    
    				osvi.wProductType == VER_NT_DOMAIN_CONTROLLER )
    
    			{
    
    				// Windows NT 4.0
    
    				if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
    
    					StringCchCatA(pszOldOS, BUFSIZE,"Server 4.0, Enterprise Edition ");
    
    				else
    
    					StringCchCatA(pszOldOS, BUFSIZE,"Server 4.0 ");
    
    			}
    
    		}
    
    		// Test for specific product on Windows NT 4.0 SP5 and earlier
    
    		else
    
    		{
    
    			HKEY hKey;
    
    			TCHAR szProductType[BUFSIZE];
    
    			DWORD dwBufLen=BUFSIZE*sizeof(TCHAR);
    
    			LONG lRet =RegOpenKeyEx( HKEY_LOCAL_MACHINE,
    
    				TEXT("SYSTEM\CurrentControlSet\Control\ProductOptions"),0, KEY_QUERY_VALUE,&hKey );
    
    			if( lRet != ERROR_SUCCESS )
    
    				return FALSE;
    
    			lRet =RegQueryValueEx( hKey, TEXT("ProductType"),
    
    				NULL, NULL,(LPBYTE) szProductType,&dwBufLen);
    
    			RegCloseKey( hKey );
    
    			if((lRet != ERROR_SUCCESS)||(dwBufLen > BUFSIZE*sizeof(TCHAR)))
    
    				return FALSE;
    
    			if( lstrcmpi( TEXT("WINNT"), szProductType)==0)
    
    				StringCchCatA(pszOldOS, BUFSIZE,"Workstation ");
    
    			if( lstrcmpi( TEXT("LANMANNT"), szProductType)==0)
    
    				StringCchCatA(pszOldOS, BUFSIZE,"Server ");
    
    			if( lstrcmpi( TEXT("SERVERNT"), szProductType)==0)
    
    				StringCchCatA(pszOldOS, BUFSIZE,"Advanced Server ");
    
    			char szVer[20];
    
    			StringCchPrintfA(szVer,sizeof(szVer),"%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion );
    
    			StringCchCatA(pszOldOS, BUFSIZE, szVer);
    
    		}
    
    		// Display service pack (if any) and build number.
    
    		char sp6[]="Service Pack 6";
    
    		char szBuf[40];
    
    		if( osvi.dwMajorVersion ==4&&
    
    			lstrcmpiA( osvi.szCSDVersion, sp6 )==0)
    
    		{
    
    			HKEY hKey;
    
    			LONG lRet;
    
    			// Test for SP6 versus SP6a.
    
    			lRet =RegOpenKeyEx( HKEY_LOCAL_MACHINE,
    
    				TEXT("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\Q246009"),0, KEY_QUERY_VALUE,&hKey );
    
    			if( lRet == ERROR_SUCCESS )
    
    			{
    
    				StringCchPrintfA(szBuf,sizeof(szBuf),"Service Pack 6a (Build %d)", osvi.dwBuildNumber &0xFFFF);
    
    				StringCchCatA(pszOldOS, BUFSIZE, szBuf);
    
    			}
    
    			else// Windows NT 4.0 prior to SP6a
    
    			{
    
    				StringCchPrintfA(szBuf,sizeof(szBuf),"%s (Build %d)", osvi.szCSDVersion, osvi.dwBuildNumber &0xFFFF);
    
    				StringCchCatA(pszOldOS, BUFSIZE, szBuf);
    
    			}
    
    			RegCloseKey( hKey );
    
    		}
    
    		else// not Windows NT 4.0
    
    		{
    
    			StringCchPrintfA(szBuf,sizeof(szBuf),"%s (Build %d)", osvi.szCSDVersion, osvi.dwBuildNumber &0xFFFF);
    
    			StringCchCatA(pszOldOS, BUFSIZE, szBuf);
    
    		}
    
    	}
    
    	return TRUE;
    
    }
    
    int __cdecl _tmain()
    
    int _tmain(int argc, _TCHAR* argv[])
    
    {
    
    	TCHAR szOS[BUFSIZE];
    
    	if(GetOSDisplayString( szOS )){
    
    		_tprintf( TEXT("
    %s
    "), szOS );
    
    	}else{
    
    		char szOldOS[BUFSIZE]={0};
    
    		if(GetOldOSVer(szOldOS)){
    
    			printf("
    %s
    ", szOldOS);
    
    		}
    
    	}
    
    }
  • 相关阅读:
    《剑指 Offer》学习记录:题 14:剪绳子
    网络技术:配置动态路由
    网络技术:配置静态路由
    大一下暑假学习推荐
    Java WEB 程序设计:班级投票系统
    55 内核与应用的分离(下)
    54 内核与应用的分离(中)
    53 内核与应用的分离(上)
    无线数据传输模块的功能
    什么是IO控制器?
  • 原文地址:https://www.cnblogs.com/qinfengxiaoyue/p/3431938.html
Copyright © 2020-2023  润新知