使用 xlib 的全局热键
global hotkeys using xlib
我试图让我的 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
您永远不会调用 XNextEvent()
,因为 while(0)
循环永远不会运行。 (您的意思可能是 while(1)
!)
我试图让我的 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
您永远不会调用 XNextEvent()
,因为 while(0)
循环永远不会运行。 (您的意思可能是 while(1)
!)