c语言读取windows系统信息,C语言取得windows操作系统信息

#include

#include

#define BUFSIZE 80

BOOL GetOSVer(char *szOSName);

int main()

{

char szname[MAX_PATH];

memset(szname,0,MAX_PATH);

BOOL bRet = GetOSVer(szname);

printf("Your Os version is %s\n ",szname);

return 0;

}

BOOL GetOSVer(char *szname)

{

OSVERSIONINFOEX osvi;

BOOL bOsVersionInfoEx;

// 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 FALSE;

}

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 )

strcpy(szname,"Microsoft Windows Server 2003 family, ");

if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )

strcpy(szname,"Microsoft Windows XP ");

if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )

strcpy(szname,"Microsoft Windows 2000 ");

if ( osvi.dwMajorVersion <= 4 )

strcpy(szname,"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 )

strcat(szname, "Workstation 4.0 " );

else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )

strcat(szname, "Home Edition " );

else

strcat(szname,  "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 )

strcat(szname, "Datacenter Edition " );

else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )

strcat(szname, "Enterprise Edition " );

else if ( osvi.wSuiteMask == VER_SUITE_BLADE )

strcat(szname, "Web Edition " );

else

strcat(szname, "Standard Edition " );

}

else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )

{

if( osvi.wSuiteMask & VER_SUITE_DATACENTER )

strcat(szname, "Datacenter Server " );

else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )

strcat(szname, "Advanced Server " );

else

strcat(szname, "Server " );

}

else  // Windows NT 4.0

{

if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )

strcat(szname,"Server 4.0, Enterprise Edition " );

else

strcat(szname, "Server 4.0 " );

}

}

}

else  // Test for specific product on Windows NT 4.0 SP5 and earlier

{

HKEY hKey;

char szProductType[BUFSIZE];

DWORD dwBufLen=BUFSIZE;

LONG lRet;

lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,

"SYSTEM\\CurrentControlSet\\Control\\ProductOptions",

0, KEY_QUERY_VALUE, &hKey );

if( lRet != ERROR_SUCCESS )

return FALSE;

lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL,

(LPBYTE) szProductType, &dwBufLen);

if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) )

return FALSE;

RegCloseKey( hKey );

if ( lstrcmpi( "WINNT", szProductType) == 0 )

strcat(szname, "Workstation " );

if ( lstrcmpi( "LANMANNT", szProductType) == 0 )

strcat(szname, "Server " );

if ( lstrcmpi( "SERVERNT", szProductType) == 0 )

strcat(szname,"Advanced Server " );

printf( "%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion );

}

// Display service pack (if any) and build number.

if( osvi.dwMajorVersion == 4 &&

lstrcmpi( osvi.szCSDVersion, "Service Pack 6" ) == 0 )

{

HKEY hKey;

LONG lRet;

// Test for SP6 versus SP6a.

lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,

"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009",

0, KEY_QUERY_VALUE, &hKey );

if( lRet == ERROR_SUCCESS )

printf( "Service Pack 6a (Build %d)\n", osvi.dwBuildNumber & 0xFFFF );

else // Windows NT 4.0 prior to SP6a

{

printf( "%s (Build %d)\n",

osvi.szCSDVersion,

osvi.dwBuildNumber & 0xFFFF);

}

RegCloseKey( hKey );

}

else // Windows NT 3.51 and earlier or Windows 2000 and later

{

printf( "%s (Build %d)\n",

osvi.szCSDVersion,

osvi.dwBuildNumber & 0xFFFF);

}

break;

// Test for the Windows 95 product family.

case VER_PLATFORM_WIN32_WINDOWS:

if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)

{

strcpy(szname,"Microsoft Windows 95 ");

if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )

strcat(szname,"OSR2 " );

}

if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)

{

strcpy(szname,"Microsoft Windows 98 ");

if ( osvi.szCSDVersion[1] == 'A' )

strcat(szname,"SE " );

}

if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)

{

strcpy(szname,"Microsoft Windows Millennium Edition\n");

}

break;

case VER_PLATFORM_WIN32s:

printf ("Microsoft Win32s\n");

break;

}

// getchar();

return TRUE;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值