#include #include #include #include #include #pragma comment (lib, "comsuppw.lib")
#pragma comment (lib, "wbemuuid.lib")
int main(void) //主函式,程式的入口
// 設定com的安全認證級別
hres = coinitializesecurity(
null,
-1,
null,
null,
rpc_c_authn_level_default,
rpc_c_imp_level_impersonate,
null,
eoac_none,
null
);
if( failed(hres) )
// 獲得wmi連線com介面
iwbemlocator *ploc = null;
hres = cocreateinstance(
clsid_wbemlocator,
null,
clsctx_inproc_server,
iid_iwbemlocator,
reinterpret_cast(&ploc)
);
if( failed(hres) )
// 通過連線介面連線wmi的核心物件名"root//cimv2"
iwbemservices *psvc = null;
hres = ploc->connectserver(
_bstr_t( l"root\\cimv2" ),
null,
null,
null,
0,
null,
null,
&psvc
);
if( failed(hres) )
// 設定請求**的安全級別
hres = cosetproxyblanket(
psvc,
rpc_c_authn_winnt,
rpc_c_authz_none,
null,
rpc_c_authn_level_call,
rpc_c_imp_level_impersonate,
null,
eoac_none
);
if( failed(hres) )
// 通過請求**來向wmi傳送請求
ienumwbemclassobject *penumerator = null;
hres = psvc->execquery(
bstr_t("wql"),
bstr_t( "select * from win32_networkadapter where netconnectionstatus =2" ),
wbem_flag_forward_only | wbem_flag_return_immediately,
null,
&penumerator
);
if( failed(hres) )
// 迴圈列舉所有的結果物件
while( penumerator )
// 獲取屬性值
variant vtproperty;
variantinit( &vtproperty );
pclsobj->get( bstr_t("name"), 0, &vtproperty, null, null );
printf("%s\n", w2a(vtproperty.bstrval));
variantclear( &vtproperty );
pclsobj->release();
} // end while
// 釋放資源
penumerator->release();
psvc->release();
ploc->release();
couninitialize();
return 0;
}
VC 獲取物理網絡卡的MAC位址
獲取網絡卡的mac位址的方法很多,如 netbios,snmp,getadaptersinfo等。經過測試發現 netbios 方法在網線拔出的情況下獲取不到mac,而 snmp方法有時會獲取多個重複的網絡卡的mac,試來試去還是 getadaptersinfo方法比較好,網線拔出的情況下可以獲取m...
c ,使用WMI物件獲取系統的DPI。
在使用wmi物件前,先要新增對system.management的引用,然後就可以呼叫wmi物件。我們使用的wmi物件是 win32 desktopmonitor 物件參考 static void main string args console.writeline pixelsperxlogica...
c ,使用WMI物件獲取系統的DPI。
在使用wmi物件前,先要新增對system.management的引用,然後就可以呼叫wmi物件。我們使用的wmi物件是 win32 desktopmonitor 物件參考 static void main string args console.writeline pixelsperxlogica...