4

spy++の同じ機能「窓を探す…」をC#で作りたいと思っています。私はWINAPIのこの機能を試しました:

HWND WINAPI WindowFromPoint(__in  POINT Point);

http://msdn.microsoft.com/en-US/library/ms633558.aspx しかし、無効または非表示になっているため、すべての要素を取得することはできません。

たとえば、プログラマー モードのウィンドウ 7 電卓では、プログラムが無効になっている場合、プログラムで "ABCDE F" を取得できず、spy++ で取得できます。

編集:私はこれを試しましたが、うまくいきません:

[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 はマウスの位置です。

私は WINAPI に慣れていないので、あなたの説明は私の理解不足だと思います。ChildWindowFromPointEx 関数の小さな例を持っているか、私のコードが機能していないかを知ることは可能ですか? 答えてくれてありがとう


ループを作成しようとしましたが、ハンドルが他のハンドルの下にあるようですが、ハンドルの子ではないようです。ループは常に同じハンドルを送信し、キー「abcde f」が無効になっている場合は希望の子は送信しません。別のアイデアはありますか?

4

1 に答える 1

5

WindowFromPointウィンドウハンドルを返します。無効/非表示のウィンドウを扱っているので、ChildWindowFromPointExhwndParentを使用して、から取得したハンドルとして渡しますWindowFromPoint

次の記事が役立つ場合があります:http: //blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx


追加したコードに関しては、ChildWindowFromPointExクライアント座標を取りますが、マウスの位置座標は画面座標です。ScreenToClientを使用して変換を行うことができます。

注:これは、WinAPIで処理を行う方法です。C#が提供するAPIかどうか、またはどのAPIを提供するかはわかりません。

于 2012-02-29T23:51:53.133 に答える