Xlib的全局热键

时间:2015-11-19 23:35:14

标签: c linux gtk xlib

我想知道将使用Xlib,GTK的应用程序。 我想创建一个热键,它应该从它的活动中断应用程序并将其置于休眠状态。

我做了一些阅读,我相信我不能用: XGrabKey 因为窗口管理器正在运行并且已经在执行

是否还有其他方式来自gtk或Xlib当应用程序没有焦点时,我可以按下组合键向我的应用程序发送订单?

我正在尝试以下代码,但它无效:

Display* dpy = XOpenDisplay(0);
    Window root = DefaultRootWindow(dpy);
    XEvent ev;
    unsigned int modifiers = ControlMask | ShiftMask;
    int keycode = 45;
    int pointer_mode = GrabModeAsync;
    int keyboard_mode = GrabModeAsync;
    XGrabKey(dpy, AnyKey, modifiers, root, 0, pointer_mode, keyboard_mode);
    XSelectInput(dpy, root, KeyPressMask);
    while(1)
    {
      XNextEvent(dpy, &ev);
      if (ev.type == KeyPress)
      {
        printf("key has been pressed\n");
        break;
      }
      else printf("event type is %i\n",ev.type);

    }

但我明白了: Gdk-ERROR **:该计划'测试'收到X Window System错误。 这可能反映了程序中的一个错误。 错误是“BadAccess(尝试访问私人资源被拒绝)'”。   (详细信息:serial 7 error_code 10 request_code 33 minor_code 0)   (程序员注意:通常,X错误是异步报告的;    也就是说,你会在造成错误一段时间后收到错误。    要调试程序,请使用--sync命令行运行它    用于更改此行为的选项。然后你就可以获得有意义的了    如果你打破了gdk_x_error()函数,则从你的调试器中回溯。) 中止...

感谢

1 个答案:

答案 0 :(得分:0)

这意味着另一个程序已经绑定了Control + Shift +“-”。尝试获取另一个组合键。