LINUX.ORG.RU

Uinput передвижение мыши

 , ,


2

5

Привет,

Мне нужно написать функции, которые двигают курсор, кликают мышкой. До некоторого момента, реализовывал это через Xtst, X11 - работало. Сейчас на ноутбуке имею Debian с Wayland и соотвественно работать перестало. Нашел решение в виде uinput. Набросал пару функции. И тут в чем особенность поведения - он один раз , ПЕРВЫЙ, передвинул. Под первым имею в виду первую запись в дескриптор uinput. Потом перестает. Клики мышки также работают, но только один раз.

Вот код : https://pastebin.com/zF5KKTVC

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

https://gist.github.com/regular-dev/7a214f8b52911a63afe803693d467863

Помогите люди добрые !



Последнее исправление: xionovermazes (всего исправлений: 1)

Судя по твоей пасте ты мышь постоянно в одно и то же место двигаешь.

Попробуй в цикле менять координаты, которые ты передаешь в mouseSetPosition.

P.S. Сдается мне, что на входе устройство ожидает не координаты курсора, а координаты мыши.

trex6 ★★★★★
()

using namespace std;
struct uinput_user_dev uidev;

Любишь намазывать сишечку поверх крестов?

По делу.
Запустил под иксами. Работает, но пришлось сделать правки. Чтобы позиция курсора менялась:

for (int i = 0 ; i < 5 ; ++i)
{
    cout << "x : " << i * 1920 / 4 << "\n";
    mouseSetPosition(i * 1920 / 4, 400);
    sleep(1);
}
Но курсор доходил примерно только до середины экрана. Но после изменения вот тут:
uidev.absmax[ABS_X] = 1920; // Было 3000
всё отработало нормально. У меня разрешение экрана 1920x1080.

ox55ff ★★★★★
()
Ответ на: комментарий от trex6

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

xionovermazes
() автор топика
Ответ на: комментарий от ox55ff

Да работает, но я не менял ABS_X на 1920. Т.е. до этого не работало, когда я ставил постоянно одну и туже координату. Посмотри мой пост выше, т.е. я не двигал мышкой, а она в это положение, которая я задаю, после первого раза вовращаться не хотела.

Если не сложно протестируй. Задай статические координаты в цикле, и после того как курсор поменяет свой положение, подвигай мышкой, поменяет ли он положение еще раз.

xionovermazes
() автор топика
Ответ на: комментарий от xionovermazes

Код из gist. Поведение как и у тебя. Первый раз координата меняется, но после ручного перемещения перестаёт работать.

ox55ff ★★★★★
()
Ответ на: комментарий от xionovermazes

Если мое предположение верно, то ты передаешь в устройство координаты «мышки», а не курсора. Потом ты двигаешь другую «мышку», она сдвигает курсор. Но(!) «виртуальная мышка» постоянно репортит старые координаты, т.е. не двигается, т.е. не сдвигает курсор.

Просто попробуй все премя разные координаты слать и посмотрим что получиться. Например: все время увеличивать координату (х) для «виртуальной мышки» и менять положения курсора реальной «мышкой».

trex6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.