タスクバーにアイコンしかないウィンドウのないアプリケーションがあるとします (Windows、Mac OS X、および Linux)。いくつかのキーとキーの組み合わせをキャプチャする必要があります。たとえば、Right Control + Right Shift とします。正しい組み合わせでキー入力すると、スクリーンショットを撮るなど、何かが実行されます。ウィンドウのないアプリ、タスクバーのアイコン、および画面キャプチャを実行できますが、キーの組み合わせについてキーボードをグローバルに監視する方法がわかりません。ご教授ください。どんな助けやヒントも大歓迎です!前もって感謝します!
1 に答える
システム全体でのキー グラブは難しい問題ですが、システム全体でのキー フックはさらに難しい問題です。すべての OS/GUI には、少なくともつかむための独自のソリューションがあります。Qt4 はそのような機能を公開していませんが、Qt eXTension ライブラリはQxtGlobalShortcutで問題を解決しています。これは、次の場合に適したラッパーです。
- X11 ではXGrabKey() / XUngrabKey() 、
- Windows ではRegisterHotKey() / UnregisterHotKey() 、
- Mac OS X の RegisterEventHotKey()/UnregisterEventHotKey()。
したがって、明示的なキーの組み合わせ、つまり特定のキーと修飾子 (XGrabKey() ではもう少し可能) を取得できます。これは、他のアプリケーションでは取得できません。ここでは、キー シーケンス、つまり連続したキーの組み合わせはサポートされていません。
キーボード フックは、入力イベントを覗くことができる (またはそれらをフィルタリングすることさえできる) ため、はるかに強力です。これはキーボード ロガーだけが使用するものではありませんが、ここでは典型的な関連付けです。
Windows に慣れている場合は、次の記事を読むことができます。
- Joseph M. Newcomer によるフックと DLL 、
- フック。
X11 ではもっと複雑です。あなたが読みたいかもしれない少なくとも2つのページがあります:
- X.Org Wiki - 開発/ドキュメンテーション/InputEventProcessing - 背景を理解するために、
- キーストロークを監視するための X11 の活用- 難しさを理解するため。
X Event Interception Extensionがありましたが、維持されず、最終的に削除されました。
願わくば、X11 インフラストラクチャの助けを借りずに実行できることを願っています。Linux 2.6 カーネルには、ここで悪用できるevdevとして知られる「イベント インターフェイス」があります。詳細については、logkeys Linux キーロガーのソース コードを参照してください。また、evdev に似た効果のあるものを使用して実行することもできます。私の PoC プロジェクトを参照してください: kaos - キー アクティビティのオンスクリーン ディスプレイ。
私は Mac を持っていないので、これ以上の参照はありません。;)