2016-05-19 24 views
0

マウスがXサーバー上のどこにでも移動されたか、キーボードイベントが発生したかどうかを検出する方法はありますか? X11入力デバイスで何かをやっているユーザーに反応する必要があります。X11:一般的なマウスとキーボードのイベントを検出する

GTKを使用して自分のウィンドウでイベントを検出することしかできませんでした。

私ははい、あなたはXinput2拡張子を使用してこれを行うことができます

答えて

1

(それは完全なコードである必要はありません、エントリポイントは十分だろう!)すべての情報については感謝しています。カーソルイベントのためにこれを行う、完全ではあるが小さいツールは、here (unclutter-xfixes)です。免責事項として、私はそのツールの著者です。

というチュートリアル形式のもう1つの優れたリソースが見つかりました。 XInput2を使用して

は、複数の利点があります。

  • は希望すべてのウィンドウの上にマウスイベントを選択するように/ブレークアプリケーションに干渉しない、絶えず位置をポーリングする必要はありません(効率的なリソース)。あなたはが簡単にXinput2を使用して取得しない

は、正確な位置(あなたがそれを必要とするときがありますが、それを照会することができます)ですが、私の理解では、とにかくそれを必要としないということです。

あなたは、私がここに表示されません拡張子を、ロードされたら、あなたはこのようなすべてのイベントを選択することができます:あなたのイベントキューに

XIEventMask masks[1]; 
unsigned char mask[(XI_LASTEVENT + 7)/8]; 

memset(mask, 0, sizeof(mask)); 
XISetMask(mask, XI_RawMotion); 
XISetMask(mask, XI_RawButtonPress); 
XISetMask(mask, XI_RawKeyPress); 

masks[0].deviceid = XIAllMasterDevices; 
masks[0].mask_len = sizeof(mask); 
masks[0].mask = mask; 

XISelectEvents(display, DefaultRootWindow(display), masks, 1); 
XFlush(display); 

を、あなたは今、対応するイベントを探すことができます。

+0

うわー、ありがとう!入力を生成したデバイスを取得する方法もありますか?たとえば、XTESTによって作成されたデバイスだけをブロックする場合などです。 – Nidhoegger

+0

@Nidhoegger 'XGetEventData'を使ってイベントからデータを取得し、このデータが意味するものの拡張仕様を読み込みます。私はあなたが情報(deviceid)を得ていると仮定しますが、それを見ていません。上記のツールunclutter-xfixesは、キュー上のイベントを識別する方法と 'XGetEventData'を呼び出す方法を示します。あとで 'XFreeEventData'も呼び出すことを忘れないでください。 –

関連する問題