QX11Infoクラスを使用して、QtからX11情報を照会できます。そのドキュメントを参照してください。次に、そこから生のXlibを使用できます。
を使用できますXGrabPointer()
。これを使用すると、ポインターが取得されている間、他のアプリはポインターイベントを受信しません。man XGrabPointer
手伝います。
イベントをサブスクライブする「通常の」方法はXSelectInput()
ウィンドウで使用することですが、問題は、既存のすべてのウィンドウでXSelectInputを呼び出す必要があることです。そのマニュアルページを参照してください...
xxf86dga拡張機能にマウスに関連するいくつかの呼び出しがあることは知っていますが、それらが何をするのかわかりません。
XQueryPointer()
他のウィンドウからイベントを盗むことなくポインターの状態を照会する別の方法です。
私が考えることができる他の唯一の場所はXInput拡張機能ですが、それがあなたにも役立つかどうかはわかりません。
xev
X11イベントの処理に関する適切なリファレンスについては、ソースコードを参照してください:http: //cgit.freedesktop.org/xorg/app/xev
XGrabPointerを使用したサンプルコード:
#include <stdio.h>
#include <assert.h>
#include <X11/Xlib.h>
int main(void)
{
Display *d;
Window root;
d = XOpenDisplay(NULL);
assert(d);
root = DefaultRootWindow(d);
XGrabPointer(d, root, False, ButtonPressMask | ButtonReleaseMask |
PointerMotionMask, GrabModeAsync, GrabModeAsync, None,
None, CurrentTime);
XEvent ev;
while (1) {
XNextEvent(d, &ev);
switch (ev.type) {
case ButtonPress:
printf("Button press event!\n");
break;
case ButtonRelease:
printf("Button release event!\n");
break;
case MotionNotify:
printf("Motion notify event!\n");
break;
default:
printf("Unknown event...\n");
}
}
XCloseDisplay(d);
return 0;
}
使用してコンパイル:gcc x11mouse.c -o x11mouse -lX11