![]() |
Windows-Ereignis "Diskette eingelegt"
Hallo zusammen,
ich such mir seit ein paar Tagen nen Ast. Ich erstelle eine Anwendung, die unter anderem erkennen soll, dass ein neues Laufwerk hinzugekommen ist um dieses LW dann mittels Fremdroutinen zu scannen. Für USB, DVD/CD und Netzwerklaufwerke kein Thema...aber für Disketten-LW krieg ich`s nicht hin... Welches Windows-Event (falls es das überhaupt für solch veraltete Technik gibt...) sagt mir, dass eine neue Diskette eingelegt wurde? Danke im voraus für Eure Hilfe! Hennes |
Re: Windows-Ereignis "Diskette eingelegt"
Mal eine Gegenfrage: Hast Du eine Applikation gesehen, die soetwas kann?
Sherlock |
Re: Windows-Ereignis "Diskette eingelegt"
Klar könnte ich alle x Sekunden prüfen, ob da ein Datenträger eingelegt wurde...aber das ist für den Nutzer etwas nervig...
Ich denke, dass mir nichts anderes übrig bleiben wird, als die Disketten-LW in meiner Domäne komplett zu sperren... |
Re: Windows-Ereignis "Diskette eingelegt"
Zitat:
|
Re: Windows-Ereignis "Diskette eingelegt"
Ob eine Diskette eingegt ist, überprüft Windows auch erst, wenn daruf zugegriffen werden soll. Und was CD/DVD angeht, hast du das mal probiert, wenn das Autorun abgeschaltet ist?
|
Re: Windows-Ereignis "Diskette eingelegt"
Das Teil funzt auch, wenn autorun abgeschaltet ist...hab autorun aus Sicherheitsgründen in der gesamten Domäne abgeschaltet
Also bisher bin ich zufrieden damit... ___________________________________
Delphi-Quellcode:
[edit=MrSpock]Delphi Code Tags gesetzt. Mfg, MrSpock[/edit]
function TForm1.ApplicationWndProcHook(var Message: TMessage): Boolean;
var zw_LW_liste : Array[0..25] of laufwerksliste; i,x : integer; Ergebnis : integer; LW_gefunden : boolean; begin if Message.wParam = DBT_DEVICEARRIVAL then Begin LW_gefunden :=false; // Neues Laufwerk ermitteln neues_lw := '0'; Laufwerksliste_bauen(zw_lw_liste); // folgende Codezeile rausschmeißen, wenn final For i := 0 to 25 do ListBox2.Items.Add(zw_lw_Liste[i].lw + Drivetype(i)); For i := 0 to 25 do Begin If lw_liste[i].lw <> zw_lw_liste[i].lw then Begin Neues_lw:= zw_lw_liste[i].lw; messagedlg('Neues Laufwerk ' + Neues_lw + ':\ erkannt!',mtinformation,[mbok],0); Laufwerksliste_bauen(lw_liste); LW_Gefunden := true; End; //Wenn beide Listen gleich sind, ist eines der CD-Rom`s betroffen // und jede Menge weiteres blabla... End; End; if Message.wParam = DBT_DEVICEREMOVECOMPLETE then Begin //Laufwerksliste nach Änderung neu aufbauen Laufwerksliste_bauen(LW_Liste); neues_lw := '0'; Messagedlg('Ding wech...',mtConfirmation, [mbok],0); End; Result := False; end; // of function procedure TForm1.FormCreate(Sender: TObject); var i : integer; groesse : integer; buffer : PChar; begin Application.HookMainWindow(ApplicationWndProcHook); Laufwerksliste_bauen(LW_Liste); // Windowsdirectory ermitteln WindowsDir := SysUtils.GetEnvironmentVariable('windir'); // do something more... end; procedure TForm1.FormDestroy(Sender: TObject); begin Application.UnhookMainWindow(ApplicationWndProcHook); end; end. |
Re: Windows-Ereignis "Diskette eingelegt"
Zitat:
Sherlock |
Re: Windows-Ereignis "Diskette eingelegt"
Anders geht es nur mit einem MAC-Laufwerk, das weiterleitet, wenn eine Diskette eingelegt wird. :mrgreen:
|
Re: Windows-Ereignis "Diskette eingelegt"
Ok...ich lass diese Thema nochmal auf..vielleicht kommt ja noch jemand mit einer geschickten hintertür aus dem Busch...
|
Re: Windows-Ereignis "Diskette eingelegt"
Zitat:
"Schuld" daran war die ursprüngliche Auslegung des IBM-PC als "Disketten-Rechner". Es könnte sein, daß unter IOControl (MediaChange) noch etwas zu finden ist, aber offiziell sollte da nichts mehr existieren. Gruß K-H Pardon vertan! Das mit dem automatischen Booten war ein Spezialfeature in einem Laborrechner. Der normale IBM-PC bootete erst mit dem Affengriff. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 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