【问题标题】:global hotkeys using xlib使用 xlib 的全局热键
【发布时间】:2015-11-13 00:34:20
【问题描述】:

我试图让我的 C 应用程序在按下 ctrl+k 按钮时执行某些任务(或 CTRL SHIFT K 还不确定),文档有点稀缺,但我能够找到一个 cpp 示例并尝试过模仿该代码:

 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, keycode, modifiers, root, 0, pointer_mode, keyboard_mode);
  XSelectInput(dpy, root, KeyPressMask);
  while(0)
  {
    XNextEvent(dpy, &ev);
    if (ev.type == KeyPress)
      printf("key has been pressed\n");
  }

我知道按键被 XGrabKey 函数捕获,xnext 事件读取事件并将其存储在 ev 中,我将类型与按键 Xevent 类型进行比较,消息没有被打印,我试过了ctrl+k 和 shift+k 和 ctrl+shift+k

【问题讨论】:

  • 你程序中的循环真的是while(0)吗?
  • 不应该继续阅读事件吗?无限循环?
  • 我刚刚注意到!!!!!

标签: c linux xlib


【解决方案1】:

您永远不会调用XNextEvent(),因为while(0) 循环永远不会运行。 (你的意思可能是while(1)!)

【讨论】:

    猜你喜欢
    • 2016-02-22
    • 2011-05-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2011-03-15
    • 2018-12-21
    相关资源
    最近更新 更多