6

我正在尝试获取远程桌面类型客户端的所有键盘事件。我不希望 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 应用程序,因此我不能调用它。任何人都可以帮忙吗?

4

0 回答 0