📄 osinfo.cpp
字号:
//------------------------------------------------------------------------------
// OSInfo.cpp
//
// This file contains OSInfo. Basically, this class just determines
// which windows operating system is running. It also figures out service
// pack or build information.
//
// Copyright (c) 2001 Paul Wendt [p-wendt@wideopenwest.com]
//
// Updated J. Michael McGarrah
//
#include "OSInfo.h"
#include <windows.h>
#include <tchar.h>
#include "dtwinver.h"
#include <sstream>
using namespace std;
OSInfo::OSInfo()
{
determineOSInfo();
}
OSInfo::OSInfo(const OSInfo& source)
{
assign(source);
}
OSInfo& OSInfo::operator=(const OSInfo& right)
{
if (this != &right)
{
assign(right);
}
return (*this);
}
OSInfo::~OSInfo()
{
// nothing to do yet
}
void OSInfo::assign(const OSInfo& source)
{
m_eVersion = source.m_eVersion;
m_strDescription = source.m_strDescription;
m_strOSBuildNumber = source.m_strOSBuildNumber;
m_strOSPlatform = source.m_strOSPlatform;
m_strOSMinorVersion = source.m_strOSMinorVersion;
m_strOSServicePack = source.m_strOSServicePack;
}
void OSInfo::determineOSInfo()
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
//--------------------------------------------------------------------
// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
// If that fails, try using the OSVERSIONINFO structure.
//
memset(&osvi, 0, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if (!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi)))
{
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (!GetVersionEx((OSVERSIONINFO*) &osvi))
{
return;
}
}
switch (osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT:
//------------------------------------------
// Test for the product.
//
if (osvi.dwMajorVersion <= 4)
{
m_strDescription += "Microsoft Windows NT ";
}
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
{
m_strDescription += "Microsoft Windows 2000 ";
m_eVersion = WIN2000;
}
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
{
m_strDescription += "Microsoft Windows XP ";
m_eVersion = WINXP;
}
//-------------------------------------------------------------
// get version, service pack (if any), and build number.
//
if (osvi.dwMajorVersion <= 4)
{
ostringstream os;
os << "version " << osvi.dwMajorVersion << "." << osvi.dwMinorVersion
<< " " << osvi.szCSDVersion << " (Build " << (osvi.dwBuildNumber & 0xFFFF)
<< ") " << ends;
m_strDescription += os.str();
if (osvi.dwMajorVersion == 4)
{
m_eVersion = WINNT40;
}
else if ((osvi.dwMajorVersion == 3) && (osvi.dwMinorVersion == 51))
{
m_eVersion = WINNT351;
}
}
else
{
ostringstream os;
os << osvi.szCSDVersion << " (Build "
<< (osvi.dwBuildNumber & 0xFFFF) << ")" << ends;
m_strDescription += os.str();
}
break;
case VER_PLATFORM_WIN32_WINDOWS:
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
{
m_strDescription += "Microsoft Windows 95 ";
if (osvi.szCSDVersion[1] == 'C')
{
m_strDescription += "OSR2 ";
}
else
{
m_strDescription += osvi.szCSDVersion[1];
m_strDescription += " ";
}
m_eVersion = WIN95;
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
{
m_strDescription += "Microsoft Windows 98 ";
if (osvi.szCSDVersion[1] == 'A')
{
m_strDescription += "SE ";
}
m_eVersion = WIN98;
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
{
m_strDescription += "Microsoft Windows Me ";
m_eVersion = WINME;
}
break;
case VER_PLATFORM_WIN32s:
m_strDescription += "Microsoft Win32s ";
m_eVersion = WIN32S;
break;
}
// ******************************
// SECOND OS VERSION CODE SECTION
// ******************************
// m_strOSBuildNumber;
// m_strOSPlatform;
// m_strOSMinorVersion;
// m_strOSServicePack;
OS_VERSION_INFO osverinfo;
memset(&osverinfo, 0, sizeof(OS_VERSION_INFO));
TCHAR sText[512];
TCHAR sBuf[100];
COSVersion os;
if (os.GetVersion(&osverinfo))
{
switch (osverinfo.dwUnderlyingPlatformId)
{
case DT_PLATFORM_DOS:
{
_stprintf(sBuf, _T("DOS"));
_tcscat(sText, sBuf);
m_strOSPlatform = sBuf;
break;
}
case DT_PLATFORM_WINDOWS3x:
{
_stprintf(sBuf, _T("Windows"));
_tcscat(sText, sBuf);
m_strOSPlatform = sBuf;
break;
}
case DT_PLATFORM_WINDOWSCE:
{
_stprintf(sBuf, _T("Windows CE"));
_tcscat(sText, sBuf);
m_strOSPlatform = sBuf;
break;
}
case DT_PLATFORM_WINDOWS9x:
{
if (os.IsWindows95(&osverinfo))
_stprintf(sBuf, _T("Windows 95"));
else if (os.IsWindows95SP1(&osverinfo))
_stprintf(sBuf, _T("Windows 95 SP1"));
else if (os.IsWindows95OSR2(&osverinfo))
_stprintf(sBuf, _T("Windows 95 OSR2"));
else if (os.IsWindows98(&osverinfo))
_stprintf(sBuf, _T("Windows 98"));
else if (os.IsWindows98SP1(&osverinfo))
_stprintf(sBuf, _T("Windows 98 SP1"));
else if (os.IsWindows98SE(&osverinfo))
_stprintf(sBuf, _T("Windows 98 Second Edition"));
else if (os.IsWindowsME(&osverinfo))
_stprintf(sBuf, _T("Windows Millenium Edition"));
else
_stprintf(sBuf, _T("Windows ??"));
_tcscat(sText, sBuf);
m_strOSPlatform = sBuf;
break;
}
case DT_PLATFORM_NT:
{
if (os.IsNTPreWin2k(&osverinfo))
{
_stprintf(sBuf, _T("Windows NT"));
_tcscat(sText, sBuf);
if (os.IsNTWorkstation(&osverinfo))
{
_stprintf(sBuf, _T(" (Workstation)"));
_tcscat(sText, sBuf);
}
else if (os.IsNTStandAloneServer(&osverinfo))
{
_stprintf(sBuf, _T(" (Server)"));
_tcscat(sText, sBuf);
}
else if (os.IsNTPDC(&osverinfo))
{
_stprintf(sBuf, _T(" (Primary Domain Controller)"));
_tcscat(sText, sBuf);
}
else if (os.IsNTBDC(&osverinfo))
{
_stprintf(sBuf, _T(" (Backup Domain Controller)"));
_tcscat(sText, sBuf);
}
if (os.IsNTDatacenterServer(&osverinfo))
{
_stprintf(sBuf, _T(" (Datacenter)"));
_tcscat(sText, sBuf);
}
else if (os.IsNTEnterpriseServer(&osverinfo))
{
_stprintf(sBuf, _T(" (Enterprise)"));
_tcscat(sText, sBuf);
}
}
else if (os.IsWindows2000(&osverinfo))
{
_stprintf(sBuf, _T("Windows 2000"));
_tcscat(sText, sBuf);
if (os.IsWin2000Professional(&osverinfo))
{
_stprintf(sBuf, _T(" (Professional)"));
_tcscat(sText, sBuf);
}
else if (os.IsWin2000Server(&osverinfo))
{
_stprintf(sBuf, _T(" (Server)"));
_tcscat(sText, sBuf);
}
else if (os.IsWin2000DomainController(&osverinfo))
{
_stprintf(sBuf, _T(" (Domain Controller)"));
_tcscat(sText, sBuf);
}
if (os.IsWin2000DatacenterServer(&osverinfo))
{
_stprintf(sBuf, _T(" (Datacenter)"));
_tcscat(sText, sBuf);
}
else if (os.IsWin2000AdvancedServer(&osverinfo))
{
_stprintf(sBuf, _T(" (Advanced Server)"));
_tcscat(sText, sBuf);
}
if (os.IsTerminalServicesInstalled(&osverinfo))
{
_stprintf(sBuf, _T(" (Terminal Services)"));
_tcscat(sText, sBuf);
}
if (os.ISSmallBusinessEditionInstalled(&osverinfo))
{
_stprintf(sBuf, _T(" (BackOffice Small Business Edition)"));
_tcscat(sText, sBuf);
}
}
else if (os.IsWindowsXP(&osverinfo))
{
_stprintf(sBuf, _T("Windows XP"));
_tcscat(sText, sBuf);
if (os.IsXPPersonal(&osverinfo))
{
_stprintf(sBuf, _T(" (Personal)"));
_tcscat(sText, sBuf);
}
else if (os.IsXPProfessional(&osverinfo))
{
_stprintf(sBuf, _T(" (Professional)"));
_tcscat(sText, sBuf);
}
else if (os.IsXPServer(&osverinfo))
{
_stprintf(sBuf, _T(" (Server)"));
_tcscat(sText, sBuf);
}
else if (os.IsXPDomainController(&osverinfo))
{
_stprintf(sBuf, _T(" (Domain Controller)"));
_tcscat(sText, sBuf);
}
if (os.IsXPDatacenterServer(&osverinfo))
{
_stprintf(sBuf, _T(" (Datacenter)"));
_tcscat(sText, sBuf);
}
else if (os.IsXPAdvancedServer(&osverinfo))
{
_stprintf(sBuf, _T(" (Advanced Server)"));
_tcscat(sText, sBuf);
}
if (os.IsTerminalServicesInstalled(&osverinfo))
{
_stprintf(sBuf, _T(" (Terminal Services)"));
_tcscat(sText, sBuf);
}
if (os.ISSmallBusinessEditionInstalled(&osverinfo))
{
_stprintf(sBuf, _T(" (BackOffice Small Business Edition)"));
_tcscat(sText, sBuf);
}
}
m_strOSPlatform = sBuf;
break;
}
default:
{
_stprintf(sBuf, _T("Unknown OS"));
_tcscat(sText, sBuf);
m_strOSPlatform = sBuf;
break;
}
} // end switch
_stprintf(sBuf, _T("%d."), osverinfo.dwUnderlyingMajorVersion);
_tcscat(sText, sBuf);
m_strOSMinorVersion = sBuf;
_stprintf(sBuf, _T("%02d"), osverinfo.dwUnderlyingMinorVersion);
_tcscat(sText, sBuf);
m_strOSMinorVersion.append(sBuf);
if (osverinfo.dwUnderlyingBuildNumber)
{
_stprintf(sBuf, _T("%d"), osverinfo.dwUnderlyingBuildNumber);
_tcscat(sText, sBuf);
m_strOSBuildNumber = sBuf;
}
if (osverinfo.wUnderlyingServicePack)
{
_stprintf(sBuf, _T("Service Pack: %d"), osverinfo.wUnderlyingServicePack);
_tcscat(sText, sBuf);
m_strOSServicePack = sBuf;
}
}
else
{
_stprintf(sText, _T("Failed in call to GetOSVersion"));
m_strOSPlatform = sText;
m_strOSBuildNumber = "unknown";
m_strOSMinorVersion = "unknown";
m_strOSServicePack = "unknown";
}
// m_strOSBuildNumber; *
// m_strOSPlatform; *
// m_strOSMinorVersion; *
// m_strOSServicePack; *
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -