Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows-Ereignis "Diskette eingelegt" (https://www.delphipraxis.net/131469-windows-ereignis-diskette-eingelegt.html)

Hennes_RldPf 25. Mär 2009 10:59


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

Sherlock 25. Mär 2009 11:03

Re: Windows-Ereignis "Diskette eingelegt"
 
Mal eine Gegenfrage: Hast Du eine Applikation gesehen, die soetwas kann?

Sherlock

Hennes_RldPf 25. Mär 2009 11:10

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

Sunlight7 25. Mär 2009 11:27

Re: Windows-Ereignis "Diskette eingelegt"
 
Zitat:

Zitat von Sherlock
Mal eine Gegenfrage: Hast Du eine Applikation gesehen, die soetwas kann?

Sherlock

Japp, Das Backupprogramm von Microsoft in DOS Zeiten konnte das... :mrgreen:

Luckie 25. Mär 2009 11:29

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?

Hennes_RldPf 25. Mär 2009 11:36

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:
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.
[edit=MrSpock]Delphi Code Tags gesetzt. Mfg, MrSpock[/edit]

Sherlock 25. Mär 2009 11:53

Re: Windows-Ereignis "Diskette eingelegt"
 
Zitat:

Zitat von Sunlight7
Zitat:

Zitat von Sherlock
Mal eine Gegenfrage: Hast Du eine Applikation gesehen, die soetwas kann?

Sherlock

Japp, Das Backupprogramm von Microsoft in DOS Zeiten konnte das... :mrgreen:

Das hat aber auch das Laufwerk gepollt bzw. in regelmäßigen Abständen testweise draufzugegriffen ;)

Sherlock

jaenicke 25. Mär 2009 12:13

Re: Windows-Ereignis "Diskette eingelegt"
 
Anders geht es nur mit einem MAC-Laufwerk, das weiterleitet, wenn eine Diskette eingelegt wird. :mrgreen:

Hennes_RldPf 25. Mär 2009 12:48

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

p80286 25. Mär 2009 17:25

Re: Windows-Ereignis "Diskette eingelegt"
 
Zitat:

Zitat von Sherlock
Zitat:

Zitat von Sunlight7
Zitat:

Zitat von Sherlock
Mal eine Gegenfrage: Hast Du eine Applikation gesehen, die soetwas kann?

Sherlock

Japp, Das Backupprogramm von Microsoft in DOS Zeiten konnte das... :mrgreen:

Das hat aber auch das Laufwerk gepollt bzw. in regelmäßigen Abständen testweise draufzugegriffen ;)

Sherlock

Wenn ich mich richtig erinnere war das Bios schuld daran. Es gab da meiner Erinnerung nach eine Signalleitung "Laufwerkverriegelt" (für 5,25") und dann wurde automatisch der erste Sektor gelesen. Wenn der ein Bootsektor war, wurde die Kiste brutal neu gestartet.
"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 16:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz