关于 Windows 版本检测 的目前比较完善的代码段:
// ===============================================
// Getting the System Version.
// Copyrights(C)2002 YangTze presents – 09/24/2002
// ===============================================
{
OSVERSIONINF OEX osvi;
BOOL bOsVersionInfoEx;
TCHAR szBuf[ 4096 ];
lstrcpy( szBuf,”Error!” );
// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
// If that fails,try using the OSVERSIONINFO structure.
ZeroMemory( &osvi,sizeof( OSVERSIONINFOEX ) );
osvi.dwOSVer sionInfoSize = sizeof( OSVERSIONINFOEX );
if( !( bOsVersionInfoEx = GetVersionEx( ( OSVERSIONINFO * )&osvi ) ) ) {
// If OSVERSIONINFOEX doesn’t work,try OSVERSIONINFO.
osvi.dwOSVer sionInfoSize = sizeof( OSVERSIONINFO );
if( !GetVersionEx( ( OSVERSIONINFO * )&osvi ) ) {
lstrcpy( szBuf,”Error!” );
return;
}
}
switch( osvi.dwPlatformId ) {
case VER_PLATFORM_WIN32_NT:
// Test for the product.
if( osvi.dwMajorVersion <= 4 )
lstrcpy( szBuf,_T(“Microsoft Windows NT”) );
if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
lstrcpy( szBuf,_T(“Microsoft Windows 2000″) );
if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
lstrcpy( szBuf,_T(“Microsoft Windows XP”) );
// Test for product type.
if( bOsVersionInfoEx ) {
if( osvi.wProductType == VER_NT_WORKSTATION ) {
if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
lstrcat( szBuf,_T(” Personal”) );
else
lstrcat( szBuf,_T(” Professional”) );
}
else if( osvi.wProductType == VER_NT_SERVER ) {
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
lstrcat( szBuf,_T(” DataCenter Server”) );
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
lstrcat( szBuf,_T(” Advanced Server”) );
else
lstrcat( szBuf,_T(” Server”) );
}
}
else {
HKEY hKey;
TCHAR szProductType[ 80 ];
DWORD dwBufLen;
RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
_T(“SYSTEM\\CurrentControlSet\\Contr ol\\ProductOptions”),
0,
KEY_QUERY_VALUE,
&hKey
);
RegQueryValueEx(
hKey,
_T(“ProductType”),
NULL,
NULL,
( LPBYTE )szProductType,
&dwBufLen
);
RegCloseKey( hKey );
if( lstrcmpi( _T(“WINNT”),szProductType) == 0 )
lstrcat( szBuf,_T(” Professional”) );
if( lstrcmpi( _T(“LANMANNT”),szProductType) == 0 )
lstrcat( szBuf,_T(” Server”) );
if( lstrcmpi( _T(“SERVERNT”),szProductType) == 0 )
lstrcat( szBuf,_T(” Advanced Server”) );
}
// Display version,service pack (if any),and build number.
if( osvi.dwMajorVersion <= 4 ) {
TCHAR tmp[ 80 ];
wsprintf(
tmp,
_T(” Version %d.%d %s (Build %d)”),
osvi.dwMajorVersion,
osvi.dwMinorVersion,
osvi.szCSDVersion,
osvi.dwBuildNumber & 0xFFFF
);
lstrcat( szBuf,tmp );
}
else {
TCHAR tmp[ 80 ];
wsprintf( tmp,_T(” %s (Build %d)”),osvi.szCSDVersion,osvi.dwBuildNumber & 0xFFFF );
lstrcat( szBuf,tmp );
}
break;
case VER_PLATFORM_WIN32_WINDOWS:
if( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0 ) {
lstrcpy( szBuf,_T(“Microsoft Windows 95″) );
if( osvi.szCSDVersion[ 1 ] == ‘C’ || osvi.szCSDVersion[ 1 ] == ‘B’ ) {
lstrcat( szBuf,_T(” OSR2″) );
}
}
if( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10 ) {
lstrcpy( szBuf,_T(“Microsoft Windows 98″) );
if( osvi.szCSDVersion[ 1 ] == ‘A’ ) {
lstrcat( szBuf,_T(” SE”) );
}
}
if( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90 ) {
lstrcpy( szBuf,_T(“Microsoft Windows Me”) );
}
break;
case VER_PLATFORM_WIN32s:
lstrcpy( szBuf,_T(“Microsoft Win32s”) );
break;
default:
lstrcpy( szBuf,”Error!” );
}
AfxMessageBo x( szBuf ); // 版本信息保存在 szBuf 中!
}
-
近期文章
近期评论
- coolker 发表在《打造最快的Hash表》
- struggle 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- diys 发表在《C语言编程宝典(王大刚) 1.1 C 语言的产生与发展》
文章归档
- 2022 年十月
- 2014 年一月
- 2013 年十二月
- 2012 年十一月
- 2012 年七月
- 2012 年六月
- 2012 年五月
- 2012 年四月
- 2012 年三月
- 2012 年二月
- 2011 年十二月
- 2011 年十月
- 2011 年九月
- 2011 年八月
- 2011 年七月
- 2011 年六月
- 2011 年五月
- 2011 年四月
- 2011 年三月
- 2011 年二月
- 2011 年一月
- 2010 年十二月
- 2010 年十一月
- 2010 年十月
- 2010 年九月
- 2010 年八月
- 2010 年七月
- 2010 年六月
- 2010 年五月
- 2010 年四月
- 2010 年三月
- 2010 年二月
- 2010 年一月
- 2009 年十二月
- 2009 年十一月
- 2009 年十月
- 2009 年九月
- 2009 年八月
- 2009 年七月
- 2009 年六月
- 2009 年五月
- 2009 年四月
- 2009 年三月
- 2009 年二月
- 2009 年一月
- 2008 年十二月
- 2008 年十一月
- 2008 年十月
- 2008 年九月
- 2008 年八月
- 2008 年七月
- 2008 年六月
- 2008 年五月
- 2008 年四月
- 2008 年三月
- 2008 年二月
- 2008 年一月
- 2007 年十二月
- 2007 年十一月
- 2007 年十月
- 2007 年九月
- 2007 年八月
- 2007 年七月
- 2007 年六月
- 2007 年三月
- 2007 年二月
- 2007 年一月
- 2006 年十二月
- 2006 年十一月
- 2006 年十月
- 2006 年九月
- 2006 年八月
- 2006 年七月
- 2006 年六月
- 2006 年五月
- 2006 年四月
- 2006 年三月
- 2006 年二月
- 2006 年一月
- 2005 年十二月
- 2005 年十一月
分类目录
功能