Autor |
Beitrag |
galagher
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 26.12.11 21:35
Hallo!
Wie kann ich mit Delphi feststellen, ob ein Diskettenlaufwerk eingebaut ist? Nicht, ob eine Diskette im Laufwerk ist, sondern, ob überhaupt ein Diskettenlaufwerk existiert!
Alternativ würde es mir weiterhelfen, wenn ihr mir sagen könnt, ob der Laufwerksbuchstabe A auch für andere Laufwerkstypen, zB. USB-Stick, verwendet werden kann, oder ob A ausschliesslich für Diskettenlaufwerke reserviert ist.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 26.12.11 21:39
Nein, das ist nicht reserviert. Die Laufwerksbuchstaben kann man Festplattenmanager zuweisen. Du kannst nicht davon ausgehen, dass LW A immer ein Diskettenlaufwerk ist.
Außerdem: in meinen Anfängen hatte ich auch noch ein Laufwerk B:\. Das war dann das 5 1/4-Zoll-Laufwerk. 
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 26.12.11 21:47
Nersgatt hat folgendes geschrieben : | Du kannst nicht davon ausgehen, dass LW A immer ein Diskettenlaufwerk ist. |
Ok, hab' ich befürchtet, dann muss ich es irgendwie anders herausbekommen.
Ich habe eine Funktion, die feststellt, ob ein Laufwerk bereit ist, aber dabei "rattert" das Diskettenlaufwerk immer so unschön, das möchte ich vermeiden. Kann man vielleicht über die Registry auslesen, ob es ein Diskettenlaufwerk gibt?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.12.11 22:26
Ich weiß nicht, ob das unter NT-basierten Betriebssystemen noch funktioniert, aber hier gibt es einen Artikel bei MS zu dem Thema:
support.microsoft.com/kb/163920
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 26.12.11 22:58
Hmm... 
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 27.12.11 00:07
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.12.11 02:04
Suche in der Registry nach diesem Eintrag - Geräteklasse GUID:
{4d36e980-e325-11ce-bfc1-08002be10318}
Dann ist ein Diskettenlaufwerk vorhanden.
Quelltext 1: 2: 3: 4: 5:
| Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DeviceDisplayObjects\SetupClassInformation\{4d36e980-e325-11ce-bfc1-08002be10318}] "Rank"=dword:000023fa "Category"="Storage.FDD" |
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Di 27.12.11 02:45
Stimmt das auch noch wenn nur mal ein Laufwerk da war und wieder entfernt (USB!) wurde?
Die Version von jaenicke hab ich auch schon selber verwendet, die funktioniert und wird in der Übersetzung und wenn man den Win9x-Zweig weglässt auch noch kürzer.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Di 27.12.11 10:30
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 27.12.11 11:19
GetDriveType unterscheidet nicht zwischen Diskettenlaufwerken und anderen Wechseldatenträgern wie Kartenlesern. 
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Di 27.12.11 11:20
Ach verdammt... 
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 27.12.11 19:06
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 27.12.11 19:50
Mal so kurz getippt nach einem kurzen Blick in die Doku ein wenig anders (aber nicht getestet, ich hätte auch nirgends ein Diskettenlaufwerk): 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| type MEDIA_TYPE = ( mtUnknown = 0, mtF5_1Pt2_512 = 1, mtF3_1Pt44_512 = 2, mtF3_2Pt88_512 = 3, mtF3_20Pt8_512 = 4, mtF3_720_512 = 5, mtF5_360_512 = 6, mtF5_320_512 = 7, mtF5_320_1024 = 8, mtF5_180_512 = 9, mtF5_160_512 = 10, mtRemovableMedia = 11, mtFixedMedia = 12, mtF3_120M_512 = 13, mtF3_640_512 = 14, mtF5_640_512 = 15, mtF5_720_512 = 16, mtF3_1Pt2_512 = 17, mtF3_1Pt23_1024 = 18, mtF5_1Pt23_1024 = 19, mtF3_128Mb_512 = 20, mtF3_230Mb_512 = 21, mtF8_256_128 = 22, mtF3_200Mb_512 = 23, mtF3_240M_512 = 24, mtF3_32M_512 = 25 );
function GetDriveFormFactor(DriveLetter: string): MEDIA_TYPE; type DISK_GEOMETRY = record Cylinders: LARGE_INTEGER; MediaType: MEDIA_TYPE; TracksPerCylinder, SectorsPerTrack, BytesPerSector: ULONG; end; PDISK_GEOMETRY = ^DISK_GEOMETRY; var Geometry: DISK_GEOMETRY; h: THandle; cb: DWord; begin Result := mtUnknown; h := CreateFile(PChar('\\.\' + DriveLetter + ':'), 0, FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); If (h <> INVALID_HANDLE_VALUE) and DeviceIoControl(h, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0, @Geometry, SizeOf(DISK_GEOMETRY), cb, nil) and (cb > 0) then Result := Geometry.MediaType; CloseHandle(h); end; |
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 27.12.11 22:04
jaenicke hat folgendes geschrieben : | Mal so kurz getippt nach einem kurzen Blick in die Doku ein wenig anders (aber nicht getestet, ich hätte auch nirgends ein Diskettenlaufwerk): |
Nun ja, Festplatten werden schon mal als "mtFixedMedia" erkannt, aber das Diskettenlaufwerk als "mtUnknown".
Der Code spricht die Laufwerke aber physikalisch an, das bedeutet, wenn ich if GetDriveFormFactor('A') = mt[...] angebe, "rattert" es wieder!
Da müsste ich also auf die Registry zurückgreifen... Ist aber unsicher, denn wie Martok schon erwähnt hat:
Martok hat folgendes geschrieben : | Stimmt das auch noch wenn nur mal ein Laufwerk da war und wieder entfernt (USB!) wurde? |
Ich denke, nein: Windows spricht das Diskettenlaufwerk ja nicht selbstständig an, kann daher also nicht feststellen, ob es (noch) eines gibt und dann ggf. den Eintrag in der Registry ändern. Das bedeutet, der Eintrag bleibt, auch wenn's kein Diskettenlaufwerk gibt.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Di 27.12.11 22:11
Eine (aber bestimmt nur mit Adminrechten mögliche) Methode fällt mir grade noch ein: den Gerätemanager absuchen nach Geräten mit Enumerator=="FDC" oder Instanzkennung "FDC\GENERIC_FLOPPY_DRIVE" (Eventuell heißt das bei USB anders, aber so viele kann's da ja nicht geben).
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.12.11 22:39
System-Supplied Device Setup Classes
www.osronline.com/dd...l/setup-cls_2i1z.htm
Floppy Disk Controllers
Class = FDC
ClassGuid = {4d36e969-e325-11ce-bfc1-08002be10318}
This class includes floppy disk drive controllers.
Floppy Disk Drives
Class= FloppyDisk
ClassGuid= {4d36e980-e325-11ce-bfc1-08002be10318}
This class includes floppy disk drives.
|
|
|