Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: USB - Autostart dynamisch unterbinden

  Alt 30. Sep 2009, 18:28
Zitat von himitsu:
... und dort sollten auch alle globalen Nachichten ankommen, egal ob es im Vordergrund ist oder nicht (abgesehn davon, daß dieses eh nie im Vordergrund ist )
Das ist ja nicht mein Problem. Die Nachricht kommt ja bei mir an. Selbst wenn mein Programm im Tray liegt. Ich muss aber die Nachricht "beantworten", indem ich Msg.Result:=1 mitgebe, wenn das AutoPlay unterbunden und Msg.Result:=0 wenn es erlaubt werden soll.
Das wiederum wird vom BS offenbar nur dann "ernst genommen", wenn mein Fenster nicht minimiert und nicht im Hintergrund ist.

Zitat von himitsu:
Dann (ich weiß allerding grad nicht genau wie diese heißen) sendet Windows doch erstmal eine "Darf ich runterfahren"-Nachricht an alle Hauptfenster, welche man mit Nein beantworten könnte.
Und erst danach sollte die "So, ich fahr dann mal runter und du kannst da jetzt nix mehr dran ändern"-Nachricht
Das verstehe ich jetzt nicht.
Mir geht es nicht darum, dass Runterfahren zu unterbinden. Ich möchte das AutoPlay ein für alle Male weghaben. Und zwar unabhängig davon, ob mein Programmfenster sichtbar, minimiert oder sonstwas ist.

Evtl. klappt es ja tatsächlich mit einem Message-Only-Window. Das bekomme ich jetzt so hin. Aber auch ich muss leider die Frage stellen, wie kann ich dem Fenster eine WindowProc zuweisen?
Delphi-Quellcode:
Var
   Form1            : TForm1;
   MessageWindow   :hWnd;

Implementation

{$R *.dfm}

Function InstallMessageWindow: hWnd;
Var
   S            : String;
   Ver         : TOSVersionInfoA;
Begin
   Ver.dwOSVersionInfoSize:=SizeOf(TOSVersionInfoA);
   If GetVersionEx(Ver) And (Ver.dwMajorVersion >= 5) Then
      S:='Message'
   Else
      S:='STATIC';
   Result:=CreateWindowExA(0, PChar(S), nil, WS_POPUP, 0, 0, 0, 0, 0, 0, GetCurrentProcessID, nil);
End;

Procedure TForm1.FormCreate(Sender: TObject);
Begin
   MessageWindow:=InstallMessageWindow;
   If MessageWindow <> Invalid_Handle_Value Then
      ShowMessage('OK');
End;
Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat