OpenDialog ist in Dialogs.pas, kapselt aber nur das ComControl. Also das Geheimnis wird da nicht gelüftet.
Bleibt noch es mit einer
WMI-Abfrage zu versuchen, wie RWarnecke es vorgeschlagen hat... blöd dass man die Situation nicht so einfach am Home-PC nachbilden kann.
Hab' da mal was aus Beispielen zusammen "gehackt"... MS-
WMI Type-Bibliothek muss unter Delphi5 vorher importiert werden. Zum Testen, ob es überhaupt inaktive Laufwerke erkennt, sollte es reichen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
DriveTypNames :
array[0..6]
of String =
('
Unknown','
No Root Directory','
Removable Disk',
'
Local Disk','
Network Drive','
Compact Disc','
RAM Disk');
var
Services : ISWbemServices;
ObjectSet : ISWbemObjectSet;
ValueSet : OleVariant;
ValueSetDisp : IDispatch;
OleTable : IEnumVariant;
OleFields : OleVariant;
dwRetrieved : LongWord;
WQLString :
String;
DriveTyp : Integer;
begin
ListBox1.Clear;
Services := SWbemLocator1.ConnectServer('
','
','
','
','
','
',0, ValueSet);
WQLString := '
SELECT Name,VolumeName,DriveType,FileSystem FROM Win32_LogicalDisk';
ObjectSet := Services.ExecQuery(WQLString,'
WQL', 0, ValueSetDisp);
OleTable := ObjectSet.Get__NewEnum
as IEnumVARIANT;
while OleTable.Next(1, OleFields, dwRetrieved) = 0
do begin
DriveTyp := VarAsType(OleFields.DriveType, varInteger);
if not DriveTyp
in [0..6]
then DriveTyp := 0;
ListBox1.Items.Add(Format('
%s [%s] - %s (%s)',
[VarToStr(OleFields.
Name),
VarToStr(OleFields.VolumeName),
DriveTypNames[DriveTyp],
VarToStr(OleFields.FileSystem)]));
end;
end;
(Form mit Button1, ListBox1, und SWbemServices (
ActiveX))