Ich werde zuerst erklären, warum ich es brauche, weil ich erwarte, dass die erste Antwort sein wird: “Warum brauchen Sie es?”. Ich möchte erkennen, wenn sich der Mauszeiger an einem Rand des Bildschirms befindet, und ich möchte keine Hooks verwenden. Daher habe ich ein Pixel breites TOPMOST unsichtbares Fenster erstellt.
Ich verwende C++ unter Win XP, also funktioniert beim Erstellen des Fensters (CreateWindowEx(WS_EX_TOPMOST | WS_EX_TRANSPARENT …) alles einwandfrei.
Wenn ein Benutzer ein anderes oberstes Fenster bewegt, zum Beispiel die Taskleiste über mein Fenster, bekomme ich leider keine Mausbewegungen.
Ich habe versucht, dies ähnlich wie in vorgeschlagenen Ansätzen zu lösen:
So behalten Sie ein MDI-Fenster immer im Vordergrund
Ich habe zuerst versucht, die Z-Reihenfolge meines obersten Fensters in WM_WINDOWPOSCHANGED zu überprüfen
case WM_WINDOWPOSCHANGED :
WINDOWPOS* pWP = (WINDOWPOS*)lParam;
dennoch zeigt pWP->hwnd auf mein Fenster und pWP->hwndInsertAfter ist 0, was bedeuten sollte, dass mein Fenster oben auf dem Z ist, obwohl es mit der Taskleiste bedeckt ist. Dann habe ich versucht:
case WM_WINDOWPOSCHANGED :
HWND topWndHndl = GetNextWindow(myHandle, GW_HWNDPREV)
GetWindowText(topWndHndl, pszMem, cTxtLen + 1);
und ich bekomme immer, dass das Fenster “Standard-IME” über meinem Fenster ist. Selbst wenn ich versuche, mein Fenster mit SetWindowPos() oder BringWindowToTop() nach oben zu bringen, bleibt “Default IME” oben. Ich weiß nicht, was “Standard-IME” ist und wie ich feststellen kann, ob sich die Taskleiste über meinem Fenster befindet.
Meine Frage ist also: Wie kann ich erkennen, dass mein oberstes Fenster nicht mehr das oberste oberste Fenster ist, und wie kann ich es oben halten?
PS Ich weiß, dass ein “Brute-Force” -Ansatz, mein Fenster regelmäßig nach oben zu bringen, funktioniert, aber hässlich ist und zum Beispiel unerwünschte Rückschlüsse auf das Benachrichtigungsfenster haben könnte. (Wenn Sie mein Fenster nach oben bringen, wird das Benachrichtigungsfenster ausgeblendet.)
Vielen Dank für Ihre Zeit und Anregungen!
mögliches Duplikat von How to make a window stay in .Net immer im Vordergrund?
– John Weldon
17. Juni 2010 um 22:22 Uhr