MSDN例子获取操作系统版本信息Getting the System Version
来源:互联网 发布:怎么成为数据库管理员 编辑:程序博客网 时间:2024/05/17 00:11
Getting the System Version
The following example uses the GetVersionEx function to display the version of the currently running operating system.
Relying on version information is not the best way to test for a feature. Instead, refer to the documentation for the feature of interest. For more information on common techniques for feature detection, seeOperating System Version.
If you must require a particular operating system, be sure to use it as a minimum supported version, rather than design the test for the one operating system. This way, your detection code will continue to work on future versions of Windows.
#include <windows.h>#include <stdio.h>#define BUFSIZE 80int main(){ OSVERSIONINFOEX osvi; BOOL bOsVersionInfoEx; // Try calling GetVersionEx using the OSVERSIONINFOEX structure. // If that fails, try using the OSVERSIONINFO structure. ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) { osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) return FALSE; } switch (osvi.dwPlatformId) { // Test for the Windows NT product family. case VER_PLATFORM_WIN32_NT: // Test for the specific product. if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ) printf ("Microsoft Windows Server 2003, "); if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) printf ("Microsoft Windows XP "); if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) printf ("Microsoft Windows 2000 "); if ( osvi.dwMajorVersion <= 4 ) printf("Microsoft Windows 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 ) printf ( "Workstation 4.0 " ); else if( osvi.wSuiteMask & VER_SUITE_PERSONAL ) printf ( "Home Edition " ); else printf ( "Professional " ); } // Test for the server type. else if ( osvi.wProductType == VER_NT_SERVER || osvi.wProductType == VER_NT_DOMAIN_CONTROLLER ) { if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2) { if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) printf ( "Datacenter Edition " ); else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) printf ( "Enterprise Edition " ); else if ( osvi.wSuiteMask == VER_SUITE_BLADE ) printf ( "Web Edition " ); else printf ( "Standard Edition " ); } else if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0) { if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) printf ( "Datacenter Server " ); else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) printf ( "Advanced Server " ); else printf ( "Server " ); } else // Windows NT 4.0 { if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) printf ("Server 4.0, Enterprise Edition " ); else printf ( "Server 4.0 " ); } } } // Test for specific product on Windows NT 4.0 SP5 and earlier else { HKEY hKey; char szProductType[BUFSIZE]; DWORD dwBufLen=BUFSIZE; LONG lRet; lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\ProductOptions", 0, KEY_QUERY_VALUE, &hKey ); if( lRet != ERROR_SUCCESS ) return FALSE; lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL, (LPBYTE) szProductType, &dwBufLen); if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) ) return FALSE; RegCloseKey( hKey ); if ( lstrcmpi( "WINNT", szProductType) == 0 ) printf( "Workstation " ); if ( lstrcmpi( "LANMANNT", szProductType) == 0 ) printf( "Server " ); if ( lstrcmpi( "SERVERNT", szProductType) == 0 ) printf( "Advanced Server " ); printf( "%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion ); } // Display service pack (if any) and build number. if( osvi.dwMajorVersion == 4 && lstrcmpi( osvi.szCSDVersion, "Service Pack 6" ) == 0 ) { HKEY hKey; LONG lRet; // Test for SP6 versus SP6a. lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009", 0, KEY_QUERY_VALUE, &hKey ); if( lRet == ERROR_SUCCESS ) printf( "Service Pack 6a (Build %d)\n", osvi.dwBuildNumber & 0xFFFF ); else // Windows NT 4.0 prior to SP6a { printf( "%s (Build %d)\n", osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF); } RegCloseKey( hKey ); } else // not Windows NT 4.0 { printf( "%s (Build %d)\n", osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF); } break; // Test for the Windows Me/98/95. case VER_PLATFORM_WIN32_WINDOWS: if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) { printf ("Microsoft Windows 95 "); if (osvi.szCSDVersion[1]=='C' || osvi.szCSDVersion[1]=='B') printf("OSR2 " ); } if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) { printf ("Microsoft Windows 98 "); if ( osvi.szCSDVersion[1] == 'A' ) printf("SE " ); } if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) { printf ("Microsoft Windows Millennium Edition\n"); } break; case VER_PLATFORM_WIN32s: printf ("Microsoft Win32s\n"); break; } return TRUE; }
阅读全文
0 0
- MSDN例子获取操作系统版本信息Getting the System Version
- Getting the System Version(获取操作系统版本)
- Getting the System Version
- 获取操作系统版本(转MSDN)
- 获取版本信息Version的完整代码(从msdn扩展而来)
- VC++获取操作系统版本(摘自MSDN)
- VC++获取操作系统版本(摘自MSDN)
- Getting the System Version(微软官方代码)
- MSDN例子 获取网卡、ip等信息
- 获取 Windows 操作系统版本信息
- Python获取操作系统版本信息
- VC获取操作系统版本信息
- windows 获取操作系统版本信息
- MSDN的一个例子 有获取到各种操作系统
- JAVA System.getProperty("") 获取当前操作系统信息
- 获取操作系统的版本等信息
- qt 获取win操作系统版本信息
- js获取浏览器信息--名称、版本、操作系统
- 群体运动度量--Measuring Crowd Collectiveness
- c++ ODBC使用
- 【备忘】Java菜鸟到大牛学习路线之高级篇
- *p++和(*p)++区别
- pc调试微信h5页面
- MSDN例子获取操作系统版本信息Getting the System Version
- java split |
- c#中bin,obj,properties文件夹的作用
- 如何判断单链表是否有环
- 自行装配适合深度学习的电脑
- 常见开发安全规避和敏感信息处理
- 某安全浏览器竟然也被查出高危漏洞?开源安全问题不容忽视
- 数据仓库架构
- NodeJS 异步 async / await 方案