Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Taskleiste WM_ Botschaften abfangen? (https://www.delphipraxis.net/216232-taskleiste-wm_-botschaften-abfangen.html)

WilderMike 25. Nov 2024 15:00

Taskleiste WM_ Botschaften abfangen?
 
Hallo,
für mein falsches PopupMenu Menü (ist eine Form) wäre es hilfreich*, wenn ich wohl die Botschaften WM_MOUSEHOVER und WM_MOUSELEAVE für die Taskleiste abfangen könnte. Ob das geht? Ich kam auf die Idee, da man mit
Code:
ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_HIDE);
z.B. die Taskleiste ausblenden (mit SW_SHOW wieder einblenden) kann. Also man kann zumindest etwas mit der Taskleiste anstellen. Wäre super wenn das irgendwie geht.

* Bei echten Popups (wenn angezeigt) werden solche Botschaften von der Taskleiste wohl auch nicht empfangen. Zumindest findet keine optische Sache statt. Evtl. kann ich meine Form auch so umbiegen, dass Windows diese als Popup-Fenster betrachtet. Die Idee mit "WS_POPUP" bringt jedoch keine Änderung.

Gruß WilderMike

HolgerX 25. Nov 2024 15:18

AW: Taskleiste WM_ Botschaften abfangen?
 
Hmm..

ein mit
Shell_NotifyIcon(NIM_ADD, @Ftnid);
erzeugtes ICON hat kein eigenes PopUp....

in den NOTIFYICONDATA kann ein Handle (von Fenster oder anderes WindowHandle) angegeben werden, mit einer eigenen MessageID
(z.B. const WM_TASKBAREVENT = WM_USER + 1111;)

Windows sendet dann alle WindowsMessages (wie WM_LBUTTONDBLCLK / WM_RBUTTONDOWN) an dieses Window.

Ob deine gewünschten dabei sind müsstest Du testen...

Hatte da mal vor Jahren eine Unit für gebastelt, welche das mit einem eigenen PopUp Menu macht.
Alternativ kannst Du dann auch ein Fenster anzeigen, und dann beim Verlassen des Fensters (Mouse) dieses wieder schließen.

WilderMike 25. Nov 2024 15:44

AW: Taskleiste WM_ Botschaften abfangen?
 
Noch verstehe ich nicht viel ;-)

Also ich habe ein TTrayIcon welches in der Taskleiste erscheint. Dort öffne ich eine 2. Form die inzwischen schön als Popup mit ein paar Extras ausgestattet ist. Das schließen und öffnen dieses falschen Popups geht wie gewünscht. Wenn die Form offen ist, sehe ich sozusagen WM_MOUSEHOVER und WM_MOUSELEAVE auf der Windows-Taskleiste. Also die Schaltflächen und Icons reagieren optisch. Auch "Hint-Windows" öffnen sich. Gerade diese stören, wenn meine Form dort erscheint. Für eine besser Benutzerfreundlichkeit wäre es gut, wenn ich die Windows-Taskleiste kurz sperren kann bzw. die beiden Botschaften denn ein Mausklick sollte noch funktionieren, da sonst meine Form wohl keinen Fokus verliert und sie dann nicht geschlossen wird. Wenn "WM_MOUSEHOVER und WM_MOUSELEAVE" abgefangen werden könnte, sollten Hint-Windows (z.B. Ausgeblendete Symbole einblenden - bei Windows 11) dann wohl auch nicht funktionieren. Wenn mein unechtes Popup-Fenster wieder geschlossen wird, kann man "WM_MOUSEHOVER und WM_MOUSELEAVE" natürlich wieder freischalten.

Also es geht nicht nur um mein TrayIcon. Möchte die ganze Taskleiste mit den beiden Botschaften abfangen.

WilderMike 25. Nov 2024 16:01

AW: Taskleiste WM_ Botschaften abfangen?
 
Gerade probiert
Code:
EnableWindow(FindWindow('Shell_TrayWnd',nil), false);
etwas wird gemacht. Aber nicht so wie gewünscht.
Erst mal gibt es ein Beep, beim Mausklick auf der Taskleiste und sie reagiert genauso, nur um einiges langsamer. Also richtig gesperrt ist sie nicht. Aber das will ich ja eigentlich auch nicht. Wollte es aber mal so probieren ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 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