Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#14

Re: Arbeitsplatz Laufwerksbuchstaben auslesen

  Alt 27. Mai 2009, 21:14
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))
  Mit Zitat antworten Zitat