XNextEvent 由于某种原因不起作用
XNextEvent Doesn't works for some reason
我正在尝试使用Xlib捕获关键事件。但是由于某些原因,Xnextevent不起作用。我没有收到任何错误,但是看起来我的程序卡在" Xnextevent"电话的线上。这是我的代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
using namespace std;
int main()
{
XEvent event;
KeySym key;
char text[255];
Display *dis;
dis = XOpenDisplay(NULL);
while (1) {
XNextEvent(dis, &event);
if (event.type==KeyPress && XLookupString(&event.xkey,text,255,&key,0) == 1) {
if (text[0]=='q') {
XCloseDisplay(dis);
return 0;
}
printf("You pressed the %c key!n", text[0]);
}
}
return 0;
}
这不是X11窗口系统的工作方式。
仔细阅读。关键是:
事件的来源是指针所在的可见窗口。
您没有创建窗口,因此您的程序未接收键盘事件。即使您创建了窗口,它也必须具有焦点:
X服务器用于报告这些事件的窗口取决于窗口在窗口层次结构中的位置以及是否禁止任何中间窗口生成这些事件。
工作示例
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
using namespace std;
int main()
{
XEvent event;
Display *dis;
Window root;
Bool owner_events = False;
unsigned int modifiers = ControlMask | LockMask;
dis = XOpenDisplay(NULL);
root = XDefaultRootWindow(dis);
unsigned int keycode = XKeysymToKeycode(dis, XK_P);
XSelectInput(dis,root, KeyPressMask);
XGrabKey(dis, keycode, modifiers, root, owner_events, GrabModeAsync, GrabModeAsync);
while (1) {
Bool QuiteCycle = False;
XNextEvent(dis, &event);
if (event.type == KeyPress) {
cout << "Hot key pressed!" << endl;
XUngrabKey(dis, keycode, modifiers, root);
QuiteCycle = True;
}
if (QuiteCycle) {
break;
}
}
XCloseDisplay(dis);
return 0;
}
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 我有一个应该打印数组的函数,但由于某种原因它不起作用
- 在矩阵逆变器上工作,由于某种原因,我的指数循环不起作用
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 由于某种原因,多维数组不会从函数中更改元素
- "total += i;"由于某种原因不起作用
- C++ 由于某种原因,我无法让模板在链表中工作,我敢打赌这是一个简单的错误,但我就是不明白
- 由于 RPTR->num=30 与 (*rptr).num=30 相同,但是*((*rptr).ptr).name 不起作用为什么?
- 我是初学者,由于某种原因,这不起作用,我正在使用视觉工作室
- XNextEvent 由于某种原因不起作用
- 由于某种原因,使用 OR 运算符执行操作不起作用
- + 由于有条件,运算符不起作用
- 功能不起作用-原因
- 程序由于某种原因挂起
- 为什么 dev C 不运行此脚本?由于某种原因不喜欢我的矢量声明
- 我的最后一个正则表达式不起作用,但我无法弄清楚原因
- 结构由于某种原因不能识别成员
- 由于某种原因,设置函数不起作用