如何在Linux下使用C程序在X窗口中设置鼠标光标位置? 谢谢 :) (如WIN中的setcursorpos())
编辑: 我尝试过这段代码,但不起作用:
#include <curses.h>
main(){
move(100, 100);
refresh();
}
答案 0 :(得分:33)
12.4 - Moving the Pointer
虽然指针移动了 通常应该留给控件 最终用户,有时是 将指针移动到新的必要条件 在程序控制下的职位。
将指针移动到任意位置 在窗口中指向,使用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.
答案 1 :(得分:11)
答案 2 :(得分:4)
您想要编写一个使用调用X11 program函数的XWarpPointer
来将该点移动到相对位置或全局位置。 (Xlib编程手册,第1卷)
通常,使用Xlib对X Window系统进行编程,是Unix或Linux系统上最基本,最低级的图形编程接口。现在大多数应用程序使用更高级别的库(例如GTK或Qt)来开发GUI应用程序。
Curses或NCurses(New Curses)用于编程面向终端的接口,因此在这种情况下无用。
答案 3 :(得分:3)
您可以使用XWarpPointer在X窗口中移动鼠标光标。
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;
答案 4 :(得分:3)
使用Jordan Sissel的优秀实用工具xdotool。
http://www.semicomplete.com/projects/xdotool/
它提供了像xdo_mousemove()这样的XWarpPointer包装函数,这里有一些例子:
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;
}
答案 5 :(得分:2)
所有现代终端都应支持ANSI escape sequences。但是,对于任何更复杂(更便携)的内容,您应该考虑使用ncurses等库。