如何在Linux下使用C程序设置X窗口中的鼠标光标位置? 感谢 :) (类似于WIN中的setcursorpos())
编辑: 我尝试了这段代码,但没有成功:
#include <curses.h>
main(){
move(100, 100);
refresh();
}
如何在Linux下使用C程序设置X窗口中的鼠标光标位置? 感谢 :) (类似于WIN中的setcursorpos())
编辑: 我尝试了这段代码,但没有成功:
#include <curses.h>
main(){
move(100, 100);
refresh();
}
12.4 - 移动指针
尽管通常应该将指针的移动留给最终用户控制,但有时需要在程序控制下将指针移动到新位置。
要将指针移动到窗口中的任意点,请使用 XWarpPointer()。
示例:
Display *dpy;
Window root_window;
dpy = XOpenDisplay(0);
root_window = XRootWindow(dpy, 0);
XSelectInput(dpy, root_window, KeyReleaseMask);
XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, 100, 100);
XFlush(dpy); // Flushes the output buffer, therefore updates the cursor's position. Thanks to Achernar.
#include <stdio.h> #include <X11/X.h> #include <X11/Xlib.h> #include <X11/Xutil.h>
有什么想法吗? - Seanny123gcc text.cpp -lX11 -o t
- Seanny123这篇文章已经有点老了,但如果有其他人遇到类似的问题,我想说: tusbar 提供的答案是正确的,但必须在最后加入 XFlush(dpy) 命令以更新光标位置。所需库文件为: X11/X.h,X11/Xlib.h ,X11/Xutil.h。
int main(int argc, char *argv[]){
//Get system window
Display *dpy;
Window root_window;
dpy = XOpenDisplay(0);
root_window = XRootWindow(dpy, 0);
XSelectInput(dpy, root_window, KeyReleaseMask);
XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, 100, 100);
XFlush(dpy);
return 0;}
提示:你可以使用这个命令来构建代码 gcc main.c -lX11
XWarpPointer
函数来将点移动到相对或全局位置。 (Xlib编程手册,第1卷)使用Jordan Sissel的优秀实用工具xdotool。
http://www.semicomplete.com/projects/xdotool/
它提供了XWarpPointer包装函数,如xdo_mousemove(),以下是一些示例:
Display *display = NULL;
xdo_t *xdo = NULL;
void mouse_left_down(int x, int y)
{
xdo_mousemove(xdo, x, y, 0)
xdo_mousedown(xdo, CURRENTWINDOW, Button1);
}
void mouse_left_up(int x, int y)
{
xdo_mouseup(xdo, CURRENTWINDOW, Button1, 1, 0);
}
void mouse_left_double_click(int x, int y)
{
xdo_mousemove(xdo, x, y, 0);
xdo_click_multiple(xdo, CURRENTWINDOW, Button1, 1, 0);
doubleclick = TRUE;
}
int main()
{
display = XOpenDisplay(NULL);
if(display == NULL)
{
fprintf(stderr, "can't open display!\n");
return -1;
}
xdo = xdo_new((char*) display);
//some task here
// ...
return 0;
}
XWarpPointer(display, src_w, dest_w, src_x, src_y, src_width, src_height, dest_x,
dest_y)
Display *display;
Window src_w, dest_w;
int src_x, src_y;
unsigned int src_width, src_height;
int dest_x, dest_y;