使用VC2005读取指定网卡速率(就是任务栏左键网卡标示时显示的"10M","100M"),现在可以取得网卡的MAC地址等,但是在读取'MaxSpeed'这个参数时,值始终显示为空如下:
MACAddress : 00:11:95:FF:20:90
Manufacturer : Microsoft
MaxNumberControlled : 0
MaxSpeed :
Name : ???????????Query部分使用的Code如下:
IEnumWbemClassObject* pEnumerator = NULL;
//hres = pSvc->ExecQuery( bstr_t( "WQL" ),bstr_t( "SELECT * from Win32_DisplayControllerConfiguration" ),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator );
//hres = pSvc->ExecQuery( bstr_t( "WQL" ),bstr_t( "SELECT * from Win32_DesktopMonitor" ),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator );
// hres = pSvc->ExecQuery( bstr_t( "WQL" ),bstr_t( "SELECT * from Win32_Processor" ),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator );
//hres = pSvc->ExecQuery( bstr_t( "WQL" ),bstr_t( "SELECT * from Win32_Process" ),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator );
//  hres = pSvc->ExecQuery( bstr_t( "WQL" ),bstr_t( "SELECT * from Win32_NetworkAdapterConfiguration Where IPEnabled = True"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator );
// hres = pSvc->ExecQuery( bstr_t( "WQL" ),bstr_t( "SELECT * from Win32_NetworkAdapterConfiguration Where MACAddress = \'00:11:95:FF:20:90\' And IPEnabled = True"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator );
hres = pSvc->ExecQuery( bstr_t( "WQL" ),bstr_t( "SELECT * from Win32_NetworkAdapter Where MACAddress = \'00:11:95:FF:20:90\'"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator );
if( FAILED( hres ) ) {
cout << "Query for print queues failed. Error code = 0x" << hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
else {
IWbemClassObject* pInstance = NULL;
ULONG dwCount; while( pEnumerator->Next( WBEM_INFINITE,1,&pInstance,&dwCount ) == S_OK ) 
{
SAFEARRAY* pvNames = NULL;
if( pInstance->GetNames( NULL,WBEM_FLAG_ALWAYS | WBEM_MASK_CONDITION_ORIGIN,NULL,&pvNames ) == S_OK ) {
long vbl,vbu;
SafeArrayGetLBound( pvNames,1,&vbl );
SafeArrayGetUBound( pvNames,1,&vbu );
for( long idx = vbl;idx <= vbu;idx ++ ) {
long aidx = idx;
wchar_t* wsName = 0;
VARIANT vValue;
VariantInit( &vValue );
SafeArrayGetElement( pvNames,&aidx,&wsName );
BSTR bs = SysAllocString( wsName );
hres = pInstance->Get( bs,0,&vValue,NULL,0 );
SysFreeString( bs );
if( SUCCEEDED( hres ) ) {
char szANSIString[ MAX_PATH ];
WideCharToMultiByte( CP_ACP,WC_COMPOSITECHECK,wsName,-1,szANSIString,sizeof( szANSIString ),NULL,NULL );
cout << szANSIString << " : ";
switch( vValue.vt ) {
case VT_BSTR:
wprintf( L"%s",V_BSTR( &vValue ) );
break;
case VT_I2:
wprintf( L"%d",V_I2( &vValue ) );
break;
case VT_I4:
wprintf( L"%d",V_I4( &vValue ) );
break;
case VT_BOOL:
wprintf( L"%s",V_BOOL( &vValue ) ? L"TRUE" : L"FALSE" );
break;
default:
//WCHAR tmp[100];
//wcscpy( tmp,V_BSTR( &vValue ) );
//char tmp1[ MAX_PATH ];
//WideCharToMultiByte( CP_ACP,WC_COMPOSITECHECK,tmp,-1,tmp1,sizeof( tmp1 ),NULL,NULL );
//cout << tmp1;
break;
}
cout << endl;
}
SysFreeString( wsName );
}
}
else {
cout << "Query for print queues failed. Error code = 0x" << hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1 ;
}
if( pvNames ) SafeArrayDestroy( pvNames );
}
if( pInstance ) pInstance->Release();
}