2012-09-01 1 views
6

私はCでLinuxプログラムを作成しています。特定のキーボードストロークを傍受する必要があります。入力サブシステムを使用してLinuxでキーボードイベントをコンパイルする方法

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

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

+0

デモコード: int devfd = open(device、...);/*カーネルデバイス "/ dev/input/eventX"を開きます。 */ read(devfd、...);/*キーボードイベントを読み込みます。 */ 書き込み(devfd、...);/*キーボードイベントをシミュレートします。 */ – zccoding

+2

あなた自身の質問にコメントする必要はありません。質問を編集して詳細を追加し、ソースをフォーマットすることができます。あなたの情報源が回答する人には明らかであることを確認してください。 – bytebuster

答えて

5

デフォルトでは、入力イベントはすべてのリスニングアプリケーションとドライバに送信されます。ただし、アプリケーションにevdevインターフェイスを介してアプリケーションを取得させることは可能です。EVIOCGRABioctl()をご覧ください。これにより、特定のアプリケーションがその特定のデバイスからイベントを受信することのみが許可されます。あなただけにしてすべてイベントをキャプチャ思われる、事前にデバイスをつかむことができます -

そのアプローチの問題は、あなたが実際にそれが受信され後に伝播されることから特定のイベントを防ぐことができないということです。したがって、フィルタの入力イベントを回避するには回避策を使用する必要があります。

私は自分 evmapdデーモンで使用される回避策は、元のデバイスをつかみ、再マッピングキーや様々な他の変更を含め、私は必要なすべての修正、と別のデバイスを提供するために、 uinputサブシステムを使用して関与

...

関連する問題