Bringing Fenster in den Vordergrund in C # mit Win32-API

stimmen
35

Ich bin eine Anwendung schreiben, die Fenster eines externen App in den Vordergrund zu bringen braucht, und nicht unbedingt Fokus stehlen (es gibt eine Benutzereinstellung umschalten zu stehlen / Fokus nicht stehlen).

Was ist der beste Weg, um dies mit der Win32-API zu gehen? Ich habe versucht, setForeground (), aber es stiehlt immer konzentrieren und nicht funktioniert consistenly.

Was ist der beste Weg, um dies zu realisieren? Irgendwelche Gedanken?

Veröffentlicht am 06/08/2008 um 01:55
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
14

SetForegroundWindow soll Fokus stehlen und es gibt bestimmte Fälle, in denen es wird scheitern.

Die SetForegroundWindow Funktion setzt den Faden, der das angegebene Fenster in den Vordergrund und aktiviert das Fenster erzeugt. Tastatureingabe wird an das Fenster gerichtet

Versuchen Sie, den Fokus mit der Erfassung SetCapture vor dem Anruf. Schauen Sie auch in unterschiedlicher Weise zu bringen , um das Fenster nach vorne: SetForegroundWindow, SetActiveWindow, auch einen Mausklick simulieren kann dies tun.

Beantwortet am 06/08/2008 um 02:06
quelle vom benutzer

stimmen
5

Was ist der Unterschied zwischen SetForegroundWindow, SetActiveWindow und BringWindowToTop? Es scheint, als ob sie alle das gleiche tun.

Laut MSDN, SetForegroundWindow wird das Fenster und direkten Tastaturfokus aktivieren. Diese versuchen zu arbeiten, selbst wenn Ihr Prozess im Hintergrund ist. SetActiveWindow macht das Gleiche wie SetForegroundWindow, aber es tut nichts, wenn Ihre Anwendung nicht die vorderste Anwendung ist. Schließlich bringt BringWindowToTop nur das Fenster nach oben, und nicht den Tastaturfokus ändern.

Beantwortet am 06/08/2008 um 14:20
quelle vom benutzer

stimmen
2

Haben Sie mit SetWindowPos versucht. Dies ist die kanonische Funktion zum Verschieben, Skalieren und z-Reihenfolge in Windows einstellen. Es gibt eine SWP_NOACTIVATE Flagge Sie verwenden können. Schauen Sie sich http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx . Ich habe dies zu einem anderen Prozess gehört , auf einem Fenster nicht ausprobiert, aber es ist wahrscheinlich einen Versuch wert.

Beantwortet am 24/08/2008 um 22:51
quelle vom benutzer

stimmen
2

Sie können die BringWindowToTop Funktion versuchen, nicht den Fokus zu stehlen. Ich habe es nicht benutzt, aber es scheint zu sein, was Sie suchen.

Beantwortet am 06/08/2008 um 02:37
quelle vom benutzer

stimmen
1

SetWindowPos + SWP_NOACTIVATE macht die Arbeit.

Beantwortet am 18/12/2009 um 08:23
quelle vom benutzer

stimmen
0

Sie könnten Findwindow verwenden Sie das HWND des Fensters zu erhalten, dann die in dem Win32-API gefunden BringWindowToTop Funktion verwenden.

Beantwortet am 06/05/2011 um 15:44
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more