2

重複の可能性: Ubuntu
のC
モニタリングキーボードキーでキーストロークにアクセスする

プログラム内のすべてのキーダウンイベントとキーアップイベント(はい、キーを押すだけでなくキーダウンとキーアップを意味します)と、押されたキーを検出してタイムスタンプを付けたいです。GTKなどのAPiを使用してこれを行うこともできますが、ライブラリからのオーバーヘッドが時間に影響を与えないようにし、コードの記述を減らすために、できるだけシンプルで低レベルにしたいです。

私はしばらくこれをグーグルしていて、これまでのところ、Windowsでそれを行う方法についてたくさんのことを見つけました。これは、Linuxシステムを使用しているので役に立ちません。また、Linuxでキーが押されたことを検出する方法ですが。キーアップキーダウンではありません。

C ++のコマンドラインプログラムを使用してLinuxシステムでキーダウンイベントとキーアップイベントをキャプチャするために使用する必要があるシステムコール、ライブラリなどを誰かに教えてもらえますか?また、チュートリアルやコード例へのリンクがある場合は、それをいただければ幸いです。

4

3 に答える 3

3

あなたは生のデバイスを読むことができました、私はこれを試していませんが、このブログ投稿は有望に見えます: https ://web.archive.org/web/20180108194231/http://www.thelinuxdaily.com/2010/05/grab- raw-keyboard-input-from-event-device-node-devinputevent /(以前はhttp://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from-event-device-node-devinputevent/しかし、そのサイトはオフラインになりました)

つまり、基本的には/ dev / input/*から直接読み取っています。

Xがそのディレクトリにリストされているイベントデバイスの1つである場所を実行することでこれが機能することを確認できますsudo cat /dev/input/eventX(そのうちの1つはキーボードになります。プログラムでどれを見つけるのに良い方法があると確信していますが、すぐに見つけることができます/ dev / input / by-id /を調べるか、それらのシンボリックリンクの1つから直接読み取ることによって。)


注:これにより、ウィンドウにフォーカスがあるときだけでなく、常にキーボード入力が可能になります(プログラムは、xtermで実行する必要はなく、さらに言えば、ptyでさえ実行する必要はありません)。

于 2012-10-22T19:28:25.617 に答える
2

現実的には、ライブラリなしではこれを行うことはできません。オーバーヘッドが非常に少ないものが必要な場合は、ncursesをお勧めします。どうしてもライブラリなしでそれを行わなければならない場合は、ncursesがそれをどのように実装するかを見てください。もちろん、それは非常に複雑になります。

于 2012-10-22T19:25:42.787 に答える
0

OIS(Object Oriented Input System)ライブラリを見てみようと思います。非常に使いやすく、優れたOOデザインを備えており、クロスプラットフォームです。チュートリアルといくつかのコードについては、http://www.ogre3d.org/tikiwiki/tiki-index.php?page = Using+OISをご覧ください

于 2012-10-22T20:13:03.533 に答える