Wie halte ich mein oberstes Fenster oben?

Lesezeit: 2 Minuten

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

Benutzer-Avatar
John Weldon

TopMost, ist immer eine knifflige Sache. Es gibt keine Möglichkeit, ein anderes Fenster zu überschreiben, das sich selbst als TopMost bezeichnet.

Raymond Chen hat dazu einen guten Artikel.

Auch ein Duplikat davon.

  • Chens Artikel ist nicht gut. Ich als Benutzer möchte, dass nur ein Programm dies tut. Ich werde niemals 2 solcher Programme gleichzeitig starten. Also selbst wenn das Universum zusammenbricht, wenn zwei Programme gleichzeitig versuchen, das oberste zu sein, ist es mir egal.

    – noober

    25. November 2014 um 7:59 Uhr

1012490cookie-checkWie halte ich mein oberstes Fenster oben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy