在Linux中使用Qt应用程序获取键盘

时间:2012-04-28 01:09:33

标签: linux qt xorg

我正在尝试抓取远程桌面型客户端的所有键盘事件。我不希望像ALT-Tab这样的东西被Gnome3 / KDE / Openbox / etc ...桌面抓住,我希望我的应用程序能够让所有这些事件和其他应用程序无法获得该事件。

我现在正在做这样的事情:

grabKeyboard() // qt function
Display *display = XOpenDisplay(NULL);
XGrabKeyboard(display, winId(), True, GrabModeAsync, GrabModeAsync, CurrentTime);

实际上似乎可以正常使用ALT-Tab,但在Openbox中有一堆键盘快捷键定义为“显示桌面”(ALT-CTRL-END)和“重置X”(CTRL-ALT-R)正在被Openbox抓住。我注意到FreeRDP做了这样的事情:

int input_mask =
            KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
            VisibilityChangeMask | FocusChangeMask | StructureNotifyMask |
            PointerMotionMask | ExposureMask | PropertyChangeMask;
XSelectInput(display, winId(), input_mask);

除了我上面的代码之外,我已经尝试了它,但它不起作用。

我也注意到Remmina使用gdk_device_grab,但由于我的应用程序不是GTK应用程序,我无法调用它。有人可以帮忙吗?

0 个答案:

没有答案