我想知道将使用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()函数,则从你的调试器中回溯。) 中止...
感谢
答案 0 :(得分:0)
这意味着另一个程序已经绑定了Control + Shift +“-”。尝试获取另一个组合键。