Как отправить ввод с клавиатуры в игровое окно OpenGL / DirectX? - PullRequest
0 голосов
/ 17 декабря 2011

Как я могу имитировать нажатие клавиш в игровом окне (используя любой язык программирования в Windows)?

Скрипты AutoHotKeys и функции .NET SendKeys не работают ...

Ответы [ 3 ]

4 голосов
/ 17 декабря 2011

Используя AutoIt! 3 (который очень похож на AutoHotKeys), вы будете использовать Send() (http://www.autoitscript.com/autoit3/docs/functions/Send.htm),, но убедитесь, что игровое окно активно (WinActivate()), прежде чем вы это сделаете.

Я использовал это для успешного взаимодействия с Second Life (который использует OpenGL). Вам может потребоваться период Sleep() между симулированными нажатиями клавиш, поскольку не во всех играх реализованы хорошие буферы клавиатуры.

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

Если игра опрашивается асинхронно, вы хотите использовать down иup Флаги модификаторов:

Send("{left down}")  ; hold down the LEFT key
Sleep(10)            ; keep it pressed for 10 milliseconds
Send("{left up}")    ; release the LEFT key

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

2 голосов
/ 19 марта 2014

Эта клавиатура Обертка позволит вам симулировать события клавиатуры в играх или любом другом приложении, используя C #.

1 голос
/ 17 декабря 2011

Любой язык программирования? Я рекомендую написать небольшое приложение на C или C ++ (хотя вы также можете сделать это в приложении .NET с P / Invoke ).

В частности, вам нужна функция SendInput из Win32 API, которая может отправлять низкоуровневые ввод с клавиатуры и мыши в приложение. Это делается с точки зрения структуры INPUT , содержащей информацию, которую вы хотите отправить.

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

Однако, поскольку эта функция, как правило, SendKeys использует под прикрытием, последним небольшим предостережением может быть то, почему она не работает. Трудно сказать точно; Вы не говорите нам, что вы подразумеваете под "не работать".

...