Hallöchen sehr geehrte Delphi-Praxis-Community,
ich bin dabei, den Schreibschutz, also die WriteProtection, eines Mediums zu ermitteln (insbesondere eines USB-Sticks). Ich nutze den
WMI Delphi Code Creator um folgenden Code zu erzeugen:
Delphi-Quellcode:
//-----------------------------------------------------------------------------------------------------
// This code was generated by the Wmi Delphi Code Creator (WDCC) Version 1.8.5.0
// http://code.google.com/p/wmi-delphi-code-creator/
// Blog http://theroadtodelphi.wordpress.com/wmi-delphi-code-creator/
// Author Rodrigo Ruz V. (RRUZ) Copyright (C) 2011-2014
//-----------------------------------------------------------------------------------------------------
//
// LIABILITY DISCLAIMER
// THIS GENERATED CODE IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED.
// YOU USE IT AT YOUR OWN RISK. THE AUTHOR NOT WILL BE LIABLE FOR DATA LOSS,
// DAMAGES AND LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS CODE.
//
//----------------------------------------------------------------------------------------------------
program GetWMI_Info;
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj,
Variants;
// Die Klasse "Win32_PhysicaMedia" stellt sämtliche Typen der Dokumentation oder
// Speichergeräte, wie z. B. Bänder, CDs usw., dar.
procedure GetWin32_PhysicalMediaInfo;
const
WbemUser ='
';
WbemPassword ='
';
WbemComputer ='
localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
FSWbemLocator := CreateOleObject('
WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, '
root\CIMV2', WbemUser, WbemPassword);
FWbemObjectSet:= FWMIService.ExecQuery('
SELECT * FROM Win32_PhysicalMedia','
WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum)
as IEnumVariant;
while oEnum.Next(1, FWbemObject, iValue) = 0
do
begin
Writeln(Format('
WriteProtectOn %s',[
String(FWbemObject.WriteProtectOn)]));
// Boolean
Writeln('
');
FWbemObject:=Unassigned;
end;
end;
begin
try
CoInitialize(
nil);
try
GetWin32_PhysicalMediaInfo;
finally
CoUninitialize;
end;
except
on E:EOleException
do
Writeln(Format('
EOleException %s %x', [E.
Message,E.ErrorCode]));
on E:
Exception do
Writeln(E.Classname, '
:', E.
Message);
end;
Writeln('
Press Enter to exit');
Readln;
end.
Das Problem: Es wird eine
Exception mit folgendem Inhalt ausgelöst:
EVariantTypeCastError: Variante des Typs (NULL) konnte nicht in Typ (String) konvertiert werden.
Ist es gar nicht möglich, die Eigenschaft auszulesen? Dem Anschein nach kann nichts ausgelesen werden.
Ich bin über jede hilfreiche Antwort dankbar.
MfG
-- Truther