Задать вопрос
@xxvxx
....

Как игра понимает, что используется не физическая клавиатура?

Пробовал написать автокликер, но он не работает=( Как игра понимает, что используется не физическая клавиатура?
import time
import random
import win32api, win32con
from tkinter import *
from tkinter import ttk

def click_button():
	while True:
		win32api.keybd_event(0x31, 0, 0, 0) # нажатие "1"
		time.sleep(random.random())
		win32api.keybd_event(0x31, 0, win32con.KEYEVENTF_KEYUP, 0) # отпускание "1"
		time.sleep(random.random())

root = Tk()
root.title("КЛИК")
root.geometry("200x200")

btn = ttk.Button(text="КЛИК", command=click_button)
btn.pack(fill=X,
			expand=True,
			padx=20,
			pady=30,
			ipadx=10,
			ipady=10)

root.mainloop()

Также не работают:
pyautogui
pydirectinput
mouse
keyboard
  • Вопрос задан
  • 575 просмотров
Подписаться 1 Простой 20 комментариев
Пригласить эксперта
Ответы на вопрос 2
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Проблема с эмуляцией ввода в играх в том, что в винде существует несколько разных АПИ и методов получения пользовательского ввода - возраст ОС, легаси, обратная совместимость и все такое прочее. И каждый разработчик использует то, что нравится/нашел/встроенное в движок/попалось под руку, а некоторые специально усложняют возможности программной эмуляции для блокировки ботов. Поэтому надо пробовать несколько вариантов, а если не работает - то остается либо свой драйвер в ядре ОС либо эмуляция с внешнего устройства.
Ответ написан
Комментировать
sdramare
@sdramare
Игра ничего не понимает. Автокликеры как правило просто посылают сообщение о вводе в message loop приложения. Но в играх, так как важно минимизировать задержку и используемые ресурсы, для обработки ввода используется специальное api, тот же xinput в винде. Движок игры просто не получает ваш ввод из приложения, вот и все. Если так надо, я бы копал в строну создания виртуального устройства ввода.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы