Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   auflistung devices (https://www.delphipraxis.net/165249-auflistung-devices.html)

mr.unbekannt 20. Dez 2011 11:53

auflistung devices
 
Hallo,

wie kann ich in Delphi die Auflistung der HDD- Devices + zusätzlichen Laufwerksbuchstaben herausbekommen?

Bsp:

\Device\Harddisk0\Partition1 C:
\Device\Harddisk0\Partition2 D:
\Device\Harddisk1\Partition1 F:
\Device\Harddisk1\Partition2 G:
\Device\Harddisk1\Partition3 H:

Gruß

neo4a 20. Dez 2011 12:04

AW: auflistung devices
 
Wenn für Dich Englisch kein Problem ist, schau Dir den Delphi WMI Generator an, der Dir - nicht nur zu diesem Thema - gleich den Source und die Demo liefert.

mr.unbekannt 20. Dez 2011 12:06

AW: auflistung devices
 
englisch wäre nicht das problem, ich bräuchte aber halt nur diesen kleinen teil und nicht so ein riesen programm für sowas.

neo4a 20. Dez 2011 12:26

AW: auflistung devices
 
Zitat:

Zitat von mr.unbekannt (Beitrag 1142387)
englisch wäre nicht das problem, ich bräuchte aber halt nur diesen kleinen teil und nicht so ein riesen programm für sowas.

Die Zip-Datei für das installationsfreie Programm ist 3MB groß, soll ich Dir tragen helfen? Oder geht es Dir nur um so etwas:
Delphi-Quellcode:
    objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
    colItems     := objWMIService.ExecQuery('Select * From Win32_DiskDrive Where InterfaceType="USB"', 'WQL', 0);
    oEnum        := IUnknown(colItems._NewEnum) as IEnumVariant;
    for i := 0 to colItems.Count - 1 do
      if oEnum.Next(1, colItem, iValue) = 0 then
Vielleicht liefern Dir ja auch die Jedi-Tools eine brauchbaren Ansatz.

mjustin 20. Dez 2011 12:32

AW: auflistung devices
 
Zitat:

Zitat von mr.unbekannt (Beitrag 1142387)
englisch wäre nicht das problem, ich bräuchte aber halt nur diesen kleinen teil und nicht so ein riesen programm für sowas.

Beschreibung WMI Delphi Code Creator:

Zitat:

"Can generate object pascal code"
Das "Riesenprogramm" erzeugt nur den Delphi Quellcode für die gewünschte WMI Operation. Es muss nicht mit in der eigenen Anwendung eingebaut oder mit installiert werden.

mr.unbekannt 20. Dez 2011 13:05

AW: auflistung devices
 
das mit dem programm habe ich schon verstanden. Der Quelltext reicht mir aber. Danke!

ASM 20. Dez 2011 15:11

AW: auflistung devices
 
Zitat:

Zitat von mr.unbekannt (Beitrag 1142383)
wie kann ich in Delphi die Auflistung der HDD- Devices + zusätzlichen Laufwerksbuchstaben herausbekommen?

Das habe ich doch gerade eben erst (vor 13 Stunden) hier beschrieben (siehe dort function ConvertDevicePathToDOSPath()).
Ganz ohne Verwendung der WMI.

Hier noch einmal zum Mitschreiben:
Code:
function GetHDDDevicesWithDOSPath:TStringlist;
var
  i: integer;
  root: string;
  device: string;
  buffer: string;
begin
  setlength(buffer, 1000);
  result:=TStringlist.create;
  for i := Ord('c') to Ord('z') do
  begin
    root := Char(i) + ':';
    if (QueryDosDevice(PChar(root), pchar(buffer), 1000) <> 0) then
    begin
      device := pchar(buffer);
      result.add(format('%s = %s\',[device, root ]));
    end;
  end;
end;
z.B Beispiel:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var slDevices: TStringlist;
begin
 memo1.Clear;
 try
   slDevices:=GetHDDDevicesWithDOSPath;
   if (slDevices<>nil) and (slDevices.count>0) then
     memo1.lines.Text:=slDevices.Text;
 finally
 if assigned(slDevices) then slDevices.Free;
end;
end;

neo4a 20. Dez 2011 15:28

AW: auflistung devices
 
Zitat:

Zitat von ASM (Beitrag 1142443)
Ganz ohne Verwendung der WMI.

Dafür mit ganz viel Jedi Units. Für den Zugriff auf WMI ist es mit ActiveX, ComObj, Variants getan.

ASM 20. Dez 2011 16:32

AW: auflistung devices
 
Zitat:

Zitat von neo4a (Beitrag 1142449)
Zitat:

Zitat von ASM (Beitrag 1142443)
Ganz ohne Verwendung der WMI.

Dafür mit ganz viel Jedi Units. Für den Zugriff auf WMI ist es mit ActiveX, ComObj, Variants getan.

Absoluter Unfug, was den Kommentar zu den angeblich benötigten JEDI-Units betrifft !!!
Die hier oben von mir beschriebene Funktion zur ausschließlichen Ermittlung der HDD-Devices benötigt überhaupt keine einzige zusätzliche Unit neben denen, die sowieso für die Erstellung der Form benötigt werden. Sie benötigt also weder explizit noch implizit eine einzige Unit aus dem JEDI-package. Die Funktion ist stand-alone arbeitsfähig. Der in ihr enthaltene, entscheidende Aufruf QueryDosDevice() ist in der Unit Windows enthalten.

Es ist also die WMI, die unnötig aufbläst, wenn man denn unbedingt sie zu Hilfe nehmen will.

neo4a 20. Dez 2011 16:42

AW: auflistung devices
 
Zitat:

Zitat von ASM (Beitrag 1142455)
Absoluter Unfug, was den Kommentar zu den angeblich benötigten JEDI-Units betrifft !!!

Ganz zu schweigen von dem fundamentalen Schwachsinn, einen Satz mit 3(!) Ausrufzeichen zu versehen!

Zitat:

Zitat von ASM (Beitrag 1142455)
Die Funktion ist stand-alone arbeitsfähig. Der in ihr enthaltene, entscheidende Aufruf QueryDosDevice() ist in der Unit Windows enthalten.

In der angegebenen Quelle waren die Jedi-Units angegeben.

Zitat:

Zitat von ASM (Beitrag 1142455)
Es ist also die WMI, die unnötig aufbläst

Was bläst WMI auf?

ASM 20. Dez 2011 17:11

AW: auflistung devices
 
Zitat:

Zitat von neo4a (Beitrag 1142456)
In der angegebenen Quelle waren die Jedi-Units angegeben.

Ja, ganz recht. Dort geht es aber auch um wesentlich erweiterte Aufgaben und die zahlreichen dadurch benötigten WinAPI-Funktionen.
Hier ist aber selektiv aus meinem ganzen "Quell"-Paket allein die zur Erfassung der HDD-Devices erforderliche Funktion herausgenommen - und die braucht eben nichts zusätzliches. Ein kleiner, anhand meines konkret angeführten Beispiels ohne jede Mühe einer eigenen Gedankenleistung durchgeführter Versuch hätte Dir das sofort gezeigt. Obwohl das eigentlich auch schon aus dem Code heraus zu erkennen ist.

Zitat:

Zitat von neo4a (Beitrag 1142456)
Was bläst WMI auf?

Hast Du ja selbst geschrieben, wenn ich Dich darauf aufmerksam machen darf: "Für den Zugriff auf WMI ist es mit ActiveX, ComObj, Variants getan." Naja, als wenn das nichts wäre. Aber angeblich zusätzlich benötigte 4 JEDI-Units, was ja hier im konkreten Fall gar nicht zutrifft (s.o.), blähen gewaltig auf (Zitat: "Dafür mit ganz viel Jedi Units."), nicht wahr ?

Bummi 20. Dez 2011 17:23

AW: auflistung devices
 
könnt Ihr das Kriegsbeil begraben?

neo4a 20. Dez 2011 17:46

AW: auflistung devices
 
Zitat:

Zitat von Bummi (Beitrag 1142466)
könnt Ihr das Kriegsbeil begraben?

Wozu? Diskussionen leben von unterschiedlichen Ansichten. Polemisieren gehört irgendwie auch dazu. Und wenn sich einer dann auch noch im Eifer des Gefechts in der Wortwahl vergreift, ist es auch nicht soo schlimm. Jeder kämpft halt auf seine Weise und wenn's mal ganz schlimm wird, gibt's ja auch noch die Mods.

Für mich stellt WMI halt einen sehr interessanten und vielseitigen Zugriff auf das Windows-System dar. WinApi-Zugriffe sind ein weiterer Weg.

Jedi-Units habe aus meiner Erfahrung die unangenehme Eigenschaft, noch unzählige weitere Units nach zu ziehen. Das macht deren Einsatz etwas unübersichtlich.

mr.unbekannt 21. Dez 2011 16:56

AW: auflistung devices
 
Da kommen leider nicht ganz die richtigen Informationen raus @ASM.

Bei dir kommt \Device\Harddsikvolume1 raus.
Ich benötige aber \Device\Harddisk0\Partition0

Vllt. helfen die folgenden Informationen:

\\.\Volume{}\
link to \\?\Device\HarddiskVolume1
fixed media
Mounted on \\.\c:

\\.\Volume{}\
link to \\?\Device\CdRom0
CD-ROM
Mounted on \\.\d:

\\.\Volume{}\
link to \\?\Device\Floppy0
removeable media
Mounted on \\.\a:


NT Block Device Objects
\\?\Device\CdRom0
\\?\Device\Floppy0
\\?\Device\Harddisk0\Partition0
link to \\?\Device\Harddisk0\DR0
Fixed hard disk media. Block size = 512
\\?\Device\Harddisk0\Partition1
link to \\?\Device\HarddiskVolume1

Virtual devices
/dev/zero
/dev/random


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz