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