Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Floppy schreibschutz an oder aus? (https://www.delphipraxis.net/18008-floppy-schreibschutz-oder-aus.html)

Luckie 5. Okt 2006 13:59

Re: Floppy schreibschutz an oder aus?
 
WAS für eine Fehlermeldung kommt?

Go2EITS 5. Okt 2006 14:26

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;

Luckie 5. Okt 2006 14:35

Re: Floppy schreibschutz an oder aus?
 
Versuch mal MSDN-Library durchsuchenSetErrorMode mit SEM_FAILCRITICALERRORS. Aber nicht vergessen wieder zurückzustellen.

Meflin 5. Okt 2006 14:45

Re: Floppy schreibschutz an oder aus?
 
Zitat:

Zitat von Go2EITS
Zum obigen Code: Funktioniert nicht!

Falsch. Wie ich derart generalisierende Aussagen hasse... Für Disketten funktioniert er, und nach nichts anderem war gefragt! Daher funktioniert der Code sehr wohl :roll:


Catbytes 5. Okt 2006 14:56

Re: Floppy schreibschutz an oder aus?
 
Zitat:

Zitat von Wheelie
wenn die floppy noch nicht formatiert wurde, dann nützt dieses verfahren recht wenig.

Langt ja schon, wenn die Disk voll ist...

OldGrumpy 5. Okt 2006 14:58

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!

Go2EITS 5. Okt 2006 15:06

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

Meflin 5. Okt 2006 15:15

Re: Floppy schreibschutz an oder aus?
 
Zitat:

Zitat von Go2EITS
Ja ich auch. Aber bei mir geht es nicht.

Das mag ja sein - aber dann zu behaupten der code würde nicht gehen finde ich etwas dreist ;)

Zitat:

Du hast einen Bug drin, wie ich sehe, das zum Thema generalisieren, (wie ich erst das hasse: :zwinker: )
Ich nicht... der code ist ja nicht von mir!
Außerdem wäre ich mit der Bezeichnung "Fehler" vorsichtig - bei mir funktioniert der Code ja wunderbar ;)

Zitat:

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?
Und mit der Bezeichnung "richtig" wäre ich aus obigem Grund auch vorsichtig. Man könnte sich das ganze natürlich irgendwie erleichtern indem man einen char als Parameter übergibt und nicht einen Integer - wieso das so ist leuchtet mir nämlich im Moment nicht ganz ein :gruebel:

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');

Luckie 5. Okt 2006 15:21

Re: Floppy schreibschutz an oder aus?
 
Wo ist das Problem? Einfach die Funktion mit der entsprechenden Konstante aufrufen und fertig.

Meflin 5. Okt 2006 15:23

Re: Floppy schreibschutz an oder aus?
 
Zitat:

Zitat von Luckie
Wo ist das Problem? Einfach die Funktion mit der entsprechenden Konstante aufrufen und fertig.

Äh... meinst du mich? Ich habe kein Problem geäußert sondern eine (imho) Vereinfachung der Funktion gepostet ;)



Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 Uhr.
Seite 2 von 3     12 3      

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