c# - win32 - c++ winapi




Fenster in C#mithilfe der Win32-API an die Front bringen (4)

Was ist der Unterschied zwischen SetForeGroundWindow, SetActiveWindow und BringWindowToTop? Es scheint, als würden alle dasselbe tun.

Laut MSDN wird SetForeGroundWindow das Fenster aktivieren und den Tastaturfokus darauf richten. Dies versucht zu arbeiten, auch wenn Ihr Prozess im Hintergrund ist. SetActiveWindow tut dasselbe wie SetForeGroundWindow, aber es tut nichts, wenn Ihre Anwendung nicht die vorderste Anwendung ist. Schließlich bringt BringWindowToTop das Fenster nur nach oben und ändert den Tastaturfokus nicht.

Ich schreibe eine Anwendung, die Fenster einer externen App in den Vordergrund bringen muss, und nicht unbedingt Fokus stehlen (es gibt eine Einstellung, die der Benutzer wechseln kann, um Fokus zu stehlen / nicht zu stehlen).

Was ist der beste Weg, dies mit der Win32-API zu tun? Ich habe SetForeground () versucht, aber es stiehlt immer Fokus und funktioniert nicht konsistent.

Was ist der beste Weg, dies zu tun? Irgendwelche Gedanken?


Haben Sie versucht, SetWindowPos zu verwenden? Dies ist die kanonische Funktion zum Verschieben, Ändern der Größe und zum Festlegen der Z-Reihenfolge in Windows. Es gibt ein SWP_NOACTIVATE-Flag, das Sie verwenden können. Sehen Sie sich http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx . Ich habe dies nicht in einem Fenster versucht, das zu einem anderen Prozess gehört, aber es ist wahrscheinlich einen Versuch wert.


SetWindowPos + SWP_NOACTIVATE erledigt die Aufgabe.


Sie können FindWindow verwenden, um das HWND des Fensters abzurufen, und dann die BringWindowToTop-Funktion verwenden, die in der Win32-API gefunden wird.





winapi