我正在用 c 编写一个应用程序,它将使用 Xlib、GTK。 我想创建一个热键来中断应用程序的事件并将其置于休眠状态。
我已经阅读了一些资料,但我相信我不能使用: X抓取键 因为窗口管理器正在运行并且已经在运行了
当应用程序没有焦点时,是否有任何其他方法可以从 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 **:程序“test”收到 X Window System 错误。 这可能反射(reflect)了程序中的错误。 错误是“BadAccess(尝试访问私有(private)资源被拒绝)”。 (详细信息:序列号 7 error_code 10 request_code 33 minor_code 0) (程序员注意:通常情况下,X 错误是异步报告的; 也就是说,您将在导致错误一段时间后收到错误。 要调试您的程序,请使用 --sync 命令行运行它 更改此行为的选项。然后你可以得到一个有意义的 如果你中断 gdk_x_error() 函数,从你的调试器回溯。) 中止...
谢谢
最佳答案
这意味着另一个程序已经绑定(bind)了 Control+Shift+"-"。尝试捕获另一个组合键。
关于c - Xlib 的全局热键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816364/