2012-01-07 3 views
7

Все,Как имитировать щелчок мышью с помощью Xlib/C?

Я не могу поверить, что этот вопрос так же трудно ответить, как есть. Я работаю в Google за последние два часа и не могу найти ничего, что сработает. Все, что я хочу сделать, это найти код C/Xorg, чтобы «ввести» левой кнопкой мыши. Я ожидал бы одной строки кода, но единственные вещи, которые я нашел на C, - это около двух десятков строк, и они все равно не работают :(Кажется, это можно сделать в Windows, но я в Linux

Причина в том, что я написал утилиту, которая позволяет мне перемещать указатель мыши между несколькими экранами с помощью клавиатуры. Единственная проблема заключается в том, что если я перейду в место, где было использовано окно abc другое окно xyz было загружено поверх того же самого местоположения, указатель мыши перемещается в xyz просто отлично, но xyz не имеет фокуса - пока я не оставил клик мышью. Итак, я хочу создать «щелчок» в моем код

Код, который я пробовал, не работал на основе XSendEvent().

+0

+1 для включения ** причины ** вы хотите это сделать. –

+0

, если вы не хотите использовать мышь, вы должны использовать диспетчер окон, который поддерживает такие вещи. Я могу порекомендовать xmonad, но есть и другие. –

ответ

2

Почему бы просто не просто поднять/сфокусировать окно, а попытаться сделать фальшивый клик? Это должно быть намного более надежным и работать со всеми оконными менеджерами, даже без кликов.

+0

R: Весь смысл упражнения, чтобы он мог перемещаться между экранами w.o. нужно прикоснуться к мыши, поэтому, если я могу переместить указатель через КБ, но в любом случае вам нужно будет щелкнуть левой кнопкой мыши, тогда все это станет немного бессмысленным. Конечно, нет проблем при перемещении между окнами на одном экране, но при попытке перейти с одного экрана на другой нет встроенного ярлыка, который я могу найти. –

+0

Переместите указатель мыши, как вы делаете, но затем отправьте рейз/фокус, а не нажмите. –

+0

Хорошая идея! Кажется, Alt + Esc делает это. Теперь мне просто нужно выяснить, как отправить это. –

2

Да, я более или менее понял. Во всяком случае, кажется, что это так:

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

... и добавить «-lXtst» в LDFLAGS линии в Makefile.

Xlib кажется настолько кровавым трудно. У меня есть совет по использованию других библиотек, я бы хотел, чтобы я знал, как переходить.

Благодаря Р.

2

xdotool это простой способ сделать это. Это инструмент командной строки. Вы можете использовать его в простых сценариях. Например:

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

Спасибо, это интересная программа, она выглядит лучше, чем моя «movemouse», потому что моя, пожалуй, лучше для простого перемещения мыши. –

Смежные вопросы