Как использовать Python для имитации нажатия клавиш для управления игрой?

Я пытаюсь создать скрипт Python для автоматизации игры.

Я уже пробовал эти библиотеки:

Мой код такой:

from directkeys import PressKey, ReleaseKey, W
import time

print("Script is gonna start in 5 seconds")
time.sleep(5)

PressKey(W)
time.sleep(10)
ReleaseKey(W)
print("Script finished")

Я тестировал этот скрипт на notepad, он работает довольно хорошо, но в игре вообще не работает.

Я думал, что это из-за необходимости прямого ввода, но я думаю, что ctypes уже отправляет ввод как direct input.

Как я могу автоматизировать игру с помощью python?


person Lai32290    schedule 12.07.2018    source источник
comment
В какой игре вы пытаетесь использовать этот скрипт? Возможно, игра способна запретить пользователю использовать бота.   -  person Flostin    schedule 12.07.2018
comment
Игра Ran Online, кстати, я играю на приватном сервере только для того, чтобы научиться это делать.   -  person Lai32290    schedule 12.07.2018
comment
stackoverflow.com/questions/44886546/ Этот вопрос может помочь? Проверьте наличие прав администратора и убедитесь, что ваша программа и игра имеют для этого равные права.   -  person J0hn    schedule 12.07.2018
comment
О боже, я не пробовал таким образом, дайте мне попробовать, и я дам вам знать результат. большое спасибо @J0hn   -  person Lai32290    schedule 12.07.2018
comment
@ J0hn, просто чтобы убедиться, что способ, которым я имитирую нажатие клавиатуры (PressKey), отправляет и Direct Input тип ввода, верно?   -  person Lai32290    schedule 12.07.2018
comment
Ваш второй w в ReleaseKey написан в нижнем регистре.   -  person Evan    schedule 12.07.2018
comment
@Lai32290 Lai32290 Думаю, да, если вы используете библиотеку, которую я искал и нашел в Google, я думаю, что она использует ctypes, именно так я имитировал нажатия клавиш раньше с помощью python. РЕДАКТИРОВАТЬ: Еще одна вещь, которую вы можете попробовать, это заменить W шестнадцатеричным значением. Например, numlock имеет шестнадцатеричное значение 0x90. Я думаю, что это тот тип ввода, который нужен этим функциям.   -  person J0hn    schedule 12.07.2018
comment
@ Эван, извини, это опечатка.   -  person Lai32290    schedule 12.07.2018
comment
@ J0hn Я не уверен, но я думаю, что шестнадцатеричное значение не должно быть проблемой, потому что я могу ввести notepad, используя свой скрипт. не работает только в игре.   -  person Lai32290    schedule 12.07.2018
comment
Я сейчас на работе, позже попробую запустить скрипт от имени администратора, похоже решение моей проблемы.   -  person Lai32290    schedule 12.07.2018
comment
Привет, @J0hn! Я выполнил скрипт от имени администратора, и он просто работает!!!! Огромное спасибо!!!   -  person Lai32290    schedule 13.07.2018
comment
@ J0hn, можешь ли ты создать ответ с помощью этого run script as admin permission решения? Чем я голосую за это.   -  person Lai32290    schedule 17.07.2018


Ответы (1)


Я собираюсь повысить свой комментарий до ответа, так как считаю, что это то, что вы ищете.

W не подходит для функций PressKey и ReleaseKey. Они ищут ввод шестнадцатеричного кода. Вы можете найти правильные шестнадцатеричные коды здесь: https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes

Шестнадцатеричный код W, в частности, равен 0x57. Поэтому замените «W» на «0x57»:

from directkeys import PressKey, ReleaseKey, W
import time

print("Script is gonna start in 5 seconds")
time.sleep(5)

PressKey(0x57)
time.sleep(10)
ReleaseKey(0x57)
print("Script finished")
person J0hn    schedule 12.07.2018