AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Laufwerksbezeichnung wie in Windows

Laufwerksbezeichnung wie in Windows

Ein Thema von Mazel · begonnen am 22. Sep 2006 · letzter Beitrag vom 3. Okt 2006
Antwort Antwort
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#1

Laufwerksbezeichnung wie in Windows

  Alt 22. Sep 2006, 14:44
Hallo,

ich möchte die Laufwerksbezeichnungen wie in Windows (siehe Bildanhang) erhalten. Ich habe mich nun ein wenig mit WMI beschäftigt, da das ein Weg ist, die Bezeichnung zu erhalten. Vorher hatte ich es über GetDriveType gemacht. Das Problem bei GetDriveType ist das ich mit DRIVE_CDROM nur ermitteln kann, ob es sich um ein CD oder DVD Laufwerk (was von beiden weis ich da nicht) oder bei DRIVE_REMOVABLE um ein Wechselmedium, was auch ein Diskettenlaufwerk sein kann, handelt. Daher hab ich den Weg über WMI genommen. Dort funktioniert das zwar besser aber auch da bekomme ich für CD-DVD Laufwerke nur "CD_ROM Laufwerk" als Beschreibung oder bei Diskettenlaufwerken nur "Diskettenlaufwerk" als Beschreibung. In Windows-Arbeitspaltz steht aber für Diskette 3 1/2-Diskette, DVD-Laufwerk und CD-RW Laufwerk.

Meine Frage nun, wo liest Windows diese Bezeichnungen aus?

Gruß
Mazel
Miniaturansicht angehängter Grafiken
drives_135.jpg  
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Laufwerksbezeichnung wie in Windows

  Alt 22. Sep 2006, 14:58
Windows liest den Namen des Laufwerks aus, wenn es keinen findet schreibt es stattdessen einfach den Typ des Laufwerks. "CD Drive ( F: )"

Gib Deinem Laufwerk einen Namen dann wirst Du es sehen.
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#3

Re: Laufwerksbezeichnung wie in Windows

  Alt 22. Sep 2006, 16:05
Woher weis es dann aber das es ein CD-RW-Laufwerk oder ein DVD-Laufwerk ist, wie es im Anhang zu sehen ist?

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von Nighthawk1310
Nighthawk1310

Registriert seit: 22. Feb 2004
Ort: Izmir / Türkei
45 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Laufwerksbezeichnung wie in Windows

  Alt 22. Sep 2006, 16:25
Zitat von uwewo:
Windows liest den Namen des Laufwerks aus...
Windows liest nicht direkt einen Namen aus sondern nur den konkreten Typ und die Bezeichnung des Laufwerkes und ich rate einfach mal, dass es das beim Treiber macht und stellt diesen dann für alles andere zu Verfügung. Der Explorer und/oder andere Programme, die es wissen wollen können dies dann über die API auslesen.

ich habe zwar selbst keine ahnung mehr woher ich die beiden funktionen habe,
aber bitte schön:

Delphi-Quellcode:
function GetVolumeLabel(Drive:char):string;
var VolLab:array [0..max_path] of char;
    MaxLength,SysFlag:DWord;
    OldErrorMode:integer;
begin
  OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    if GetVolumeInformation(PChar(drive+':\'), VolLab, 255,
                       nil, MaxLength,
                       SysFlag, nil, 255) then Result:=vollab;
  finally
    SetErrorMode(OldErrorMode);
  end;
end;

und das hier:

Delphi-Quellcode:
function GetDriveShellDesc ( const Drive : Char) : string;
var rootpathname : string;
    namebuffer : string;
    maximumcomponentlength : dword;
    filesystemflags : dword;
    filesystemnamebuffer : string;
begin

   rootpathname := drive+':\'; // build the rootpath for our api

   // predefine buffers
   setlength(namebuffer,25) ;
   setlength(filesystemnamebuffer,500) ;

   // call the api
   if getvolumeinformation ( // returns boolean true if succeeded
      pchar(rootpathname),
      pchar(namebuffer),
      24,
      Nil,
      maximumcomponentlength,
      filesystemflags,
      pchar(filesystemnamebuffer),
      499)

   // build the resulting dword
   then begin
       Result := StrPas ( PChar (NameBuffer) )+' ('+UpCase(Drive)+':)';
   end
   else begin
       Result := UpCase(Drive)+':\';
   end;

end;
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#5

Re: Laufwerksbezeichnung wie in Windows

  Alt 22. Sep 2006, 17:09
Hi,

diese beiden Funktionen lesen den Volumename aus, den man einer Partion auf der Festplatte geben kann, nicht aber den richtigen Typ.

Folgende Shemas sollen verdeutlichen was ich haben möchte:

a) so will ich es haben:

Delphi-Quellcode:
Volumename: Main kein Name kein Name //über GetVolumeInfo
Drive: C:\ F:\ G:\
Typ: Laufwerk DVD-Laufwerk CD-RW-Laufwerk //über GetDriveType oder anders
b) so ist es bisher:

Delphi-Quellcode:
Volumename: Main kein Name kein Name //über GetVolumeInfo
Drive: C:\ F:\ G:\
Typ: Laufwerk CD-DVD Laufwerk CD-DVD Laufwerk //über GetDriveType
Ich kann über GetDriveType bei ROM-Laufwerken nur erkennen ob es ein CD-DVD Lauferk ist, nicht aber ob es ein DVD-Laufwerk oder ein CD-RW-Laufwerk ist.
Ähnlich ist es bei WMI auch dort bekomme ich nur CD-ROM LAufwerk, mehr leider nicht.

Wie kann ich das aber realisieren?

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#6

Re: Laufwerksbezeichnung wie in Windows

  Alt 22. Sep 2006, 18:07
Ich habe das gefunden was ich brauche. Folgende Funktion liefert mir sogar noch weitere Infos und die Laufwerksicons:

Delphi-Quellcode:
var
  FileInfo: TSHFileInfo;

begin
  SHGetFileInfo(PAnsiChar('C:\'),
                0,
                FileInfo,
                SizeOf(FileInfo),
                SHGFI_ICON or
                SHGFI_LARGEICON or
                SHGFI_TYPENAME or
                SHGFI_DISPLAYNAME or
                SHGFI_SYSICONINDEX);
  Image1.Picture.Icon.handle:=FileInfo.hIcon;
  Lb1.Caption := FileInfo.szDisplayName;
  Lb2.Caption := FileInfo.szTypeName;
Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Laufwerksbezeichnung wie in Windows

  Alt 2. Okt 2006, 22:21
In welcher Unit ist denn TSHFileInfo deklariert?

Mein BDS2006 findet dazu nichts.

Gruß Igotcha
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Laufwerksbezeichnung wie in Windows

  Alt 3. Okt 2006, 00:43
Moin Igotcha,

dazu müsstest Du die Unit Shellapi einbinden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.333 Beiträge
 
Delphi XE5 Professional
 
#9

Re: Laufwerksbezeichnung wie in Windows

  Alt 3. Okt 2006, 08:48
In dem Thema http://www.delphipraxis.net/internal...ct.php?t=80846 ist im letzten Beitrag ein Projekt, mit welchen man Infos zu CD/DVD-Laufwerken auslesen kann, angehangen (EXE und Source).
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf