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