9

LinuxプログラムをCで作成していますが、特定のキーボードストロークをインターセプトする必要があります。

入力サブシステム(読み取り/書き込み/ dev / input / eventX)を使用して、キーボードストロークを受信する(「読み取り」機能を使用)か、キーボードストロークをシミュレートする(「書き込み」機能を使用)ことができます。

「読み取り」機能を使用すると、ユーザーのキーボードストロークをキャプチャできますが、このイベントは伝播され、その使用方法がわかりません。

4

1 に答える 1

7

デフォルトでは、入力イベントはリッスンしているすべてのアプリケーションとドライバーに送信されます。ただし、evdevインターフェイスを介してアプリケーションにデバイスを取得させることは可能EVIOCGRAB ioctl()です。. それは、その特定のアプリケーションがその特定のデバイスからイベントを受け取ることだけを許可します。

このアプローチの問題は、特定のイベントが受信された後に伝播されるのを実際に防ぐことができないことです。事前にデバイスを取得することしかできず、すべてのイベントがキャプチャされます。したがって、入力イベントをフィルタリングする場合は、回避策を使用する必要があります。

私自身のevmapdデーモンで使用した回避策には、元のデバイスを取得し、uinputサブシステムを使用して、再マップされたキーやその他のさまざまな変更を含む、必要なすべての変更を別のデバイスに提供することが含まれていました...

于 2012-09-01T20:31:45.183 に答える