Имитация аппаратного нажатия клавиш в скрипте Python при отправке в приложение Citrix (SendKeys не работает) - PullRequest
0 голосов
/ 25 апреля 2018

Я провел большую часть последних двух дней, пытаясь выяснить, как отправить Ctrl-пробел в приложение, работающее на Citrix.Мой сценарий основан на Python, и я пробовал различные решения от SendKeys до Pywin32 и SendInput (), а также решения, описанные в этих постах, среди прочих, которые я давно закрыл: Генерация событий клавиатуры в python SendInput

Проблема заключается в том, что все они, похоже, отправляют текстовые или смоделированные нажатия клавиш, которые Citrix не распознает.Мне кажется, что мне нужно эмулировать аппаратное нажатие клавиш, а не отправлять их непосредственно в приложение.Многие из решений находятся в C (или аналогичных), с которыми я не знаком.

У кого-нибудь есть решение на основе Python для этого?Или способ включить код C или VB.NET в Python?Было перечислено решение VB здесь , которое может работать или не работать, но я не уверен, как импортировать его функциональность в мой скрипт на основе Python.

Любые предложения приветствуются!

РЕДАКТИРОВАТЬ: Чтобы подчеркнуть необходимость прямого аппаратного манипулирования, а не имитируемых нажатий клавиш, я отправил в приложение Citrix следующие команды:

        SendInput(Keyboard(VK_RETURN))
        SendInput(Keyboard(VK_RETURN, KEYEVENTF_KEYUP))
        SendInput(Keyboard(VK_CAPITAL))
        SendInput(Keyboard(KEY_L))
        SendInput(Keyboard(KEY_L, KEYEVENTF_KEYUP))
        SendInput(Keyboard(VK_CAPITAL, KEYEVENTF_KEYUP))
        SendInput(Keyboard(KEY_0))
        SendInput(Keyboard(KEY_0, KEYEVENTF_KEYUP))
        SendInput(Keyboard(VK_SPACE))
        SendInput(Keyboard(VK_SPACE, KEYEVENTF_KEYUP))
        SendInput(Keyboard(KEY_A))
        SendInput(Keyboard(KEY_A, KEYEVENTF_KEYUP))
        SendInput(Keyboard(VK_BACK))
        SendInput(Keyboard(VK_BACK, KEYEVENTF_KEYUP))
        SendInput(Keyboard(VK_CONTROL))
        SendInput(Keyboard(KEY_A))
        SendInput(Keyboard(KEY_A, KEYEVENTF_KEYUP))
        SendInput(Keyboard(VK_CONTROL, KEYEVENTF_KEYUP))
        SendInput(Keyboard(VK_LCONTROL))
        SendInput(Keyboard(KEY_V))
        SendInput(Keyboard(KEY_V, KEYEVENTF_KEYUP))
        SendInput(Keyboard(VK_CONTROL, KEYEVENTF_KEYUP))
        SendInput(Keyboard(VK_RETURN))
        SendInput(Keyboard(VK_RETURN, KEYEVENTF_KEYUP))

И я получил следующий вывод в приложении: =tbd7w \ =

1 Ответ

0 голосов
/ 27 апреля 2018

Я наконец-то нашел что-то работающее: Клавиатура

Это успешно отправило нажатия клавиш, включая модификаторы, в приложение Citrix.Чтобы отправить CTRL - SPACE , как описано выше, так же просто, как Keyboard.send ('ctrl-space').Надеюсь, это кому-нибудь поможет!

...