->Next(...) und ->Get(...) unter WMI
-
Hallo.
Ich habe ein kleines Verständnisproblem. Damit alle den komplett code sehen können, bezieh ich mich mal auf dieses Beispiel
http://msdn2.microsoft.com/en-us/library/aa390423(VS.85).aspxUnd zwar geht es um diesen Codeteil
// Step 7: ------------------------------------------------- // Get the data from the query in step 6 ------------------- IWbemClassObject *pclsObj; ULONG uReturn = 0; while (pEnumerator) { HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); if(0 == uReturn) { break; } VARIANT vtProp; // Get the value of the Name property hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0); wcout << " OS Name : " << vtProp.bstrVal << endl; VariantClear(&vtProp); }Ich versteh nicht ganz was die Funktionen machen, bzw wieso sie in einer Schleife laufen müssen, wenn doch pEnumerator mit "Win32_OperatingSystem" initialisiert wurde und Get(...) genau die Eigenschaft "Name" übergeben bekommt.
Diese Fragestellung resultiert daraus, dass wenn ich als Beispiel pEnumerator mit der Klasse "Win32_Desktop" initialisiere und aus dieser Klasse die Eigenschaft "Wallpaper" haben will, läuft diese Schleife 4 mal durch. Er zählt also 4 mal ein pclsObj aus pEnumerator weiter.
Nun bekomm ich aber dann in meiner vtProp.bstrVal Variable 4 mal einen neuen Wert.1. "(None)"
2. "(None)"
3. "D:\Documents and Settings\e401577\LocalSettings\ApplicationData\Microsoft\Wallpaper1.bmp"
4. "(None)"Damit ist ja der letzte Wert falsch, weil ja dort "(None)" drin steht und nicht der korrekte Pfad aus drittens. Wo kommen diese 4 Werte her? Sind die von 4 verschiedenen Usern ud handelt es sich dabei immer um Werte aus der Eigenschaft "Wallpaper"? Das setzt sich ja sicher bei andern Werten in ander Klassen fort.
Über etwas Hilfe würde ich mich sehr freuen.
-
Kann mir keiner sagen um welche 4 Werte es sich in diesem beispiel handelt?
-
Ok ich hab es also doch so eigenermaßen allein gerafft. Hätt man auch schneller drauf kommen können. DIese WMI Klasse können natürlich mehrmals existieren. Zum Beispiel für den Netzwerkadapter (WLAN, LAN,..) werden nacheinander 2 Objekte mit ->Next() aufgerufen, womit man dann vom jeweiligen Adapter die Einstellungen auslesen kann.
Im obigen Beispiel (es sind übrigens 6 Durchläufe bei mir) sind das somit die Wallpaper Pfade 6 verschiedener Profile auf meinem Rechner. Raus zu finden über die Eigenschaft "Name";
1. "NT-AUTORITÄT\SYSTEM"
.
.
.
6. ".DEFAULT"