CoInitialize(NULL);
//Security needs to be initialized in XP first and this was the major problem
//why it was not working in XP.
if(CoInitializeSecurity( NULL,
-1,NULL,NULL,RPC_C_AUTHN_LEVEL_PKT,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE,0) != S_OK)return;
IWbemLocator * pIWbemLocator = NULL;IWbemServices * pWbemServices = NULL;IEnumWbemClassObject * pEnumObject = NULL;BSTR bstrNamespace = (L"root\\cimv2");if(CoCreateInstance (CLSID_WbemAdministrativeLocator,NULL ,CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER ,IID_IUnknown ,( void ** ) & pIWbemLocator) != S_OK)return;if(pIWbemLocator->ConnectServer(bstrNamespace, // NamespaceNULL, // UseridNULL, // PWNULL, // Locale0, // flagsNULL, // AuthorityNULL, // Context&pWbemServices) != S_OK)return;
HRESULT hRes;// BSTR strQuery = (L"Select * from Win32_PhysicalMedia");BSTR strQuery = (L"Select * from Win32_PhysicalMedia");BSTR strQL = (L"WQL");hRes = pWbemServices->ExecQuery(strQL,
strQuery,WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumObject);
if(hRes != S_OK){MessageBox("Could not execute Query");return;}ULONG uCount = 1, uReturned;IWbemClassObject * pClassObject = NULL;hRes = pEnumObject->Reset();if(hRes != S_OK){MessageBox("Could not Enumerate");return;}hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);if(hRes != S_OK){MessageBox("Could not Enumerate");return;}VARIANT v;//BSTR strClassProp = SysAllocString(L"SerialNumber");//ProductBSTR strClassProp = SysAllocString(L"SerialNumber");hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0);if(hRes != S_OK){MessageBox("Could not Get Value");return;}SysFreeString(strClassProp);
_bstr_t bstrPath = &v; //Just to convert BSTR to ANSIchar* strPath=(char*)bstrPath;if (SUCCEEDED(hRes)){VariantClear( &v );pIWbemLocator->Release();pWbemServices->Release();pEnumObject->Release();pClassObject->Release();CoUninitialize();return strPath;}else{MessageBox("Error in getting object");return;}VariantClear( &v );pIWbemLocator->Release();pWbemServices->Release();pEnumObject->Release();pClassObject->Release();CoUninitialize();return;有点乱,你自己整理一下~~google一下,网上、MSDN都有例子和用法的。你可以直接用WMI的,XP内置。

解决方案 »

  1.   

    补充:在MSDN索引栏输入"Win32_"就可以看到所有支持的获取信息列表,和相关属性。
      

  2.   

    很好但为什么 我INCLUDE头文件 找不到该文件啊 我的是XP HOME 应该可以啊
      

  3.   

    搞定了 但我的Wbemuuid.lib  是VS7的 DEBUG编译通不过 有没有VC6的啊  
    WbemUuid.Lib(wbemprov_i.obj) : fatal error LNK1103: debugging information corrupt; recompile module
      

  4.   

    那用VS2003编译吧,MSDN说VC6是可以的~~