Es tut mir Leid, aber was Sie fragen, ist nicht (trivialer) möglich. Der Grund dafür, dass Ihr Fenster nicht in den Vordergrund tritt, ist, dass Ihre Anwendung nicht die Vordergrundanwendung ist (d. H. Die Anwendung, die für das Vordergrundfenster verantwortlich ist).
Vom manual page:
SetWindowPos Um ein Fenster nach oben zu bringen, den Prozess, der das Fenster besitzt SetForegroundWindow Erlaubnis haben muss.
Natürlich haben Sie das getan. Sie haben jedoch den Rückgabecode nicht überprüft. Hier ist, was das man page zu sagen hat:
Das System beschränkt, welche Prozesse das Vordergrundfenster festlegen können. Ein Prozess kann das Vordergrundfenster nur gesetzt, wenn eine der folgenden Bedingungen erfüllt ist:
- Der Prozess der Vordergrundprozess ist.
- Der Prozess wurde durch den Vordergrundprozess gestartet.
- Der Prozess hat das letzte Eingabeereignis empfangen.
- Es gibt keinen Vordergrundprozess.
- Der Prozess wird debuggt.
- Der Vordergrundprozess ist keine moderne Anwendung oder der Startbildschirm.
- Der Vordergrund ist nicht gesperrt (siehe LockSetForegroundWindow).
- Das Sperrzeitlimit für die Vordergrundverarbeitung ist abgelaufen (siehe SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
- Keine Menüs sind aktiv.
Die Summe dieser Einschränkungen ist, dass, aller Wahrscheinlichkeit nach, Sie nicht Ihre Fenster in ein Vordergrundfenster drehen kann, und Sie können es nicht nach vorne bringen.
Es gibt Wege um das. Sie können sicherstellen, dass der Vordergrundprozess SetForegroundWindow aufruft. Leider führt das Ihren Code nicht aus.
Das einzige Mal, dass ich das tun musste, benutzte ich hooks, um meinen Code in den Vordergrund-Fensterprozess zu injizieren. Das ist kein Anfängertrick. Wenn du das nicht tust, gibt es keine Möglichkeit, das zu tun, was du versuchst.
Bearbeitet, um hinzuzufügen: Es gibt einen Grund, warum Windows versucht, Sie davon abzuhalten, das zu tun, was Sie versuchen zu tun. Das Stehlen des Fokus aus einer anderen Anwendung führt zu einer sehr schlechten Benutzeroberfläche für den Benutzer. Bitte überdenken Sie, ob Sie wollen zu tun, was Sie versuchen zu tun.
Könnte es eine Einschränkung von 'SetForegroundWindow' sein, d. H. Blinkt stattdessen der Taskleisteneintrag? –
Ja, es blinkt, aber wie zu überwinden? –
Wenn der Benutzer möchte, dass Ihr Fenster an der Spitze der Z-Reihenfolge steht, wechseln Sie zu diesem Fenster. Als Programmierer kontrollieren Sie nur die Anordnung von Fenstern innerhalb Ihrer Anwendung, nicht die Anordnung aller Fenster auf dem Desktop. –