我正在尝试获取远程桌面类型客户端的所有键盘事件。我不希望 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)被抓住了由开箱。我注意到 FreeRDP 做了这样的事情:
int input_mask =
KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
VisibilityChangeMask | FocusChangeMask | StructureNotifyMask |
PointerMotionMask | ExposureMask | PropertyChangeMask;
XSelectInput(display, winId(), input_mask);
除了上面的代码之外,我已经尝试过了,但它不起作用。
我还注意到 Remmina 使用 gdk_device_grab 但由于我的应用程序不是 GTK 应用程序,因此我不能调用它。任何人都可以帮忙吗?