2012-01-07 33 views
7

Tất cả,Làm cách nào để mô phỏng nhấp chuột với Xlib/C?

Tôi không thể tin rằng câu hỏi này khó trả lời như vậy. Tôi đã được Googling trong hai giờ qua và không thể tìm thấy bất cứ điều gì hoạt động. Tất cả những gì tôi muốn làm là tìm mã C/Xorg để 'nhập' một nút bấm chuột trái. Tôi mong đợi một dòng mã nhưng những thứ duy nhất tôi tìm thấy được viết bằng C dài khoảng hai chục dòng và chúng không hoạt động: (Dường như nó có thể được thực hiện trong Windows, nhưng tôi đang dùng Linux

Lý do cho câu hỏi là tôi đã viết một tiện ích cho phép tôi di chuyển con trỏ chuột giữa nhiều màn hình bằng bàn phím. Vấn đề duy nhất là nếu tôi chuyển đến vị trí mà cửa sổ abc đã từng sử dụng một cửa sổ xyz khác đã được tải lên trên cùng một vị trí đó, con trỏ chuột di chuyển đến xyz tốt, nhưng xyz không có tiêu điểm - cho đến khi tôi nhấp chuột trái, vì vậy, tôi muốn xây dựng 'click' vào Mã số

Mã tôi đã thử không hoạt động dựa trên XSendEvent().

+0

+1 để bao gồm lý do ** bạn muốn thực hiện việc này. –

+0

nếu bạn không muốn tiếp cận chuột, bạn nên cân nhắc sử dụng trình quản lý cửa sổ hỗ trợ loại điều này. Tôi có thể giới thiệu xmonad, nhưng có những người khác. –

Trả lời

2

Tại sao không chỉ trực tiếp nâng cao/tập trung cửa sổ thay vì cố gắng tạo sự kiện nhấp chuột giả mạo? Điều đó sẽ đáng tin cậy hơn nhiều và hoạt động với tất cả các trình quản lý cửa sổ, thậm chí là các trình quản lý không nhấp để tập trung.

+0

R: Toàn bộ điểm của bài tập để có thể di chuyển giữa các màn hình với nhau. phải chạm vào chuột, vì vậy nếu tôi có thể di chuyển con trỏ qua KB, nhưng phải tiếp cận chuột để nhấp chuột trái, thì toàn bộ điều trở nên vô nghĩa một chút. Tất nhiên không có vấn đề gì khi di chuyển giữa các cửa sổ trên cùng một màn hình, nhưng khi cố gắng di chuyển từ màn hình này sang màn hình khác, không có lối tắt được tạo sẵn mà tôi có thể tìm thấy. –

+0

Di chuyển con trỏ chuột như bạn đang làm, nhưng sau đó gửi nâng cao/tập trung hơn là nhấp chuột. –

+0

Ý tưởng hay! Có vẻ như Alt + Esc thực hiện điều đó. Bây giờ tôi chỉ cần tìm hiểu cách gửi nó. –

2

Có, tôi đã hiểu nhiều hơn hoặc ít hơn. Dù sao có vẻ như đây là cách:

{ 
#include <X11/extensions/XTest.h> 
XTestFakeButtonEvent(display, 1, True, CurrentTime); 
XTestFakeButtonEvent(display, 1, False, CurrentTime); 
XFlush(display); 
} 

... và thêm "-lXtst" vào dòng LDFLAGS trong Makefile.

Xlib có vẻ rất đẫm máu. Tôi đã có lời khuyên để sử dụng các thư viện khác, tôi muốn tôi biết làm thế nào để đi về thay đổi hơn.

Cảm ơn R.

2

xdotool là cách dễ dàng để thực hiện việc này. Đó là một công cụ dòng lệnh. Bạn có thể sử dụng nó trong các kịch bản đơn giản. Ví dụ:

#!/bin/sh 
xdotool mousemove x y 
xdotool click 1 
+0

Cảm ơn, đó là một chương trình thú vị, có vẻ tốt hơn so với 'di chuyển của tôi', tho của tôi có lẽ tốt hơn cho việc di chuyển chuột đơn giản. –

Các vấn đề liên quan