2

为什么 XWarpPointer 只工作一次?

当我运行时:

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>

int main()
{
  Display *dpy = XOpenDisplay(0);
  while (1) {
    Window root_window;
    root_window = XRootWindow(dpy, 0);
    XSelectInput(dpy, root_window, KeyReleaseMask);
    XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, 100, 100);
    XSync(dpy, False);
  }
}

鼠标应该锁定在一个位置。但它只移动鼠标一次,然后让我在循环仍在运行时移动它。是什么导致 XWarpPointer 只运行一次?它是某种 X11 功能来保护用户免受应用程序的侵害吗?

仅供参考,我在 Mac OSX 10.6 上的 VMWare Fusion 上运行 RHEL 5.2。

更新:

  • 运行二进制文件时,按钮或图标等组件会闪烁,但可视鼠标光标停留在我移动它的位置。
  • 在 XWarpPointer 工作一次之后,当我移动鼠标时,光标会跳到我扭曲它之前的位置附近。就好像有一个 (last_x,last_y) 没有更新。
  • 当我通过 OpenVMTools 更改指针时,它似乎使指针更多地粘在所需的位置,但视觉指针并没有改变。

谢谢,陈兹

4

2 回答 2

1

XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, 100, 100);

尝试

XFlush(dpy);

这应该可以解决问题。

于 2014-06-05T23:27:04.197 回答
1

我在这里没有经验,但是如果您不丢弃 XSync 中的事件会发生什么?例如XSync(dpy, True);

于 2011-05-01T14:41:30.210 回答