为什么XWarpPointer只能工作一次(在循环中)?

时间:2011-05-01 14:12:27

标签: c x11 cursor-position

为什么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成为了 指针粘在所需的位置 更多,但视觉指针不 变化。

谢谢, Chenz

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

之后

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

尝试

XFlush(dpy);

这应该可以解决问题。

答案 2 :(得分:-2)

XWarpPointer仅将指针移动到指定位置。它不会阻止它后来移动。