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

dgr*_*ant 6 linux qt xorg

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

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

grabKeyboard() // qt function
Display *display = XOpenDisplay(NULL);
XGrabKeyboard(display, winId(), True, GrabModeAsync, GrabModeAsync, CurrentTime);
Run Code Online (Sandbox Code Playgroud)

这实际上似乎与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);
Run Code Online (Sandbox Code Playgroud)

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

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