Управление мышью на удаленном сервере Windows

Мне нужно запустить приложение с графическим интерфейсом на удаленном хосте Windows, а затем выполнить некоторые действия с помощью мыши и клавиатуры. Это следует делать с локального компьютера, не открывая никаких приложений с графическим интерфейсом (например, «Подключение к удаленному рабочему столу»).

Итак, у меня есть скрипт python на удаленном сервере, который выполняет все необходимые мне действия (проверено на локальном компьютере), и я запускаю скрипт через psexec, который успешно открывает приложение с графическим интерфейсом на сервере.

Проблема в том, что когда python пытается программно переместиться и щелкнуть мышью, возникает исключение, потому что нет экрана.

Действия с клавиатурой (Ctrl-A, Ctrl-C, Ctrl-V) выполняются успешно.

Вот код, который я использую для имитации щелчка мышью, но, как я уже упоминал, он не работает на сервере, потому что на самом деле нет экрана.

win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

Может ли кто-нибудь предложить мне решение?


person Ashot Khachatryan    schedule 29.05.2016    source источник
comment
Итак, что вы пытались до сих пор решить для задачи, которую вы просите нас решить?   -  person Torxed    schedule 29.05.2016
comment
@Torxed Я не прошу вас ничего решать за меня, я прошу совета. Я пробовал win32api для программной имитации щелчка мыши, но, как я уже упоминал, из-за отсутствия экрана это не сработало. win32api.SetCursorPos((x,y)) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)   -  person Ashot Khachatryan    schedule 29.05.2016
comment
Это намного лучше. Прежде чем вы попросили нас предложить вам решение, которое в основном основано либо на мнении, либо вы просите нас сделать код для вас - и то, и другое здесь не разрешено (читайте FAQ) :) Но это намного лучше, добавьте этот код в ваш вопрос.   -  person Torxed    schedule 29.05.2016
comment
Ты делаешь это неправильно. Используйте автоматизацию пользовательского интерфейса вместо имитации ввода.   -  person IInspectable    schedule 29.05.2016


Ответы (1)


Попробуйте напрямую подключиться к user32.dll через ctypes и оттуда использовать функции управления мышью. Возможно, проблема win32types в том, что он в основном статически связан с MS API. Поэтому он запрограммирован для среды рабочего стола.

Кроме того, вы можете попробовать модуль pymouse, который вы можете найти на pypi.python.org, конечно, он делает то же самое, что я предложил выше.

person Dalen    schedule 29.05.2016