gpt4 book ai didi

使用 Xlib 捕获鼠标

转载 作者:太空狗 更新时间:2023-10-29 17:21:38 26 4
gpt4 key购买 nike

我想写一个简单的 Xlib 程序来改变鼠标的行为(举个例子,反转垂直移动)。我在捕获事件时遇到问题。

我想要代码

  • 捕获 Controller 位置的变化(我向上移动鼠标,MotionEvent)
  • 计算新的光标位置(new_x -= difference_x)
  • 设置新的光标位置(向下移动指针,XWarpPointer,防止此处产生事件)

下面的代码应该在每次移动鼠标时捕获一个运动事件,但它仅在指针从一个窗口移动到另一个窗口时才生成事件...如何捕获所有移动事件?

#include "X11/Xlib.h"
#include "stdio.h"

int main(int argc, char *argv[])
{
Display *display;
Window root_window;
XEvent event;

display = XOpenDisplay(0);
root_window = XRootWindow(display, 0);
XSelectInput(display, root_window, PointerMotionMask );

while(1) {
XNextEvent( display, &event );
switch( event.type ) {
case MotionNotify:
printf("x %d y %d\n", event.xmotion.x, event.xmotion.y );
break;
}
}

return 0;
}

相关:

X11: How do I REALLY grab the mouse pointer?

最佳答案

当您的程序接收到鼠标事件时,它会接收到事件的副本;副本也被发送到正在监听这些事件的其他程序(参见 XSelectInput(3) )。不使用 XGrabPointer(3) 就无法覆盖它获得鼠标的独占所有权,这将阻止其他程序接收任何 鼠标事件。简而言之,您实际上无法做您想做的事情。

另请注意,如果客户端在其窗口之一的不传播掩码中指定了 PointerMotion,您将不会在其窗口内收到任何指针运动事件(同样,除非您这样做捕获)。

关于使用 Xlib 捕获鼠标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311270/

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