Seite 1 von 1

Probleme mit WMI-Abfrage (Droopy's Lib)

Verfasst: 17.03.2006 11:54
von Gimbly
Hallo,

irgendwie krieg ich's nicht hin, Size und Seriennr. nur eines bestimmten Laufwerks abzufragen.

Code: Alles auswählen

MessageRequester("",WMI("SELECT * FROM Win32_LogicalDisk,DeviceID,size,VolumeSerialNumber"))
funktioniert zwar, gibt aber die Daten aller LWs aus. Ausserdem ist das nicht die Syntax, die ich kenne. Die würde eher lauten:
"SELECT DeviceID,size,VolumeSerialNumber FROM Win32_LogicalDisk" - wenn ich die benutze, gibt's immer einen crash.

Code: Alles auswählen

MessageRequester("",WMI("SELECT DeviceID,size,VolumeSerialNumber FROM Win32_LogicalDisk  WHERE "+Chr(34)+"DeviceID='C:'"+Chr(34)))
ergibt leider auch nur einen crash.

Was mache ich falsch?

Verfasst: 17.03.2006 15:10
von ts-soft
Mit WMI kenne ich mich nicht aus, aber mach es doch einfach so:

Code: Alles auswählen

Procedure.s GetDriveSerial(Drive.s)
  Protected lpVolumeNameBuffer.s, lpVolumeSerialNumber.l
  If Len(Drive) = 1 : Drive + ":\" : EndIf
  If Right(Drive, 1) <> "\" : Drive + "\" : EndIf
  lpVolumeNameBuffer.s = Space(#MAX_PATH +1)
  GetVolumeInformation_(@Drive, @lpVolumeNameBuffer, #MAX_PATH +1, @lpVolumeSerialNumber, 0,0,0,0)
  ProcedureReturn Hex(PeekW(@lpVolumeSerialNumber + 2) & $FFFF) + "-" + Hex(PeekW(@lpVolumeSerialNumber) & $FFFF)
EndProcedure

Debug GetDriveSerial("C")
Rückgabe erfolgt als gruppierter HexString, kannste ja ändern, wenn
WMI es anders zurückgibt

Verfasst: 18.03.2006 09:39
von Gimbly
Danke ts-soft,

das hilft mir schon weiter. Jetzt brauche ich nur noch die LW-Kapazität (size).

Gibt's dafür auch einen API-Befehl?

Verfasst: 22.03.2006 22:08
von Gimbly
Die WMI()-Funktion in Droopy's Lib scheint total buggy zu sein!

Zwar kriegt man damit die abgefragten Ergebnisse, z.B. mit

Code: Alles auswählen

WMI("SELECT * FROM Win32_BIOS,Manufacturer,Caption,SerialNumber")
aber anschließend treten merkwürdige Effekte auf.

So kann man z.B. nach einem WMI()-Aufruf kein Movie mehr mit LoadMovie() laden (als Rückgabe erhält man dann immer einen negativen Wert).

Sehr merkwürdig das Ganze.