![]() |
Re: Floppy schreibschutz an oder aus?
WAS für eine Fehlermeldung kommt?
|
Re: Floppy schreibschutz an oder aus?
Liste der Anhänge anzeigen (Anzahl: 1)
Das Übliche, wenn Du schreibend auf die schreibgeschütze Diskette zugreifst:
Delphi-Quellcode:
function ReadOnly:Boolean;
var H: DWord; k:string; begin Result := False; k:=paramstr(0); H := CreateFile(PChar('A:\_XXX.bak'), //Zum Test so zerpflückt // H := CreateFile(PChar(k[1]+':\_XXX.bak'), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0); Result := (H = INVALID_HANDLE_VALUE); CloseHandle(H); end; |
Re: Floppy schreibschutz an oder aus?
Versuch mal
![]() |
Re: Floppy schreibschutz an oder aus?
Zitat:
|
Re: Floppy schreibschutz an oder aus?
Zitat:
|
Re: Floppy schreibschutz an oder aus?
Kleine Anmerkung zum Code: Format() generiert einen String, CreateFile erwartet PAnsiChar, also einen nullterminierten String. Also besser dem Formatstring noch ein Nullbyte mitgeben, damits nicht unerwartete Probleme gibt. Kleine Ursache, grosse Wirkung!
|
Re: Floppy schreibschutz an oder aus?
Die Meldung ist ja nicht so schlimm, ich könnte ja prüfen, ob ich auf einem A Laufwerk bin.
SetErrorMode? Hab es mir angesehen. Wenn ich das Umssetzen könnte, hätte ich bestimmt Arbeit als Programmierer. :zwinker: Roter Kasten: Ja ich auch. Aber bei mir geht es nicht. Du hast einen Bug drin, wie ich sehe, das zum Thema generalisieren, (wie ich erst das hasse: :zwinker: )
Delphi-Quellcode:
Na, dann bleibt nur noch am Schluss diese Threads den richtigen Code zu veröffentlichen, damit niemand so rumstoppselt wie ich. Ich habe den Code mal getestet und hier geschrieben. Das ist doch wohl ok?
function IDW(Drive: Integer): Boolean;
const IOCTL_DISK_IS_WRITABLE = ( ($00000007 shl 16) or (0 shl 14) or ($0009 shl 2) or 0); var Device: String; hFile: THandle; BytesReturned: Cardinal; begin Result := false; //Device := Format('\\.\%s:', [Char(Drive + 65)]); //Original! Da muss wohl die +65 raus Device := Format('\\.\%s:', ['A']); //Zum Testen von Laufwerk A. Geht! //Geht sogar, wenn ich den Schreibschutz beim Prüfen ändere. hFile := CreateFile(@Device[1], GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hFile <> 0 then begin Result := DeviceIoControl(hFile, IOCTL_DISK_IS_WRITABLE, nil, 0, nil, 0, BytesReturned, nil); CloseHandle(hFile); end; end; Beste Grüße! Go2EITS |
Re: Floppy schreibschutz an oder aus?
Zitat:
Zitat:
Außerdem wäre ich mit der Bezeichnung "Fehler" vorsichtig - bei mir funktioniert der Code ja wunderbar ;) Zitat:
Delphi-Quellcode:
function IDW(Drive: TChar): Boolean;
const IOCTL_DISK_IS_WRITABLE = ( ($00000007 shl 16) or (0 shl 14) or ($0009 shl 2) or 0); var Device: String; hFile: THandle; BytesReturned: Cardinal; begin Result := false; Device := Format('\\.\%s:', [Drive]); hFile := CreateFile(@Device[1], GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hFile <> 0 then begin Result := DeviceIoControl(hFile, IOCTL_DISK_IS_WRITABLE, nil, 0, nil, 0, BytesReturned, nil); CloseHandle(hFile); end; end; Result := IDW('A'); |
Re: Floppy schreibschutz an oder aus?
Wo ist das Problem? Einfach die Funktion mit der entsprechenden Konstante aufrufen und fertig.
|
Re: Floppy schreibschutz an oder aus?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 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