我想得到操作系统的一些信息,如何实现?
只要能分辨9X,2K,XP的各个版本就可以了
看了网上的代码,都比较复杂。想求一段尽量短小的,返回类似
“Microsoft XP Pro Build 2600 SP2”的CString即可
问题点数:50、回复次数:5Top
1 楼kingzai(stevenzhu)回复于 2005-03-02 19:10:35 得分 10
http://www.vckbase.com/english/code/system/OSDetect.shtml.htmTop
2 楼ablewindy(我是【风子】我怕谁)回复于 2005-03-02 19:18:01 得分 20
/*********************************************************************
函数功能:获得操作系统版本
*********************************************************************/
BOOL CShowSysinfoDlg::GetOSVersion(CString &strVersion,CString &strBuild)
{
CString strOsVersion;
DWORD winVer;
winVer=GetVersion();
OSVERSIONINFO *osvi;
/************************************************************/
/*Get the build number for Windows NT/Windows 2000 or Win32s*/
DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(winVer)));
DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(winVer)));
DWORD dwBuild;
if (winVer < 0x80000000) // Windows NT/2000
{
dwBuild = (DWORD)(HIWORD(winVer));
}
else if (dwWindowsMajorVersion < 4) // Win32s
{
dwBuild = (DWORD)(HIWORD(winVer) & ~0x8000);
}
else // Windows 95/98 -- No build number
{
dwBuild = 0;
}
strBuild.Format("%d",dwBuild);
/************************************************************/
if(winVer<0x80000000)
{/*NT */
strOsVersion="WindowsNT3";
osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
if (osvi!=NULL)
{
memset(osvi,0,sizeof(OSVERSIONINFO));
osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
if(osvi->dwMajorVersion==4L)
{
strOsVersion="WindowsNT4";
}
else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==0L)
{
strOsVersion="Windows2000";
}
else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==1L)
{
strOsVersion="WindowsXP";
}
free(osvi);
}
}
else if(LOBYTE(LOWORD(winVer))<4)
{
strOsVersion="Windows32s";
}
else
{
strOsVersion="Windows95";
osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
if (osvi!=NULL)
{
memset(osvi,0,sizeof(OSVERSIONINFO));
osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==10L)
{
strOsVersion="Windows98";
}
else if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==90L)
{
strOsVersion="WindowsME";
}
free(osvi);
}
}
strVersion=strOsVersion;
return TRUE;
}
Top
3 楼chinajuanbob(chinajuanbob)回复于 2005-03-02 19:32:36 得分 0
我想再得到build和sp
怎么做?Top
4 楼chinajuanbob(chinajuanbob)回复于 2005-03-02 19:34:33 得分 0
build知道了
sp怎么办?Top
5 楼keiy()回复于 2005-03-02 19:46:04 得分 20
从注册表中取
CRegKey m;
OSVERSIONINFO VersionInfo;
ZeroMemory(&VersionInfo,sizeof(VersionInfo));
VersionInfo.dwOSVersionInfoSize=sizeof(VersionInfo);
GetVersionEx(&VersionInfo);
char buff[200];
unsigned long l;
CString ver;
switch (VersionInfo.dwPlatformId){
{
case VER_PLATFORM_WIN32_WINDOWS:
m.Open(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion");
break;
case VER_PLATFORM_WIN32_NT:
m.Open(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
break;
default:
break;
}
}
l=200;
m.QueryValue(buff,"ProductName",&l);
ver=buff;
ver+=" ";
l=200;
m.QueryValue(buff,"CurrentVersion",&l);
ver+=buff;
ver+=".";
l=200;
m.QueryValue(buff,"CurrentBuildNumber",&l);
ver+=buff;
ver+=" ";
l=200;
m.QueryValue(buff,"CSDVersion",&l);
ver+=buff;
MessageBox(ver);Top




