gpt4 book ai didi

xlib - XSelectInput 不适用于 ButtonPressEvents,怎么办?

转载 作者:行者123 更新时间:2023-12-02 02:01:39 70 4
gpt4 key购买 nike

我正在用 C 编写一个简单的程序,我想在其中捕获发生的所有鼠标和键盘事件。
我尝试使用“XGrabPointer”,但它导致屏幕锁定,我无法转到其他应用程序。
我尝试使用“XSelectInput()”,现在我成功接收了键盘事件,但没有收到任何鼠标点击事件。

知道我该怎么做吗?

代码片段如下:

#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>

int main(int argc, char **argv)
{
Display *dpy;
Window root;
unsigned long event_mask;
event_mask = FocusChangeMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask;
if((dpy = XOpenDisplay(NULL)) == NULL) {
perror(argv[0]);
exit(1);
}
dpy = XOpenDisplay(NULL);
root = XDefaultRootWindow(dpy);

int state;
XWindowAttributes attributes;

XGetInputFocus(dpy,&root,&state);
printf("window id = %d\n");
XSelectInput(dpy,root,event_mask);


XEvent ev;
while(1) {


XNextEvent(dpy, &ev);
if(ev.type==ButtonRelease){
printf("button release\n");
}

if (ev.type== KeyPress) {
printf("keypress event\n");
}


}

return 0;

}

最佳答案

当您使用根窗口时,可能还有其他东西获取事件,以确保获取所有事件,您需要捕获鼠标,但没有其他任何东西可以获取事件,因此您需要一种退出方式,例如 q 键这个例子:

#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>

int main(int argc, char **argv)
{
Display *dpy;
Window root;
unsigned long event_mask;
event_mask = KeyReleaseMask | ButtonReleaseMask;
if((dpy = XOpenDisplay(NULL)) == NULL) {
perror(argv[0]);
exit(1);
}
dpy = XOpenDisplay(NULL);
root = XDefaultRootWindow(dpy);

XGrabPointer(dpy, root, False, ButtonReleaseMask, GrabModeAsync,
GrabModeAsync, None, None, CurrentTime);

int state;
XWindowAttributes attributes;

XGetInputFocus(dpy,&root,&state);
printf("window id = %d\n");
XSelectInput(dpy,root,event_mask);


XEvent ev;
while(1) {


XNextEvent(dpy, &ev);
printf("Type: %d\n", ev.type);

if(ev.type==ButtonRelease){
printf("button release\n");
}

if (ev.type== KeyRelease) {
printf("keypress event\n");
if (XLookupKeysym(&ev.xkey, 0) == XK_q) {
exit(0);
}

}


}

return 0;

}

关于xlib - XSelectInput 不适用于 ButtonPressEvents,怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16977872/

70 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com