Feststellen, ob ein Diskettenlaufwerk eingebaut ist
spacer
Autor Nachricht
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1564
Erhaltene Danke: 24



BeitragVerfasst: 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 glumt der jabberwock - und die graisligen gulpen nurmen!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: 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. :D

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1564
Erhaltene Danke: 24



BeitragVerfasst: Mo 26.12.11 21:47 
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
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 glumt der jabberwock - und die graisligen gulpen nurmen!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15840
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1564
Erhaltene Danke: 24



BeitragVerfasst: Mo 26.12.11 22:58 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
support.microsoft.com/kb/163920
Hmm... :nixweiss:

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es glumt der jabberwock - und die graisligen gulpen nurmen!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15840
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Di 27.12.11 00:07 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
support.microsoft.com/kb/163920
Hmm... :nixweiss:
Soll heißen? :gruebel:
In dem Artikel steht die Funktion GetDriveFormFactor, die mit Hilfe von DeviceIoControl genau die Analyse macht. Vorausgesetzt die funktioniert auch noch ab Windows 2000. Die musst du natürlich in Delphi übersetzen.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
hathor
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic star
Beiträge: 793
Erhaltene Danke: 14



BeitragVerfasst: 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.

ausblenden Quelltext markieren
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"

_________________
Jeder fünfte Erwachsene weltweit ist Analphabet.
Warum sind die alle hier im Forum? - Ein Gruss aus Berlin!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 2837
Erhaltene Danke: 182

Win 2000, Win XP
Delphi 7, Turbo Delphi Exp.
BeitragVerfasst: 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 user profile iconjaenicke 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."
Ich code EdgeMonkey -~==~- #ee-lounge in Freenode
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 452
Erhaltene Danke: 10

Win XP, Debian GNU/Linux
Delphi 2007 Enterprise, Java, C#
BeitragVerfasst: Di 27.12.11 10:30 
Was ist hiermit?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15840
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Di 27.12.11 11:19 
user profile iconbaka0815 hat folgendes geschrieben Zum zitierten Posting springen:
Was ist hiermit?
GetDriveType unterscheidet nicht zwischen Diskettenlaufwerken und anderen Wechseldatenträgern wie Kartenlesern. ;-)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 452
Erhaltene Danke: 10

Win XP, Debian GNU/Linux
Delphi 2007 Enterprise, Java, C#
BeitragVerfasst: Di 27.12.11 11:20 
Ach verdammt... ;)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1564
Erhaltene Danke: 24



BeitragVerfasst: Di 27.12.11 19:06 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
support.microsoft.com/kb/163920
Hmm... :nixweiss:
Soll heißen? :gruebel:
Naja, das ist C, ich kann das nicht nach Delphi übersetzen.
Ich denke, ich lasse es eben.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es glumt der jabberwock - und die graisligen gulpen nurmen!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15840
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: 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):
ausblenden volle Höhe Delphi-Quelltext markieren
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;
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1564
Erhaltene Danke: 24



BeitragVerfasst: Di 27.12.11 22:04 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconMartok schon erwähnt hat:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
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 glumt der jabberwock - und die graisligen gulpen nurmen!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 2837
Erhaltene Danke: 182

Win 2000, Win XP
Delphi 7, Turbo Delphi Exp.
BeitragVerfasst: 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."
Ich code EdgeMonkey -~==~- #ee-lounge in Freenode
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
hathor
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic star
Beiträge: 793
Erhaltene Danke: 14



BeitragVerfasst: 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.

_________________
Jeder fünfte Erwachsene weltweit ist Analphabet.
Warum sind die alle hier im Forum? - Ein Gruss aus Berlin!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home