获得当前Windows操作系统版本的详细描述信息
2006-01-26 15:23
459 查看
获得当前Windows操作系统版本的详细描述信息。
目前支持的版本到Windows 2003。
CString GetOSDesc(void)
{
CString sOSInfo, sTmp;
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
sOSInfo = "N/A";
// 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 sOSInfo;
}
switch (osvi.dwPlatformId)
{
// Test for the Windows NT product family.
case VER_PLATFORM_WIN32_NT:
// Test for the specific product family.
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
sOSInfo = "Microsoft Windows Server 2003 family ";
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
sOSInfo = "Microsoft Windows XP ";
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
sOSInfo = "Microsoft Windows 2000 ";
if (osvi.dwMajorVersion <= 4)
sOSInfo = "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)
sOSInfo += "Workstation 4.0 " ;
else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
sOSInfo += "Home Edition ";
else
sOSInfo += "Professional ";
}
// Test for the server type.
else if (osvi.wProductType == VER_NT_SERVER)
{
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
{
if (osvi.wSuiteMask & VER_SUITE_DATACENTER)
sOSInfo += "Datacenter Edition ";
else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
sOSInfo += "Enterprise Edition ";
else if (osvi.wSuiteMask == VER_SUITE_BLADE)
sOSInfo += "Web Edition ";
else
sOSInfo += "Standard Edition ";
}
else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
{
if (osvi.wSuiteMask & VER_SUITE_DATACENTER)
sOSInfo += "Datacenter Server ";
else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
sOSInfo += "Advanced Server ";
else
sOSInfo += "Server ";
}
else // Windows NT 4.0
{
if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
sOSInfo += "Server 4.0, Enterprise Edition ";
else
sOSInfo += "Server 4.0 ";
}
}
}
else // Test for specific product on Windows NT 4.0 SP5 and earlier
{
HKEY hKey;
char szProductType[80];
DWORD dwBufLen=80;
LONG lRet;
sTmp = "SYSTEM//CurrentControlSet//Control//ProductOptions";
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sTmp,
0, KEY_QUERY_VALUE, &hKey);
if( lRet != ERROR_SUCCESS )
return sOSInfo;
sTmp = "ProductType";
lRet = RegQueryValueEx(hKey, sTmp, NULL, NULL, (LPBYTE)szProductType, &dwBufLen);
if( (lRet != ERROR_SUCCESS) || (dwBufLen > 80) )
return sOSInfo;
RegCloseKey( hKey );
sTmp = "WINNT";
sOSInfo += "Workstation ";
sTmp = "LANMANNT";
if (sTmp == szProductType)
sOSInfo += "Server ";
sTmp = "SERVERNT";
if (sTmp == szProductType)
sOSInfo += "Advanced Server ";
sTmp.Format(L"%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion);
sOSInfo += sTmp;
}
// Display service pack (if any) and build number.
sTmp = "Service Pack 6";
if (osvi.dwMajorVersion == 4 && (sTmp == osvi.szCSDVersion))
{
HKEY hKey;
LONG lRet;
// Test for SP6 versus SP6a.
sTmp = "SOFTWARE//Microsoft//Windows NT//CurrentVersion//Hotfix//Q246009";
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sTmp,
0, KEY_QUERY_VALUE, &hKey);
if( lRet == ERROR_SUCCESS )
{
sTmp.Format(L"Service Pack 6a (Build %d)/n", osvi.dwBuildNumber & 0xFFFF);
sOSInfo += sTmp;
}
else // Windows NT 4.0 prior to SP6a
{
sTmp.Format(L"%s (Build %d)/n", osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF);
sOSInfo += sTmp;
}
RegCloseKey( hKey );
}
else // Windows NT 3.51 and earlier or Windows 2000 and later
{
sTmp.Format(L"%s (Build %d)/n", osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF);
sOSInfo += sTmp;
}
break;
// Test for the Windows 95 product family.
case VER_PLATFORM_WIN32_WINDOWS:
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
{
sOSInfo = "Microsoft Windows 95 ";
if (osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B')
sOSInfo += "OSR2 ";
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
{
sOSInfo = "Microsoft Windows 98 ";
if (osvi.szCSDVersion[1] == 'A')
sOSInfo += "SE ";
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
{
sOSInfo = "Microsoft Windows Millennium Edition";
}
break;
case VER_PLATFORM_WIN32s:
sOSInfo = "Microsoft Win32s";
break;
}
return sOSInfo;
}
目前支持的版本到Windows 2003。
CString GetOSDesc(void)
{
CString sOSInfo, sTmp;
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
sOSInfo = "N/A";
// 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 sOSInfo;
}
switch (osvi.dwPlatformId)
{
// Test for the Windows NT product family.
case VER_PLATFORM_WIN32_NT:
// Test for the specific product family.
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
sOSInfo = "Microsoft Windows Server 2003 family ";
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
sOSInfo = "Microsoft Windows XP ";
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
sOSInfo = "Microsoft Windows 2000 ";
if (osvi.dwMajorVersion <= 4)
sOSInfo = "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)
sOSInfo += "Workstation 4.0 " ;
else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
sOSInfo += "Home Edition ";
else
sOSInfo += "Professional ";
}
// Test for the server type.
else if (osvi.wProductType == VER_NT_SERVER)
{
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
{
if (osvi.wSuiteMask & VER_SUITE_DATACENTER)
sOSInfo += "Datacenter Edition ";
else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
sOSInfo += "Enterprise Edition ";
else if (osvi.wSuiteMask == VER_SUITE_BLADE)
sOSInfo += "Web Edition ";
else
sOSInfo += "Standard Edition ";
}
else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
{
if (osvi.wSuiteMask & VER_SUITE_DATACENTER)
sOSInfo += "Datacenter Server ";
else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
sOSInfo += "Advanced Server ";
else
sOSInfo += "Server ";
}
else // Windows NT 4.0
{
if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
sOSInfo += "Server 4.0, Enterprise Edition ";
else
sOSInfo += "Server 4.0 ";
}
}
}
else // Test for specific product on Windows NT 4.0 SP5 and earlier
{
HKEY hKey;
char szProductType[80];
DWORD dwBufLen=80;
LONG lRet;
sTmp = "SYSTEM//CurrentControlSet//Control//ProductOptions";
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sTmp,
0, KEY_QUERY_VALUE, &hKey);
if( lRet != ERROR_SUCCESS )
return sOSInfo;
sTmp = "ProductType";
lRet = RegQueryValueEx(hKey, sTmp, NULL, NULL, (LPBYTE)szProductType, &dwBufLen);
if( (lRet != ERROR_SUCCESS) || (dwBufLen > 80) )
return sOSInfo;
RegCloseKey( hKey );
sTmp = "WINNT";
sOSInfo += "Workstation ";
sTmp = "LANMANNT";
if (sTmp == szProductType)
sOSInfo += "Server ";
sTmp = "SERVERNT";
if (sTmp == szProductType)
sOSInfo += "Advanced Server ";
sTmp.Format(L"%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion);
sOSInfo += sTmp;
}
// Display service pack (if any) and build number.
sTmp = "Service Pack 6";
if (osvi.dwMajorVersion == 4 && (sTmp == osvi.szCSDVersion))
{
HKEY hKey;
LONG lRet;
// Test for SP6 versus SP6a.
sTmp = "SOFTWARE//Microsoft//Windows NT//CurrentVersion//Hotfix//Q246009";
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sTmp,
0, KEY_QUERY_VALUE, &hKey);
if( lRet == ERROR_SUCCESS )
{
sTmp.Format(L"Service Pack 6a (Build %d)/n", osvi.dwBuildNumber & 0xFFFF);
sOSInfo += sTmp;
}
else // Windows NT 4.0 prior to SP6a
{
sTmp.Format(L"%s (Build %d)/n", osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF);
sOSInfo += sTmp;
}
RegCloseKey( hKey );
}
else // Windows NT 3.51 and earlier or Windows 2000 and later
{
sTmp.Format(L"%s (Build %d)/n", osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF);
sOSInfo += sTmp;
}
break;
// Test for the Windows 95 product family.
case VER_PLATFORM_WIN32_WINDOWS:
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
{
sOSInfo = "Microsoft Windows 95 ";
if (osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B')
sOSInfo += "OSR2 ";
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
{
sOSInfo = "Microsoft Windows 98 ";
if (osvi.szCSDVersion[1] == 'A')
sOSInfo += "SE ";
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
{
sOSInfo = "Microsoft Windows Millennium Edition";
}
break;
case VER_PLATFORM_WIN32s:
sOSInfo = "Microsoft Win32s";
break;
}
return sOSInfo;
}
相关文章推荐
- 在.Net Framework中获得Windows目录、机器名、操作系统版本信息等系统环境信息
- 在.Net Framework中获得Windows目录、机器名、操作系统版本信息等系统环境信息
- 在命令行下,如何查看Windows操作系统的版本详细信息
- 在.Net Framework中获得Windows目录、机器名、操作系统版本信息等系统环境信息
- .Net Framework中获得Windows目录、机器名、操作系统版本信息等系统环境信息
- 在C#里怎样获得当前Windows操作系统的语言种类?以及如何知道当前Windows版本?
- Linux查看版本当前操作系统信息
- 如何获得unix版本的详细信息
- Windows系统下检查当前电脑python版本信息
- windows如何获得U盘的详细信息
- 查看Windows 7详细版本及相关系统信息
- 获得Windows的版本信息。
- PHP获取当前服务器版本,Ip等详细信息
- 获得当前操作系统的一些基本信息
- 在FLEX中获得当前PLAYER版本等信息.
- 如何获得WM设备信息,如型号、操作系统版本等
- WINDOWS下获得可执行文件的版本描述字符串
- VC/MFC程序中获取当前Windows操作系统版本名称(2016-04-25修改)
- 关于获得当前操作系统的版本类型
- C# 中得到当前操作系统、操作系统的版本、.NET 运行环境等信息