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.
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:
)
Delphi-Quellcode:
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;
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?
Beste Grüße!
Go2EITS