2

XWarpPointer が 1 回しか機能しないのはなぜですか?

私が実行すると:

#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);
  }
}

マウスは 1 つの位置にロックされているように見えるはずです。しかし、それはマウスを一度だけ動かすだけで、ループがまだ実行されている間にマウスを動かすことができます。XWarpPointer が 1 回しか実行されない原因は何ですか? ユーザーをアプリケーションから保護するのは、ある種の 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 に答える