Как заставить работать SendKeys через RDP?
Для сохранения активного десктопа можно использовать VNC (например, мы пользуем TightVNC в качестве клиента и сервера) вместо RDP. Только, если всё же зашли по RDP, то потом надо перезагрузить сервер, чтобы VNC сессия нормально работала. А ещё скрипт на сервере нельзя запускать как сервис (из сервиса активный GUI context недоступен). Для VNC, возможно, ещё потребуется обновить видеодрова, т.к. он отображает реальный выход с видеокарты в отличие от виртуального RDP.
Что касается pywinauto, то там SendKeys как раз использует системную функцию SendInput. В ветке UIA на гитхабе (релиз запланирован на июль) уже есть метод send_chars(...), который посылает WM_CHAR через SendMessage (работает для свёрнутого окна и при залоченной винде). Но этот метод нужно использовать для конкретного окна, а не просто глобально для системы. Пример:app = Application().start('notepad.exe')
app.UntitledNotepad.Edit.send_chars('Hello World!') # не нужен GUI context
app.UntitledNotepad.Edit.type_keys('\nTyping to the active window...', with_newlines=True) # нужен GUI context
Вызов метода для конкретного контрола ещё и автоматически ждёт, когда окно/контрол реально появится и будет готов к вводу.
ожидание сделайте между строкой где запускается приложение и SendKeys()
from time import sleep
...
sleep(3)
...
думается мне, все работает как надо, но, как сказали выше, текст отправляется в текущее активное окно, а на момент когда передаются нажатия клавиш, блокнот просто не успевает открыться и оказаться в фокусе
а нажатия клавиш передаются, полагаю, пустому рабочему столу, где, разумеется, не вызывают никакой реакции на себя