描述:
UP
解决方案1:
我这里有一个程序,你参考一下!
获得版本信息
void COsInfoDlg::CheckOSVersion ()
{
int stat = 0;
char buffer[20];
TCHAR data [64];
DWORD dataSize;
DWORD win95Info;
OSVERSIONINFO versionInfo;
HKEY hKey;
LONG result;
//设定OSVERSIONINFO的大小
versionInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
// 获得版本信息
if (!::GetVersionEx (&versionInfo)) {
m_stInfo = (_T ("Not able to get OS information"));
return;
}
// 如果是NT,检查是Server还是WorkStation
if (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
m_stInfo = (_T ("Windows NT"));
dataSize = sizeof (data);
//打开注册表
result = ::RegOpenKeyEx (HKEY_LOCAL_MACHINE,
"System\\CurrentControlSet\\Control\\ProductOptions",
0, KEY_QUERY_VALUE, &hKey);
if (result != ERROR_SUCCESS)
{
SetLastError (result);
return;
}
result = ::RegQueryValueEx (hKey, _T("ProductType"), NULL, NULL,
(LPBYTE) data, &dataSize);
//关闭注册表
RegCloseKey (hKey);
if (result != ERROR_SUCCESS) {
SetLastError (result);
return;
}
if (lstrcmpi (data, "WinNT") == 0) {
m_stInfo = _T ("Windows NT Workstation");
}
else if (lstrcmpi (data, "ServerNT") == 0) {
m_stInfo = _T ("Windows NT Server");
}
else {
m_stInfo = _T ("Windows NT Server - Domain Controller");
}
// 检查版本号
if (versionInfo.dwMajorVersion == 3 || versionInfo.dwMinorVersion == 51) {
m_stMinorVer = _T ("3.51");
}
else {
m_stMinorVer = _T ("4.0");
}
// 获得 build number.
_itoa( versionInfo.dwBuildNumber, buffer, 10 );
m_stBuildNumber = CString (buffer);
}
else if (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
m_stInfo = _T ("Windows 95");
if ((versionInfo.dwMajorVersion > 4) || ((versionInfo.dwMajorVersion == 4)
&& (versionInfo.dwMinorVersion > 0))) {
m_stInfo = _T ("Windows 98");
}
//对win95,build number是低字节
win95Info = (DWORD)(LOBYTE(LOWORD(versionInfo.dwBuildNumber)));
_itoa( win95Info, buffer, 10 );
m_stBuildNumber = CString (buffer);
}
else {
m_stInfo = _T ("Windows 3.1");
}
// 获得service pack信息
m_stServPack = CString (versionInfo.szCSDVersion);
m_stServPack.FreeExtra ();
}
Using the SDK Headers
This version of the Microsoft® Platform SDK enables you to create applications that run on Microsoft Windows® 95, Microsoft Windows NT® 4.0, Windows® 98, Windows Millennium Edition (Windows Me), Windows 2000, Windows XP, and Windows .NET Server 2003 family. You can also create 64-bit applications. The header files use data types that allow you to build both 32- and 64-bit versions of your application from a single source code base. For more information, see Getting Ready for 64-bit Windows.
Microsoft® Visual C++® includes content from the edition of the Platform SDK that was current at the time Visual C++ was released. Therefore, if you install the latest Platform SDK, you may end up with multiple versions of the same header files on your computer. To ensure that you are using the latest version of the SDK header files, follow the directions included in Installing the Platform SDK with Visual Studio. Otherwise, you will receive the following error when compiling code that uses features that were introduced after Visual C++ was released: error C2065: undeclared identifier.
Certain functions that depend on a particular version of Windows are declared using conditional code. This enables you to use the compiler to detect whether your application uses functions that are not supported on its target version(s) of Windows. To compile an application that uses these functions, you must define the appropriate macros. Otherwise, you will receive the C2065 error message. The following table indicates the macros you must define to target each system.
Minimum system required Macros to define
Windows .NET Server 2003 family _WIN32_WINNT>=0x0502
Windows XP _WIN32_WINNT>=0x0501
Windows 2000 _WIN32_WINNT>=0x0500
Windows NT 4.0 _WIN32_WINNT>=0x0400
Windows Me _WIN32_WINDOWS=0x0490
Windows 98 _WIN32_WINDOWS>=0x0410
Internet Explorer 6.0 _WIN32_IE>=0x0600
Internet Explorer 5.01, 5.5 _WIN32_IE>=0x0501
Internet Explorer 5.0, 5.0a, 5.0b _WIN32_IE>=0x0500
Internet Explorer 4.01 _WIN32_IE>=0x0401
Internet Explorer 4.0 _WIN32_IE>=0x0400
Internet Explorer 3.0, 3.01, 3.02 _WIN32_IE>=0x0300
For example, to use the features specifically marked for Windows 2000 in the header files, you need to explicitly define _WIN32_WINNT as 0x0500 or greater. You can define the symbols using the #define statement in each source