Diskettenwechsel feststellen
Diskettenwechsel feststellen
Moin!
Wie kann ich feststellen, ob eine Diskette ins Laufwerk gelegt wurde?
Gibt es da irgendeinen Event, auf den ich reagieren könnte? Im Forum und im Codearchiv hab ich jedenfalls nichts gefunden.
Dauernd ein ExamineDirectory() auf A:\ zu machen dürfte nicht der Weisheit letzter Schluss sein ...
Hintergrund der Anfrage ist, dass ich einen Sack oller 3,5"-Disketten archivieren und entsorgen will. Dazu will ich ein Programm machen, das automatisch das Diskettenlaufwerk checkt, ob eine neue (neu im Sinn einer unbekannten Volume Serial Number) Diskette eingelegt wurde und diese dann in ein entsprechendes Unterverzeichnis (wieder analog zur Volume Serial Number) kopiert. Und damit das im Hintergrund läuft und ich nicht immer auf einen Button klicken muss, soll das Programm den Diskettenwechsel eben automatisch erkennen.
Danke!
Wie kann ich feststellen, ob eine Diskette ins Laufwerk gelegt wurde?
Gibt es da irgendeinen Event, auf den ich reagieren könnte? Im Forum und im Codearchiv hab ich jedenfalls nichts gefunden.
Dauernd ein ExamineDirectory() auf A:\ zu machen dürfte nicht der Weisheit letzter Schluss sein ...
Hintergrund der Anfrage ist, dass ich einen Sack oller 3,5"-Disketten archivieren und entsorgen will. Dazu will ich ein Programm machen, das automatisch das Diskettenlaufwerk checkt, ob eine neue (neu im Sinn einer unbekannten Volume Serial Number) Diskette eingelegt wurde und diese dann in ein entsprechendes Unterverzeichnis (wieder analog zur Volume Serial Number) kopiert. Und damit das im Hintergrund läuft und ich nicht immer auf einen Button klicken muss, soll das Programm den Diskettenwechsel eben automatisch erkennen.
Danke!
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."
Es gibt keine Vista-Witze. Es ist alles wahr!
Es gibt keine Vista-Witze. Es ist alles wahr!
Hallo!
Also unter WinXP macht der das aber auch mit ExamineDirectoy(), das sieht man daran, wenn du auf diskettenlaufwerk zugreifen willst und keine Diskette eingelegt ist. Dann schreibt WinXp ja auch "Bitte Diskette in Laufwerk A: einlegen".
Unter Win98 hingegen ist ein Knopf, namens "Wiederholen", den man anklicken muss, wenn man selbst eine neue DIskette eingelegt hat.
Es gibt keinen anderen Weg, als ExamineDirectory(), denn egal wie du das feststellen willst, ob eine neue Diskette drin ist.Wenn dein Diskettenlaufwerk relativ leise ist, ist es doch zu verkraften, oder? Und wenn nicht: Augen zu und durch.
Außrdem kann dein Vorhaben eh nicht 10% ig automatisiert werden, oder schaffst du es, dass sich die Disketten selbst ins Laufwerk stecken, wenn die vorherige komplett kopiert wurde?
Ich würds so machen:
Das Programm soll feststellen, ob eine neue Diskette eingelegt ist und den Namen der Diskkete und/oder die Seriennummer herausfinden, die dann als Name für den Zielordner genommen wird.
Dann soll das Programm automatisch anfangen zu kopieren und wenn es zu ende kopiert hat einen Sound oder Beep_ - Ton ausgeben, so weißt du, wann der Kopiervorgang beendet ist. Um nicht jedesmal auf den Knopf zu klicken "Kopieren starten" (oder so) soll das Program automatisch nach 15 oder 30 Sekunden damit anfangen. Nebenbei lässt du eine Liste erstellen mit den Seriennummern aller Disketten, um zu vermeiden, dass die Diskette erneut kopiert wird, wenn du sie aus Versehen wieder einlegst.
MfG, AND51
Also unter WinXP macht der das aber auch mit ExamineDirectoy(), das sieht man daran, wenn du auf diskettenlaufwerk zugreifen willst und keine Diskette eingelegt ist. Dann schreibt WinXp ja auch "Bitte Diskette in Laufwerk A: einlegen".
Unter Win98 hingegen ist ein Knopf, namens "Wiederholen", den man anklicken muss, wenn man selbst eine neue DIskette eingelegt hat.
Es gibt keinen anderen Weg, als ExamineDirectory(), denn egal wie du das feststellen willst, ob eine neue Diskette drin ist.Wenn dein Diskettenlaufwerk relativ leise ist, ist es doch zu verkraften, oder? Und wenn nicht: Augen zu und durch.
Außrdem kann dein Vorhaben eh nicht 10% ig automatisiert werden, oder schaffst du es, dass sich die Disketten selbst ins Laufwerk stecken, wenn die vorherige komplett kopiert wurde?
Ich würds so machen:
Das Programm soll feststellen, ob eine neue Diskette eingelegt ist und den Namen der Diskkete und/oder die Seriennummer herausfinden, die dann als Name für den Zielordner genommen wird.
Dann soll das Programm automatisch anfangen zu kopieren und wenn es zu ende kopiert hat einen Sound oder Beep_ - Ton ausgeben, so weißt du, wann der Kopiervorgang beendet ist. Um nicht jedesmal auf den Knopf zu klicken "Kopieren starten" (oder so) soll das Program automatisch nach 15 oder 30 Sekunden damit anfangen. Nebenbei lässt du eine Liste erstellen mit den Seriennummern aller Disketten, um zu vermeiden, dass die Diskette erneut kopiert wird, wenn du sie aus Versehen wieder einlegst.
MfG, AND51
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
und? hast du dein vorhaben realisiert? wenn ja wie?
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Danke der Nachfrage, leider nicht, da sich das Diskettenlaufwerk zu meinem Laptop verabschiedet hat
aber der Sack Disketten steht immer noch drohend hinter mir
und falls sich mal ein USB-laufwerk zu mir verirrt, werde ich das so machen, wie Du das beschrieben hast.


PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."
Es gibt keine Vista-Witze. Es ist alles wahr!
Es gibt keine Vista-Witze. Es ist alles wahr!
lol...
Ich habe nicht so viele disketten...
aber naja. auch wenn die disketten heutzutage so uneffizient sind, irgendwann werde ich ihnen nachtrauern... nirgendwo sonst konnte mal eben schnell ne kleine datei drauf speichern und lesen. bei ner cd musste man erst drauf brennen. zum glück geht das heutzutage mit speicherkarten.
Mein absoluter Favorit ist die SD-Speicherkarte. Ist ja fast wie ne Minidiskette, nur mti schnellerer Transferrate und mehr Speicherkapazität.
Ich habe nicht so viele disketten...
aber naja. auch wenn die disketten heutzutage so uneffizient sind, irgendwann werde ich ihnen nachtrauern... nirgendwo sonst konnte mal eben schnell ne kleine datei drauf speichern und lesen. bei ner cd musste man erst drauf brennen. zum glück geht das heutzutage mit speicherkarten.
Mein absoluter Favorit ist die SD-Speicherkarte. Ist ja fast wie ne Minidiskette, nur mti schnellerer Transferrate und mehr Speicherkapazität.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Ach ja: So kannst du die Seriennummer der Disketten überprüfen:
Gib in der Eingabeaufforderung bei XP mal
"LABEL A:" ein. Für weitere Hilfe gib mal "LABEL /?" ein.
entweder lässt du die eingabeaufforderung gehooked auslesen oder schreibe einfach "LABEL A: >C:\disk.txt" und schon ist alles, was auf den bildschirm kommt/käme in der datei gespeichert. ein > : datei wird jedesmal überschrieben. jeder neue befehl mit >> : ausgaben werden an die datei angehängt.
Gib in der Eingabeaufforderung bei XP mal
"LABEL A:" ein. Für weitere Hilfe gib mal "LABEL /?" ein.
entweder lässt du die eingabeaufforderung gehooked auslesen oder schreibe einfach "LABEL A: >C:\disk.txt" und schon ist alles, was auf den bildschirm kommt/käme in der datei gespeichert. ein > : datei wird jedesmal überschrieben. jeder neue befehl mit >> : ausgaben werden an die datei angehängt.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- Hroudtwolf
- Beiträge: 1416
- Registriert: 30.10.2004 23:33
- Kontaktdaten:
So zum Bleistift....
Code: Alles auswählen
; 2005 Hroudtwolf
; Check-Floppy
Declare.s GetHDSerial(Drive.s)
If OpenWindow(0,0,0,300,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Check Floppy")
CreateGadgetList(WindowID(0))
StringGadget(0,8, 10,306,20,"Keine Diskette eingelegt")
Repeat
If CheckTime.l=0 : StopTime.l=GetTickCount_()+400 : CheckTime.l=1 : EndIf
If CheckTime.l=1 And StopTime.l<GetTickCount_()
CheckTime.l=0
If GetHDSerial("a:")<>"0"
SetGadgetText(0,"Diskette eingelegt")
Else
SetGadgetText(0,"Keine Diskette eingelegt")
EndIf
EndIf
Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
Procedure.s GetHDSerial(Drive.s)
DefType.l tmpSerial
DefType.s tmpdrv, tmpFS
tmpdrv.s = Left(Drive.s, 1) + ":\"
tmpFS = Space(256)
GetVolumeInformation_(@tmpdrv, @tmpFS, 255, @tmpSerial, 0,0 , @tmpFileSystem, 255)
ProcedureReturn Hex(tmpSerial)
EndProcedure
Hat eine Diskette wirklich eine Seriennummer wie eine HD?
Ich kenne eigentlich nur das Label und das kann man beim
Formatieren (oder auch extra) setzen, glaube 11 Zeichen.
Das Label kann aber auch durchaus gleich sein bei Disketten,
meist ist es eh leer.
@HW: Liefert dein Code auch was wenn das Label leer ist?
(kanns nicht probieren weil mein DiskettenLW ist gerade hinüber -
muss erst einen Schrotthaufen wo plündern)
Es müsste aber einen API-Befehl geben (wie bei der CD) wo man
abfragen kann ob das Medium gewechselt wurde.
Wenn man mit dem Windows-Explorer das Inhaltverzeichnis einer Diskette
ansieht, dann wird der Inhalt gleich in den Cache gelesen, man merkts
am rumnuckeln. Wenn man den Explorer schliesst und wiederaufruft
nuckelt das Laufwerk nicht. Wenn man aber die Diskette rausnimmt und
gleich wieder reinsteckt dann lädt der Explorer den Cache neu.
Muss also einen Mechanismus geben der beim Öffnen des LW den
Cache leert bzw beim Neuzugriff feststellt dass das LW offen war.
Vom Inhalt hängts nicht ab. Leider hab ich diesen *ist das Medium
gewechselt worden Api-Befehl* noch nicht gefunden.
Weis jemand da näheres?
Danke
LUPO

Ich kenne eigentlich nur das Label und das kann man beim
Formatieren (oder auch extra) setzen, glaube 11 Zeichen.
Das Label kann aber auch durchaus gleich sein bei Disketten,
meist ist es eh leer.

@HW: Liefert dein Code auch was wenn das Label leer ist?
(kanns nicht probieren weil mein DiskettenLW ist gerade hinüber -
muss erst einen Schrotthaufen wo plündern)
Es müsste aber einen API-Befehl geben (wie bei der CD) wo man
abfragen kann ob das Medium gewechselt wurde.
Wenn man mit dem Windows-Explorer das Inhaltverzeichnis einer Diskette
ansieht, dann wird der Inhalt gleich in den Cache gelesen, man merkts
am rumnuckeln. Wenn man den Explorer schliesst und wiederaufruft
nuckelt das Laufwerk nicht. Wenn man aber die Diskette rausnimmt und
gleich wieder reinsteckt dann lädt der Explorer den Cache neu.
Muss also einen Mechanismus geben der beim Öffnen des LW den
Cache leert bzw beim Neuzugriff feststellt dass das LW offen war.
Vom Inhalt hängts nicht ab. Leider hab ich diesen *ist das Medium
gewechselt worden Api-Befehl* noch nicht gefunden.
Weis jemand da näheres?
Danke
LUPO
Entschuldigung, nicht den befehl LABEL nehmen, sondern VOL, der zeigt die Volume Seriennummer an!
Oder speicher auf jede Diskette eine kleine Textdatei!!!
Oder speicher auf jede Diskette eine kleine Textdatei!!!
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End