如何在Linux下使用C程序在光標位置設置鼠標光標位置? 謝謝:) (如setcursorpos()在WIN)如何在C上設置鼠標光標位置?
編輯: 我試過這個代碼,但不工作:
#include <curses.h>
main(){
move(100, 100);
refresh();
}
如何在Linux下使用C程序在光標位置設置鼠標光標位置? 謝謝:) (如setcursorpos()在WIN)如何在C上設置鼠標光標位置?
編輯: 我試過這個代碼,但不工作:
#include <curses.h>
main(){
move(100, 100);
refresh();
}
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.
謝謝,但它不起作用:我編輯XWarpPointer的第二個參數從NULL到None,編譯時沒有錯誤,但光標不移動 – frx08 2010-03-12 16:14:10
它也沒有爲我編譯,我認爲這是因爲缺少庫。我嘗試過包括@Achernar提到的庫,但是我的編譯器仍然找不到對XOpenDisplay和其他庫調用的引用。 我包括他們如下(當然,不是一條線,而是我無法格式化我的意見): '#包括
原來,您必須確保在編譯時鏈接X庫。 'gcc text.cpp -lX11 -o t' – Seanny123 2013-07-22 03:31:11
所有現代終端應該支持ANSI escape sequences。然而,對於任何更復雜(更便攜)的東西,您應該使用庫,如ncurses。
可以使用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;
你要編寫使用通話功能XWarpPointer
的點移動到一個相對或全球位置的X11 program。 (Xlib編程手冊,第1卷)
一般來說,使用Xlib編程X Window系統是Unix或Linux系統上圖形編程的最基本和最低級的接口。現在開發的大多數應用程序都使用更高級別的庫,如GTK或Qt開發其GUI應用程序。 Curses或NCurses(New Curses)用於編程面向終端的接口,因此在這種情況下無用。
這是舊的,但以防其他人遇到此問題。 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;}
哦對!謝謝:)我會更新我的答案。 – 2010-07-25 09:51:42
使用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;
}
xdo_mousemove() - > xdo_move_mouse()https://github.com/jordansissel/xdotool/blob/master/xdo.h#L238 – 2016-03-14 04:55:39
你的光標位置......在哪?一個X窗口?終端窗口? VI? – 2010-03-12 14:47:15
在一個X窗口..但我沒有得到光標位置,我必須設置它在屏幕上的任何地方 – frx08 2010-03-12 14:48:24
(我已經編輯你的問題,你真的想這樣做,當你回答我的評論。)你會看到具體的價值。 :-)現在你有三個與問題完全無關的答案(它們都是關於在終端窗口中設置光標位置的)。 – 2010-03-12 14:57:13