Probleme mit WMI-Abfrage (Droopy's Lib)

Anfängerfragen zum Programmieren mit PureBasic.
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Probleme mit WMI-Abfrage (Droopy's Lib)

Beitrag 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?
Gruß
Markus
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Beitrag 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?
Gruß
Markus
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Beitrag 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.
Gruß
Markus
Antworten