Как мы имитируем щелчок мыши с помощью Xlib / C? - PullRequest
8 голосов
/ 07 января 2012

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

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

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

Ответы [ 3 ]

4 голосов
/ 08 января 2012

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

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

... и добавьте "-lXtst" в строку LDFLAGS в Makefile.

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

Спасибо, Р.

3 голосов
/ 07 января 2012

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

2 голосов
/ 16 января 2016

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

#!/bin/sh
xdotool mousemove x y
xdotool click 1
...