VC++如何获取操作系统类型及显卡信息?小弟找了一下午了,还没解决 我是个donet程序员,但一个项目中需要用到VC来获取相关信息,但我一点也不懂VC,所以请高手能帮忙一下。谢谢各位了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 获取操作系统版本:GetVersionEx,例子 http://msdn.microsoft.com/en-us/library/ms724429(VS.85).aspx//显卡信息:要得到哪些信息? HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class 下面依此读取所有的项,直到找到Class键的值为Display(显卡)或MEDIA(声卡), 找到后读取下面的键值 也可以通过WMI来读取 如果在没有装驱动的情况下读取信息,估计需要通过读取主板bios,显卡bios等来得到。。 GetSystemInfo()好像得不到这么多信息试试Win32_DisplayConfiguration Display Adapters Class = Display ClassGuid = {4d36e968-e325-11ce-bfc1-08002be10318} Multimedia Class = Media ClassGuid = {4d36e96c-e325-11ce-bfc1-08002be10318} #include "stdafx.h" #include <stdlib.h> #include <windows.h> #include <setupapi.h> int main(int argc, char* argv[]) { DWORD dwIdx = 0; SP_DEVINFO_DATA adapterData; DWORD dwType = 0; DWORD dwBuflen = 0; PUCHAR pBuf = NULL; HDEVINFO hScsi = INVALID_HANDLE_VALUE; GUID guidScsiRaid = { 0x4D36E97B, 0xE325, 0x11CE, {0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18} }; BOOL bret = FALSE; hScsi = SetupDiGetClassDevs(&guidScsiRaid , NULL, NULL, DIGCF_PRESENT); adapterData.cbSize = sizeof(SP_DEVINFO_DATA); for(dwIdx = 0; SetupDiEnumDeviceInfo(hScsi, dwIdx, &adapterData); dwIdx++) { SetupDiGetDeviceRegistryProperty( hScsi, &adapterData, SPDRP_DEVICEDESC, &dwType, NULL, 0, &dwBuflen ); if(ERROR_INSUFFICIENT_BUFFER == GetLastError()) { pBuf = (PUCHAR)malloc(dwBuflen); if(SetupDiGetDeviceRegistryProperty( hScsi, &adapterData, SPDRP_DEVICEDESC, &dwType, pBuf, dwBuflen, NULL )) { printf("%s\n", pBuf); } free(pBuf); pBuf = NULL; } } SetupDiDestroyDeviceInfoList(hScsi); return 0; } 把上面的guidScsiRaid 换成{4d36e96c-e325-11ce-bfc1-08002be10318} ,上面的代码基本上就差不多了 我知道java中能获取系统信息 没用过.net应该有吧 CString strRet = _T("显卡:"); CString strMemSize = _T(""); HRESULT hres = E_FAIL; IEnumWbemClassObject* pEnumerator = NULL; hres = m_pSvc->ExecQuery( bstr_t("WQL"), bstr_t("SELECT * FROM Win32_VideoController"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); if (FAILED(hres)) { cout << "Query for operating system name failed." << " Error code = 0x" << hex << hres << endl; m_pSvc->Release(); CoUninitialize(); return FALSE; // Program has failed. } // Step 7: ------------------------------------------------- // Get the data from the query in step 6 ------------------- IWbemClassObject *pclsObj; ULONG uReturn = 0; LONGLONG llTotal = 0; while (pEnumerator) { HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); if(0 == uReturn) { break; } VARIANT vtProp; // Get the value of the Name property hr = pclsObj->Get(L"Description", 0, &vtProp, 0, 0); strRet += vtProp.bstrVal;// VariantClear(&vtProp);// hr = pclsObj->Get(L"AdapterRAM", 0, &vtProp, 0, 0); //strMemSize = vtProp.llVal;// llTotal += (LONGLONG)&vtProp ;// strMemSize.Format( _T("(%I64dM)") , ( llTotal / (1024*1024) ) );// strRet += strMemSize; VariantClear(&vtProp); } return strRet; OSVERSIONINFO OSVersionInfo; OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&OSVersionInfo); if (OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT && OSVersionInfo.dwMajorVersion == 5 && OSVersionInfo.dwMinorVersion == 0) { AfxMessageBox("Windows 2000 OS!"); } else if(OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT && OSVersionInfo.dwMajorVersion == 5 && OSVersionInfo.dwMinorVersion == 1) { AfxMessageBox("Windows XP OS !"); } else if(OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS && OSVersionInfo.dwMajorVersion == 4 && OSVersionInfo.dwMinorVersion == 0) { AfxMessageBox("Windows 98 OS!"); } 请问应如何在另一个类中对CFormView中的控件变量进行操作 MFC中怎么用SetWindowPos()设置窗口的初始位置 NewWindow2与NewWindow3的问题! 怎样弹出文件保存对话框?谢谢! 线程传入参数的问题? 请教:浮动窗口的问题 请问一个小题 谁能给我一种计算24的好方法,一定给分 关于打印。 关于调试器技术 麻烦帮我看下运行下面代码后内存消耗增大20-30K左右的原因,谢谢 创建的cpropertysheet无模式窗口不能进入precreatewindow
下面依此读取所有的项,直到找到Class键的值为Display(显卡)或MEDIA(声卡),
找到后读取下面的键值
也可以通过WMI来读取
如果在没有装驱动的情况下读取信息,估计需要通过读取主板bios,显卡bios等来得到。。
试试
Win32_DisplayConfiguration
Class = Display
ClassGuid = {4d36e968-e325-11ce-bfc1-08002be10318}
Multimedia
Class = Media
ClassGuid = {4d36e96c-e325-11ce-bfc1-08002be10318}
#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>
#include <setupapi.h>
int main(int argc, char* argv[])
{
DWORD dwIdx = 0;
SP_DEVINFO_DATA adapterData;
DWORD dwType = 0;
DWORD dwBuflen = 0;
PUCHAR pBuf = NULL;
HDEVINFO hScsi = INVALID_HANDLE_VALUE;
GUID guidScsiRaid = {
0x4D36E97B,
0xE325,
0x11CE,
{0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}
};
BOOL bret = FALSE;
hScsi = SetupDiGetClassDevs(&guidScsiRaid
, NULL, NULL, DIGCF_PRESENT);
adapterData.cbSize = sizeof(SP_DEVINFO_DATA);
for(dwIdx = 0; SetupDiEnumDeviceInfo(hScsi, dwIdx, &adapterData); dwIdx++)
{
SetupDiGetDeviceRegistryProperty(
hScsi,
&adapterData,
SPDRP_DEVICEDESC,
&dwType,
NULL,
0,
&dwBuflen
);
if(ERROR_INSUFFICIENT_BUFFER == GetLastError())
{
pBuf = (PUCHAR)malloc(dwBuflen);
if(SetupDiGetDeviceRegistryProperty(
hScsi,
&adapterData,
SPDRP_DEVICEDESC,
&dwType,
pBuf,
dwBuflen,
NULL
))
{
printf("%s\n", pBuf);
}
free(pBuf);
pBuf = NULL;
}
}
SetupDiDestroyDeviceInfoList(hScsi);
return 0;
}
应该有吧
CString strMemSize = _T("");
HRESULT hres = E_FAIL; IEnumWbemClassObject* pEnumerator = NULL;
hres = m_pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_VideoController"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator); if (FAILED(hres))
{
cout << "Query for operating system name failed."
<< " Error code = 0x"
<< hex << hres << endl;
m_pSvc->Release();
CoUninitialize();
return FALSE; // Program has failed.
} // Step 7: -------------------------------------------------
// Get the data from the query in step 6 ------------------- IWbemClassObject *pclsObj;
ULONG uReturn = 0; LONGLONG llTotal = 0; while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn); if(0 == uReturn)
{
break;
} VARIANT vtProp; // Get the value of the Name property
hr = pclsObj->Get(L"Description", 0, &vtProp, 0, 0); strRet += vtProp.bstrVal;// VariantClear(&vtProp);// hr = pclsObj->Get(L"AdapterRAM", 0, &vtProp, 0, 0); //strMemSize = vtProp.llVal;// llTotal += (LONGLONG)&vtProp ;
// strMemSize.Format( _T("(%I64dM)") , ( llTotal / (1024*1024) ) );// strRet += strMemSize; VariantClear(&vtProp);
} return strRet;
OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OSVersionInfo);
if (OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT
&& OSVersionInfo.dwMajorVersion == 5
&& OSVersionInfo.dwMinorVersion == 0)
{
AfxMessageBox("Windows 2000 OS!");
}
else if(OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT
&& OSVersionInfo.dwMajorVersion == 5
&& OSVersionInfo.dwMinorVersion == 1)
{
AfxMessageBox("Windows XP OS !");
}
else if(OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
&& OSVersionInfo.dwMajorVersion == 4
&& OSVersionInfo.dwMinorVersion == 0)
{
AfxMessageBox("Windows 98 OS!");
}