2012-02-23 17 views
1

私はWPFアプリケーションをビルドしています.Windowsのカーソルを置き換えます。私が知る必要があるのはです。アイテムの魔法使いが私のカーソルの下にある場合は、をクリックすることができます(私はそれをすぐにクリックしたくありません)。要素をクリックできるかどうかを取得する

その要素(ボタン、リンクなど)は、ウィンドウ上の任意の場所(デスクトップアイコン、他のWPFアプリケーション、ウェブサイトなど)にすることができます。私はいくつかの検索をして、それは私がアセンブリUIAutomationで検索するものを見つけることができるようだ...しかし、私はそれをどのように使用するのか分からない。

私の考えでは、カーソルの位置を取得することです:

その項目が

誰かがアイデアを持ってクリックすることができるかどうかの項目は -watchの下に彼らのであれば

-watch?

おかげ

+0

カーソルがアプリケーション内の任意のコントロールの上にあるとき、または自分のアプリだけの上にあるときにこれを行いますか?あなたのアプリがどのように使われるかについてもっと詳しく説明できますか? – BrendanMcK

+0

私のカーソルがどのアプリケーションにもホバーしているとき、これをやりたい実際には、私はそれが1つのWPFアプリケーションで動作する必要がありますが、私はそのアプリケーションへのアクセス権がありません。私のアプリはkinectと一緒に使用されます、私はすでにメソッドウィッチがクリックをスローするようにしています。ボタンにイベントを追加することはできません(onMouseHoverなど)ので、私は彼が何かをクリックすることができるかどうかを確認する機能をカーソルに追加する必要があります。 – SavaryNicolas

答えて

0

項目がクリックできるかどう伝えるために、一般的に方法はありません。しかし、あなたのアプリケーションに十分な推測をすることができるかもしれません。

問題は、クリックが最初にどのように機能するかと関係があります.Windowsは常にクリックを送信し、アプリケーションに応答するかどうかを決定するのはアプリケーションの責任です。通常、フォームの背景は反応しませんが、いくつかは反応します。通常はボタンが反応します。しかし、そうでないものがあるかもしれません。また、コントロールのタイプによっては、クリックした場所によって異なる応答をする場合があります。テキストコントロール内のリンクをクリックすると、リンクがアクティブになります。テキストをクリックすると、挿入ポイントが移動します。

したがって、常にクリックが送信されるようにすることをお勧めします。これがマウスの動作の仕組みです。

ヒントを表示したい場合は、UIAutomationを使用してAutomationElement.FromPointを取得し、そのControlTypeおよびIsEnabledプロパティを取得し、Button、ListItem、TabItemなどのようなものであれば有効になっている場合、となる可能性があります。クリック可能です。

1つまたは2つの特定のアプリケーションに対してのみ作業する必要がある場合は、それらのアプリケーションでクリック可能なタイプの完全なリストを提示することができますが、必ずしも正確ではないことに注意する必要があります。したがって、正しいインジケータが表示されていなくても、ユーザーがオーバーライドしてクリックを送信できるようにする必要があります。

関連する問題