微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C上设置鼠标光标位置?

我如何在Linux下使用C程序在X窗口中设置鼠标光标的位置? 谢谢:)(如WIN中的setcursorpos())

编辑:我试过这段代码,但不起作用:

#include <curses.h> main(){ move(100,100); refresh(); }

如何判断VB6中菜单项的位置?

如何在Windows 7 / Vista上以编程方式装载WebDAV共享,无需分配盘符?

Nginx的。 如果为空URI。 如果空域。 位置。 正则expression式

C# – 如何访问WLAN信号强度和其他?

如何匹配Nginx中扩展less的文件的位置?

获取文件的扇区位置

Apacheconfiguration – 从authentication中排除位置

Nginx的位置,别名,重写,根

如何在windows .bat脚本中查看32位Program Files文件夹的位置

如何获取terminal中的光标位置?

12.4 – 移动指针

尽管指针的移动通常应该由最终用户来控制,但是有时在程序控制下有必要将指针移动到新的位置。

要将指针移动到窗口中的任意点,请使用XWarpPointer() 。

例:

display *dpy; Window root_window; dpy = XOpendisplay(0); root_window = XRootwindow(dpy,0); XSelectInput(dpy,root_window,keyreleaseMask); XWarpPointer(dpy,None,100,100); XFlush(dpy); // Flushes the output buffer,therefore updates the cursor's position. Thanks to Achernar.

这是旧的,但万一有人遇到这个问题。 tusbar提供的答案是正确的,但必须在最后添加命令XFlush(dpy)来更新光标的位置。 需要的库有:X11 / Xh,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,100); XFlush(dpy); return 0;}

您要编写一个X11程序 ,使用调用XWarpPointer函数将该点移动到相对或全局位置。 (Xlib编程手册,第1卷)

一般来说,使用Xlib来编程X Window系统,是在Unix或Linux系统上进行图形编程的最基本和最底层的接口。 现在开发的大多数应用程序都使用更高级别的库(如GTK或Qt)来开发GUI应用程序。

Curses或NCurses(New Curses)用于编程面向终端的接口,所以在这种情况下是没有用的。

您可以使用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;

使用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,Button1,1,0); } void mouse_left_double_click(int x,0); xdo_click_multiple(xdo,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; }

所有的现代终端都应该支持ANSI转义序列 。 对于任何更复杂(更便携)的东西,你应该使用一个库,比如ncurses 。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐