4 Stimmen

die Funktion "Fenster finden..." von spy++ in C# erstellen

Ich möchte die gleiche Funktion "Find Windows..." von spy++ in C# erstellen. Ich habe versucht, mit dieser Funktion der WINAPI:

HWND WINAPI WindowFromPoint(__in  POINT Point);

http://msdn.microsoft.com/en-US/library/ms633558.aspx Aber ich komme nicht dazu, alle Elemente damit zu erreichen, weil sie deaktiviert oder versteckt sind.

Zum Beispiel kann ich mit dem Window 7-Taschenrechner im Programmiermodus nicht das "A B C D E F" erhalten. mit meinem Programm, wenn sie deaktiviert sind, kann spy++ sie abrufen.

Bearbeiten: Ich habe es versucht, aber es funktioniert nicht:

[DllImport("user32.dll")]
public static extern ulong GetClassLongPtr(IntPtr hWnd, int nIndex);

[DllImport("user32.dll")]
public static extern IntPtr ChildWindowFromPointEx(IntPtr hWndParent, Win32Point pt, uint uFlags);

IntPtr hWnd = WindowFromPoint(myPoint);
hWnd= ChildWindowFromPointEx(hWnd , myPoint, 0x0000);

myPoint ist die Position der Maus.

Ich kenne mich mit der WINAPI nicht aus und ich kann mir vorstellen, dass es sich bei Ihrer Erklärung um einen Mangel an Verständnis meinerseits handelt. Es ist möglich, ein kleines Beispiel für ChildWindowFromPointEx Funktion oder wissen, was mein Code nicht funktioniert? thanx für Ihre Antwort


Ich habe versucht, die Schleife zu erstellen, aber es scheint, dass der Handle unter dem anderen Handle ist, aber nicht Kinder des Handles, die Schleife sendet immer den gleichen Handle und keine das gewünschte Kind, wenn die Taste "a b c d e f" deaktiviert ist. Haben Sie eine andere Idee?

5voto

Mike Kwan Punkte 23469

WindowFromPoint gibt ein Fensterhandle zurück. Da Sie es mit deaktivierten/versteckten Fenstern zu tun haben, sollten Sie ChildWindowFromPointEx , übergehend in hwndParent als das Handle, das Sie von WindowFromPoint .

Vielleicht finden Sie den folgenden Artikel hilfreich: http://blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx


Was den von Ihnen hinzugefügten Code betrifft, ChildWindowFromPointEx nimmt Client-Koordinaten, während die Mauspositionskoordinaten, die Sie haben, Bildschirmkoordinaten sind. Sie können die Konvertierung mit ScreenToClient .

Hinweis: Dies ist die WinAPI-Methode, um Dinge zu tun. Ich habe keine Ahnung, ob oder welche APIs C# liefert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X