2008-08-20 2 views
7

In einer Anwendung, an der ich gerade arbeite, ist es erforderlich, ein Fenster einer externen Anwendung in den Vordergrund zu bringen. Das Ausführen von Win32-API-Aufrufen wie BringWindowToTop und SetForeground-Fenster funktioniert nicht immer. Dies ist auf einige Einschränkungen in Windows XP zurückzuführen. Was ich stattdessen tun möchte, ist simulieren einen Mausklick auf die Schaltfläche des Fensters auf der Taskleiste, die ich hoffe, wird das Fenster nach vorne bringen. Weiß jemand wie das möglich ist?Senden eines Mausklicks an eine Schaltfläche in der Taskleiste mit C#

Antwort

5

Schauen Sie sich den Abschnitt "Wie stehlen Fokus auf 2K/XP" an http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, wie dies genau das ist, was Sie brauchen. Ich würde nicht die Taskleiste Route gehen, da die Taskleiste versteckt sein könnte oder einfach nicht da.

2

Es ist möglich. Aber es ist extrem skizzenhaft. Ihre Anwendung möglicherweise auch mit der nächsten Version von Windows zu brechen, da es nicht dokumentiert ist. Was Sie tun müssen, ist, das Fensterhandle der Taskleiste zu finden, dann das Fensterhandle des untergeordneten Fensters zu finden, das die Schaltfläche darstellt, und dann eine WM_MOUSEDOWN-Nachricht (glaube ich) zu senden.

Hier ist ein bisschen auf der Suche nach dem Fenstergriff in der Taskleiste:

http://www.codeproject.com/

FWIW, die Beschränkungen für BringWindowToTop/setForeground sind da, weil es irritierend, wenn ein Fenster Steals konzentrieren. Das ist egal, wenn Sie in einer Unternehmensumgebung arbeiten. Behalte es im Hinterkopf. :)

1

Um ehrlich zu sein, ich habe noch nie ein Problem bringt ein Fenster in den Vordergrund auf XP/Vista/2003/2000 habe.

Sie müssen sicherstellen, dass Sie Folgendes tun:

  1. Überprüfen Sie, ob IsIconic (minimiert)
  2. Wenn # 1 ergibt wahr ist, dann rufen Showwindow vorbei SW_RESTORE
  3. Dann rufen SetForegroundWindow

Ich hatte nie Probleme, die ich mit diesen Schritten tun kann.