vc获得计算机硬件信息.
各为好心的大哥啊.帮帮我.
怎么用vc获得硬件信息呢(vc获得显卡的型号和显存)?最好能给个例子.能运行的例子.
我在网上找了好几天,找到的例子都不能编译.郁闷.
我的邮箱是gjlove100@163.com.
[解决办法]
//Build it in VC++ 2005 with the following command
// cl /Zc:wchar_t- videocontroller.cpp
// by Onega(www.fruitfruit.com)
#define _WIN32_DCOM
#include <Wbemidl.h>
#pragma comment(lib, "Wbemuuid.lib ")
#include <atlbase.h>
#include "objbase.h "
#include <windows.h>
#include <comutil.h>
#pragma comment(lib, "comsupp.lib ")
#include <iostream>
void print_property(CComBSTR bstrPropName, _variant_t& varProperty)
{
std::cout < < " " < <(LPCTSTR)_bstr_t(bstrPropName);
std::cout < < " = ";
if(varProperty.vt !=VT_EMPTY && VT_NULL != varProperty.vt)
{
_variant_t vDest;
HRESULT hr = VariantChangeType(&vDest, &varProperty,0,VT_BSTR);
if(SUCCEEDED(hr))
std::cout < < (LPCTSTR)_bstr_t(varProperty);
else
{
if(varProperty.vt == (VT_ARRAY | VT_I4) )
{
SAFEARRAY* psa = varProperty.parray;
int *pIntArray = NULL;
SafeArrayAccessData(psa,(VOID**)&pIntArray);
UINT uDim = SafeArrayGetDim(psa);
if(1==uDim)
{
long lLbound,lRbound;
SafeArrayGetLBound(psa,1,&lLbound);
SafeArrayGetUBound(psa,1,&lRbound);
for(long i=lLbound;i <=lRbound;i++)
{
std::cout < < pIntArray[i] < < " ";
}
}
SafeArrayUnaccessData(psa);
}
else
{
std::cout < < varProperty.vt < < " type ";
}
}
}
else
{
if(varProperty.vt == VT_EMPTY)
std::cout < < "VT_EMPTY ";
else
std::cout < < "VT_NULL ";
}
std::cout < <std::endl;
}
int main()
{
CoInitialize(NULL);
{
HRESULT hr = S_OK;
CComPtr <IWbemLocator> spLoc;
hr = spLoc.CoCreateInstance(CLSID_WbemLocator);
CComBSTR bstrNamespace( "\\\\.\\root\\CIMV2 ");
CComPtr <IWbemServices> spServices;
hr = spLoc-> ConnectServer(bstrNamespace, NULL, NULL, 0,
NULL, 0, 0, &spServices);
hr = CoSetProxyBlanket(spServices, RPC_C_AUTHN_DEFAULT,
RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
{
CComPtr <IEnumWbemClassObject> spEnumInst;
hr = spServices-> CreateInstanceEnum(CComBSTR( "Win32_VideoController "),
WBEM_FLAG_SHALLOW, NULL, &spEnumInst);
bool bFinished = false;
while (!bFinished)
{
ULONG uNumOfInstances = 0;
CComPtr <IWbemClassObject> spInstance;
HRESULT hrNext = spEnumInst-> Next(10000, 1, &spInstance,
&uNumOfInstances);
if (hrNext == WBEM_S_FALSE)
bFinished = true;
else if (hrNext == WBEM_S_NO_ERROR)
{
//PrintObject(spInstance);
_variant_t varProperty;
CComBSTR bstrPropName;
bstrPropName = CComBSTR( "PNPDeviceID ");
hr = spInstance-> Get(bstrPropName,0,&varProperty,NULL,0);
print_property(bstrPropName,varProperty);
bstrPropName = CComBSTR( "AdapterRAM ");
hr = spInstance-> Get(bstrPropName,0,&varProperty,NULL,0);
print_property(bstrPropName,varProperty);
bstrPropName = CComBSTR( "Description ");
hr = spInstance-> Get(bstrPropName,0,&varProperty,NULL,0);
print_property(bstrPropName,varProperty);
}
}
}
}
std::cout < < "finished " < <std::endl;
CoUninitialize();
system( "pause ");
return 0;
}
[解决办法]
wmi...
当时我们检测硬件的时候用过wmi 注册表 汇编等等,没一种准的....
[解决办法]
http://msdn2.microsoft.com/en-us/library/aa393964.aspx