2016-12-03 11 views
1

私は自分の仕事で私の時間を節約するためにマウスのキーを使用して、少しスクリプトを作っています。マウスのキーを適切かつ適切に使用することができます。しかし、java.awt.Robotjava.awt.event.KeyEventを使用すると、マウスキーは本質的に無視され、プログラムはリテラルキーを押します。java.awt.Robotおよびjava.awt.event.KeyEventはマウスキーをサポートしていますか?

robot.keyPress(KeyEvent.VK_MULTIPLY)を呼び出すプログラムで、マウスキーが有効になっている場合は、Numpad 5のキーを右クリックに変更する代わりにアスタリスクが出力されます。

これは対象ですか?もしそうなら、なぜJavaがこれをサポートしていないのですか、具体的にはjava.awt

EDIT:java.awt.Robot Javadocによると、アクセス・センター

+0

は、Numpad 5キーを左クリックするようになる 'robot.keyPress(KeyEvent.VK_SLASH) 'と入力することを意味しました。 –

+0

コントロールパネルのアクセス容易性の中でWindowsマウスキーについてお話ししていますか? – ProgrammersBlock

+0

ええ、申し訳ありませんが投稿でそれを述べている必要があります –

答えて

1

やすさから、Windowsのマウスキーを参照すると、「...イベントは、プラットフォームのネイティブ入力キューで生成されています」。 MouseKeysやMagnifierなどのアクセス・センター関連の簡単なプログラムの実装は、user-landのレベルで行われます(のthis pageには、WinUser.hで定義されています)。 MouseKeysが有効になっている場合、マウスイベントを透過的にキーボードイベントに置き換えてから、SendInput functionを介して低レベルのキューに送信します。

MouseKeysは低レベル入力キューを直接監視しません。ウィンドウマネージャレベルでのみ動作し、ユーザーのキーボード入力を合成マウス移動入力に置き換えます。 MouseKeysの実装は、カーネル自体で管理されるOSの最下位レベルの入力キューと直接対話することはありません。 Robotクラスは、イベントを低レベルのキューに直接挿入しているため、MouseKeysプログラムの入力フックの「下」で動作しています。 MouseKeysはキー押下を受け付けないので何もしませんが、キー押下入力は低レベルキューに直接配置されているため、キー押下出力は表示されます。

この回答は、ほとんどが教育を受けた推測に基づいていることに注意してください。しかし、私はこの答えがほぼ正しいと思います。要約:MouseKeysプログラムは、すべてのソースからの低レベルの入力を監視するのではなく、ユーザーの入力を監視するように設計されています。 Robotクラスが低レベルの合成入力を作成するときに、マウスキーはRobotクラス入力を無視します。

+0

それは多くを明確にします。ありがとう! –

+0

緑色のチェックマークをクリックして答えを受け入れてください。ただし、あなたの質問に答えてください。お役に立てて嬉しいです! –

関連する問題