MFC und WMI (Hardware Daten auslesen)
-
Hallo zusammen,
ich soll mit MFC und WMI (C++) verschiedene Daten auslesen (Festplatten Seriennummer, MAC Adresse, Prozessor-ID…).
Ich habe ein Beispiel gefunden, dass "LoadPercentage" von der CPU ausgibt.
Komme an der Stelle aber nun nicht weiter. Ich habe noch nie mit MFC und WMI gearbeitet und das ist mein erstes Projekt.Der Code sieht folgendermaßen aus:
void CMFC_AnwendnungDlg::OnBnClickedButton1() {
CoInitialize(NULL);//Security needs to be initialized in XP first
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");HRESULT hRes = CoCreateInstance (CLSID_WbemAdministrativeLocator,
NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
IID_IUnknown, ( void ** ) & pIWbemLocator) ;
if (SUCCEEDED(hRes)) {
hRes = pIWbemLocator->ConnectServer(bstrNamespace, // Namespace
NULL, // Userid
NULL, // PW
NULL, // Locale
0, // flags
NULL, // Authority
NULL, // Context
&pWbemServices);
}BSTR strQuery = (L**"Select * from win32_Processor"**);
BSTR strQL = (L"WQL");hRes = pWbemServices->ExecQuery(strQL, strQuery,
WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumObject);ULONG uCount = 1, uReturned;
IWbemClassObject * pClassObject = NULL;
hRes = pEnumObject->Reset();
hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject,
&uReturned);VARIANT v;
BSTR strClassProp = SysAllocString(L"LoadPercentage");
hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0);
SysFreeString(strClassProp);_bstr_t bstrPath = &v; //Just to convert BSTR to ANSI
char* strPath=(char*)bstrPath;if (SUCCEEDED(hRes)) {
// MessageBoxW((LPCTSTR)strPath);
MessageBoxW(bstrPath);
} else {
MessageBoxW((LPCTSTR)"Error in getting object");
}VariantClear( &v );
pIWbemLocator->Release();
pWbemServices->Release();
pEnumObject->Release();
pClassObject->Release();
CoUninitialize();
}Kann mir vielleicht jemand weiterhelfen, wie ich an die gewünschten Daten komme?
Ich hatte zunächst blauäugig versucht, "Select * from win32_Processor" durch "Select * from win32_DiskDrive" zu ersetzen, aber das hat nur eine Fehlermeldung verursacht
Ich habe wie gesagt noch keine Ahnung und bin auch noch nicht durchgestiegen, was genau in dem Code passiert. Daher wäre jeder Hinweis sehr hilfreich.Ich bin für jede Info sehr dankbar.
Gruß Stephie
-
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_classes.asp
oder optisch sehr nett direkt vom hauseigenen Moderator in C# geschrieben:
http://blog.kalmbachnet.de/?postid=29
/e: zum Auffinden der IDs für das SELECT und zum Testen, ob Deine Anwendung das gleiche/richtige Ergebnis liefert.
-
hallo jencas,
danke für deine antwort. ich habe noch ein wenig rumgespielt und auch einige daten ausgelesen bekommen. allerdings habe ich nun das problem, dass die [b]motherboard id komischerweise nur bei meinem rechner angezeigt wird. kann diese irgendwie ausgeschaltet werden, oder warum geht es bei den anderen rechnern nicht?
danke.
stephie
-
Das Motherboard muss es ja unterstützen... versuche es am besten mit meinem WMI_Query (http://blog.kalmbachnet.de/?postid=29), da sollte eigentlich alles angezeigt werden was es gibt...
-
auch mit dem tool wmi_query wird nur bei meinem rechner die seriennummer angezeigt. bei anderen rechnern meiner kollegen bleibt dieses feld leer. ???
ist mir irgendwie ein rätsel
-
welche mac adresse wird eigentlich ausgelesen, wenn ich zu der netzwerkkarte zusätzlich noch eine wlan karte eingebaut habe?
danke für jede antwort.
-
Verstehe die Frage nicht ganz... da kommt doch eine Liste mit Netzwerkkarten raus:
----------------------------
AdapterType: WAN (Wide Area Network)
AdapterTypeId: 3
Availability: 3
Caption: [00000001] Asynchroner RAS-Adapter
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: Asynchroner RAS-Adapter
DeviceID: 1
Index: 1
Installed: True
MACAddress: 20:41:53:59:4E:FF
Manufacturer: Microsoft
MaxNumberControlled: 0
Name: Asynchroner RAS-Adapter
PNPDeviceID: SW\{EEAB7790-C514-11D1-B42B-00805FC1270E}\ASYNCMAC
PowerManagementSupported: False
ProductName: Asynchroner RAS-Adapter
ServiceName: AsyncMac
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
Availability: 3
Caption: [00000002] WAN-Miniport (L2TP)
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: WAN-Miniport (L2TP)
DeviceID: 2
Index: 2
Installed: True
Manufacturer: Microsoft
MaxNumberControlled: 0
Name: WAN-Miniport (L2TP)
PNPDeviceID: ROOT\MS_L2TPMINIPORT\0000
PowerManagementSupported: False
ProductName: WAN-Miniport (L2TP)
ServiceName: Rasl2tp
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
AdapterType: WAN (Wide Area Network)
AdapterTypeId: 3
Availability: 3
Caption: [00000003] WAN-Miniport (PPTP)
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: WAN-Miniport (PPTP)
DeviceID: 3
Index: 3
Installed: True
MACAddress: 50:50:54:50:30:30
Manufacturer: Microsoft
MaxNumberControlled: 0
Name: WAN-Miniport (PPTP)
PNPDeviceID: ROOT\MS_PPTPMINIPORT\0000
PowerManagementSupported: False
ProductName: WAN-Miniport (PPTP)
ServiceName: PptpMiniport
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
AdapterType: WAN (Wide Area Network)
AdapterTypeId: 3
Availability: 3
Caption: [00000004] WAN-Miniport (PPPOE)
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: WAN-Miniport (PPPOE)
DeviceID: 4
Index: 4
Installed: True
MACAddress: 33:50:6F:45:30:30
Manufacturer: Microsoft
MaxNumberControlled: 0
Name: WAN-Miniport (PPPOE)
PNPDeviceID: ROOT\MS_PPPOEMINIPORT\0000
PowerManagementSupported: False
ProductName: WAN-Miniport (PPPOE)
ServiceName: RasPppoe
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
Availability: 3
Caption: [00000005] Parallelanschluss (direkt)
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: Parallelanschluss (direkt)
DeviceID: 5
Index: 5
Installed: True
Manufacturer: Microsoft
MaxNumberControlled: 0
Name: Parallelanschluss (direkt)
PNPDeviceID: ROOT\MS_PTIMINIPORT\0000
PowerManagementSupported: False
ProductName: Parallelanschluss (direkt)
ServiceName: Raspti
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
Availability: 3
Caption: [00000006] WAN-Miniport (IP)
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: WAN-Miniport (IP)
DeviceID: 6
Index: 6
Installed: True
Manufacturer: Microsoft
MaxNumberControlled: 0
Name: WAN-Miniport (IP)
PNPDeviceID: ROOT\MS_NDISWANIP\0000
PowerManagementSupported: False
ProductName: WAN-Miniport (IP)
ServiceName: NdisWan
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
AdapterType: Ethernet 802.3
AdapterTypeId: 0
Availability: 3
Caption: [00000007] Paketplaner-Miniport
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: Paketplaner-Miniport
DeviceID: 7
Index: 7
Installed: True
MACAddress: 20:62:20:52:41:53
Manufacturer: Microsoft
MaxNumberControlled: 0
Name: Paketplaner-Miniport
PNPDeviceID: ROOT\MS_PSCHEDMP\0000
PowerManagementSupported: False
ProductName: Paketplaner-Miniport
ServiceName: PSched
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
AdapterType: Ethernet 802.3
AdapterTypeId: 0
Availability: 3
Caption: [00000008] Intel(R) PRO/1000 MT Network Connection
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: Intel(R) PRO/1000 MT Network Connection
DeviceID: 8
Index: 8
Installed: True
MACAddress: 00:07:E9:1D:E9:DE
Manufacturer: Intel
MaxNumberControlled: 0
Name: Intel(R) PRO/1000 MT Network Connection
NetConnectionID: LAN-Verbindung
NetConnectionStatus: 2
PNPDeviceID: PCI\VEN_8086&DEV_100E&SUBSYS_01441028&REV_02\4&19FD8D60&0&60F0
PowerManagementSupported: False
ProductName: Intel(R) PRO/1000 MT Network Connection
ServiceName: E1000
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
AdapterType: Ethernet 802.3
AdapterTypeId: 0
Availability: 3
Caption: [00000009] Paketplaner-Miniport
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: Paketplaner-Miniport
DeviceID: 9
Index: 9
Installed: True
MACAddress: 00:07:E9:1D:E9:DE
Manufacturer: Microsoft
MaxNumberControlled: 0
Name: Paketplaner-Miniport
PNPDeviceID: ROOT\MS_PSCHEDMP\0001
PowerManagementSupported: False
ProductName: Paketplaner-Miniport
ServiceName: PSched
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
AdapterType: Ethernet 802.3
AdapterTypeId: 0
Availability: 3
Caption: [00000010] Virtual Machine Network Services Driver
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: Virtual Machine Network Services Driver
DeviceID: 10
Index: 10
Installed: True
MACAddress: 00:07:E9:1D:E9:DE
Manufacturer: Microsoft
MaxNumberControlled: 0
Name: Virtual Machine Network Services Driver
PNPDeviceID: ROOT\CNTX_VPCNETS2_MP\0000
PowerManagementSupported: False
ProductName: Virtual Machine Network Services Driver
ServiceName: VPCNetS2
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
AdapterType: Ethernet 802.3
AdapterTypeId: 0
Availability: 3
Caption: [00000011] VMware Virtual Ethernet Adapter for VMnet1
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: VMware Virtual Ethernet Adapter for VMnet1
DeviceID: 11
Index: 11
Installed: True
MACAddress: 00:50:56:C0:00:01
Manufacturer: VMware, Inc.
MaxNumberControlled: 0
Name: VMware Virtual Ethernet Adapter for VMnet1
NetConnectionID: VMware Network Adapter VMnet1
NetConnectionStatus: 2
PNPDeviceID: ROOT\VMWARE\0000
PowerManagementSupported: False
ProductName: VMware Virtual Ethernet Adapter for VMnet1
ServiceName: VMnetAdapter
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
----------------------------
AdapterType: Ethernet 802.3
AdapterTypeId: 0
Availability: 3
Caption: [00000012] VMware Virtual Ethernet Adapter for VMnet8
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_NetworkAdapter
Description: VMware Virtual Ethernet Adapter for VMnet8
DeviceID: 12
Index: 12
Installed: True
MACAddress: 00:50:56:C0:00:08
Manufacturer: VMware, Inc.
MaxNumberControlled: 0
Name: VMware Virtual Ethernet Adapter for VMnet8
NetConnectionID: VMware Network Adapter VMnet8
NetConnectionStatus: 2
PNPDeviceID: ROOT\VMWARE\0001
PowerManagementSupported: False
ProductName: VMware Virtual Ethernet Adapter for VMnet8
ServiceName: VMnetAdapter
SystemCreationClassName: Win32_ComputerSystem
SystemName: TB70KAJ
TimeOfLastReset: 20061013071750.375000+120
-
Ich dachte, dass jede Karte ne eigene MAC Adresse hat und hab mich daher gefragt, welche denn da nun angezeigt wird.
Ist dem nicht so?
-
Wie Du siehst, hat ja jede Karte ein MAC Adresse und es werden auch alle angezeigt! Was hast Du denn für ein Problem???
-
Sorry, hab mich etwas dämlich ausgedrückt.
Wenn ich das mit dem WMI_Query mache, bekomm ich diese Liste, aber wenn ich jetzt im Code einfach "SELECT FROM Win32_NetworkAdapter" bekomm ich bei mir nur eine MAC Adresse. Wird da einfach nur die erste ausgelesen, oder muss ich da noch irgendwas beachten?
-
Du musst halt das "pEnumObject->Next" in einer Schleife ausführen, biss nix mehr da ist...
-
ah, ok. dann werd ich das mal ausprobieren.
danke für die schnelle hilfe und sorry für wahrscheinlich ziemlich doofe fragen. hab bisher noch nie was mit dem thema zu tun gehabt und tu mir da etwas schwer.