2012-04-10 18 views
2

Meine Aufgabe war es, das Vordergrundfenster zu finden (erreicht mit GetForegroundWindow API) und dann musste ich eine Liste mit allen untergeordneten Fenstern des Vordergrundfensters vorbelegen (ausgeführt mit EnumChildWindows API). Jetzt muss ich das erkennen der Mauszeiger befindet sich auf dem Kindfenster, dh ich muss herausfinden, welches Kindfenster (kann ein Knopf oder eine Textbox im Vordergrundfenster sein) aktiv ist. Gibt es eine API, mit der ich Griffe der ChildWindows erhalten kann, auf die geklickt wurde? Auch wenn ich nur den Namen des ChildWindow (des aktiven Vordergrundfensters), auf dem der Fokus liegt, bekomme, reicht es mir. Vielen Dank im Voraus.Erkennen, welches Childwindow des Vordergrundfensters angeklickt wurde?

+0

Warum sind Sie mit einer anderen Anwendung Fenster durcheinander? Wenn dies für die Testautomatisierung vorgesehen ist, können Sie den System.Windows.Automation-Namespace verwenden. –

+0

Dies ist keine Test-Automatisierung .... Es braucht viel Zeit, um zu erklären, was meine App zu tun beabsichtigt, aber ich werde Sie schnell informieren, ich muss die Liste der Kindfenster, die in der aktiven Anwendung sind, vorbelegen Verfolgen Sie die Bewegungen (Klicks) des Benutzers und leiten Sie ihn darüber, was er als nächstes tun soll, indem Sie auf das Nachschlagen verweisen, das mit EnumChildWindows erstellt wurde, so dass ich genau wissen muss, welches Kindfenster den Fokus hat. Kannst du mir bitte ein paar Hinweise geben, wie es mit System.Windows.Automation geht .... Danke im Voraus! – Ajit

+0

Oh, das ist für Computer-basiertes Training. System.Windows.Automation kann immer noch nützlich sein. Sie können die Dokumentation lesen, um auf dem neuesten Stand zu sein. Ich werde nicht versuchen, Sie in einem Kommentar zu unterrichten. –

Antwort

3
 InPtr hwnd = GetForegroundWindow(); 

     public static void GetAppActiveWindow(IntPtr hwnd) 
    { 
     uint remoteThreadId = GetWindowThreadProcessId(hwnd, IntPtr.Zero); 
     uint currentThreadId = GetCurrentThreadId(); 
     //AttachTrheadInput is needed so we can get the handle of a focused window in another app 
     AttachThreadInput(remoteThreadId, currentThreadId, true); 
     //Get the handle of a focused window 
     IntPtr focussed = GetFocus(); 

     StringBuilder activechild = new StringBuilder(256); 
     GetWindowText(focussed, activechild, 256); 
     string textchld = activechild.ToString(); 
     if (textchld.Length > 0) 
     { 
      Console.WriteLine("The active Child window is " + textchld + " ."); 

     } 
     //Now detach since we got the focused handle 
     AttachThreadInput(remoteThreadId, currentThreadId, false); 
    } 

Dies ist, was die schließlich das Problem gelöst :)

Verwandte Themen