AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Laufwerkgrössen ermitteln

Ein Thema von Delbor · begonnen am 21. Okt 2021 · letzter Beitrag vom 29. Okt 2021
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#1

AW: Laufwerkgrössen ermitteln

  Alt 21. Okt 2021, 17:03
Wie kann die Laufwerksnummer der Laufwerksbuchstabe ungültig sein, wenn es doch vorhanden sein soll?
Diskettenlaufwerk, CD- oder DVD-Laufwerk oder sonstige Wechsellaufwerke ohne Datenträger haben alle einen Laufwerksbuchstaben.

Ohne eingelegten Datenträger scheitern aber DiskFree und Co.
  Mit Zitat antworten Zitat
ol1uw

Registriert seit: 24. Jul 2004
Ort: Freiberg
70 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Laufwerkgrössen ermitteln

  Alt 21. Okt 2021, 19:48
Hallo

So ähnlich hatte ich das vor Jahren mal gemacht da meine zusätzlichen Festplatten alle in Verzeichnissen bereit gestellt werden
und die meisten Tools so etwas nicht anzeigen.

Erstellt mit Hilfe von Wmi Delphi Code Creator (WDCC)

Delphi-Quellcode:
// -----------------------------------------------------------------------------------------------------
// This code was generated by the Wmi Delphi Code Creator (WDCC) Version 1.9.9.482
// 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-2015
// -----------------------------------------------------------------------------------------------------
//
// 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,
  Windows,
  Variants;



// Die Klasse "Win32_Volume" stellt einen Speicherbereich auf einer Festplatte
// dar. Die Klasse gibt lokale Volumes wieder, die formatiert, unformatiert,
// bereitgestellt oder offline sind. Ein Volume wird unter Verwendung eines
// Dateisystems, wie z. B. FAT oder NTFS, formatiert, und dem Volume kann eine
// Laufwerkbuchstabe zugewiesen werden. Eine einzelne Festplatte kann mehrere
// Volumes enthalten, und Volumes können über mehrere Datenträger übergreifen. Die
// Klasse "Win32_Volume" unterstützt die Diskettenlaufwerkverwaltung nicht.

procedure GetWin32_VolumeInfo;
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_Volume', 'WQL', wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin

    if pos(':', String(FWbemObject.Name)) > 0 then
    begin
      Writeln(Format('Name %s', [String(FWbemObject.Name)])); // String
      Writeln(Format('FileSystem %s', [String(FWbemObject.FileSystem)])); // String
      Writeln(Format('Capacity %d', [int64(FWbemObject.Capacity)])); // Uint64
      Case Integer(FWbemObject.DriveType) of
        DRIVE_UNKNOWN:
          Writeln('DriveType Unknown');
        DRIVE_REMOVABLE:
          Writeln('DriveType Removable');
        DRIVE_FIXED:
          Writeln('DriveType Fixed');
        DRIVE_REMOTE:
          Writeln('DriveType Network');
        DRIVE_CDROM:
          Writeln('DriveType CD-ROM');
        DRIVE_RAMDISK:
          Writeln('DriveType RAM Disk');
      end;
      Writeln(Format('FreeSpace %d', [int64(FWbemObject.FreeSpace)])); // Uint64
      Writeln('-------------------------------------------------------');
    End;
    FWbemObject := Unassigned;
  end;
end;

begin
  try
    CoInitialize(nil);
    try
      GetWin32_VolumeInfo;
    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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#3

AW: Laufwerkgrössen ermitteln

  Alt 21. Okt 2021, 20:45
Ohne eingelegten Datenträger scheitern aber DiskFree und Co.
Aber da ist es auch vollkommen OK, wenn diese Funktion sagt "hier gibt's nichts zu sehn".

Wer unbedingt 0 will, kann auch gern ein Max einfügen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz