2011-06-27 4 views
0

私は指定した特定の画面座標でコントロールを取得しようとしています。今、どのコントロールがマウスクリックを受け取るか知りたいです。 (UIオートメーションのシナリオでは、コントロールは別のアプリケーションにあります)。特定のポイントでマウスクリックを受け取るControl/Windows Handle/AutomationElementの入手方法?

また、Control、Windows Handle、およびAutomationElementは、多かれ少なかれ互いに交換可能であるため、私と同じです私は別のプロセスで動作しないと思うコントロールから離れて)。

WindowFromPointやAutomationElement.FromPointのような明白な機能がありますが、どちらも失敗し、上に表示される(目に見えない)カスタム要素が返されます。それでも、私はマウスのクリックが私が望むコントロールに行くことを知っています。だから、マウスクリックが実際にどこに行くのかを知る方法はありますか?要素がマウスクリックを通過するかどうかを調べる方法がありますか? アンドレアス

+1

[Raymond ChenがさまざまなAPI関数を比較しています](http://blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx) –

+0

これは興味深い読み物です。多くの感謝です! 私はいくつかのウインドウ/コントロールを同じ画面座標上に重ね合わせてスクロールさせることができますが(Windows APIでは)、オプションがありません。またはそのような機能はありますか? (脚注によると、ウィンドウが別のスレッドにある場合(つまり、別のプロセスにアクセスする場合)は、私にとって致命的なことではありません。 –

答えて

0

多くのおかげで何の答えはありませんので、(または私はあまりにもせっかちだ?)..ない解決策ではなく、私が発見した回避策があります。

実際に、私が望んでいたのは、パラメータ化可能な深い検索です(残念ながら存在しませんが、再帰的に自分自身で行うことができます)。

です。回避策は次のとおりです。ウィンドウを非表示にしないようにします。

奇妙で興味深いことに、これはアプリケーション外から簡単に実行できます.ShowWindow(http://www.pinvoke.net/default.aspx/user32/ShowWindow.html)関数を呼び出して、考慮したくないウィンドウを隠すだけです。ターゲットアプリケーションを変更したくない場合は、後で元の状態に戻すことができます。

もっと良い解決策をお持ちの方:是非教えてください!

関連する問題