ユーザーがプログラムの外部でF10またはCtrl+F10を押したことを検出できるようにしたいのですが、キーを押すと、現在選択しているもの(テキストボックスなど)にテキストが送信されます。これを最も簡単な方法でどのように達成できますか?
3 に答える
グローバルホットキーを取得するには、キーボードフックではなくRegisterHotkeyを使用します。
ほぼ同じ質問について、私の古い回答の1つを参照してください。アプリケーションがフォーカスされていないときにキーをリッスンします。
ここでの最初の問題は、F10キーがすでにWindowsアプリケーション用に予約されているキーであるということです。ユーザーがそれを押すと、アクティブなアプリケーションはメニューバーの最初のメニューを選択します。これは、ユーザーがマウスを使用せずにメニューをアクティブ化するための便利な方法を提供します。その機能をグローバルにハイジャックするというあなたの提案は、軽率で不適切です。別のショートカットキーを選択することをお勧めします。できれば、まだ標準的な意味を持たないものを選択してください。
次に、低レベルのキーボードフック(.NETアプリでサポートされている唯一のタイプのフック)をインストールする必要があります。これは、アプリケーションの外部で発生するキーボードイベントをキャプチャする唯一の方法です。アプリケーションがフォアグラウンドにないときに発生するキー押下を検出する必要があるため、グローバルフックが必要になります。
StephenToubのブログに優れたサンプルがあります。たまたまC#で書かれていますが、VB.NETへの変換は簡単です。プロジェクトに簡単に追加できる既存のコードの完全なベースが必要な場合は、このサンプルを試すことができますが、必要のない多くの追加機能が含まれていることに注意してください。
これは、keypressイベントで確認できます。
if not e.control and e.keycode = keys.F10 then
<Statements>
elseif e.keycode = keys.F10 then
<Statements>
end if