Я пытаюсь управлять игрой Rainbow Six Siege через python. Я нашел некоторый код, который использует библиотечные ctypes для создания событий мыши, но когда он используется в игре (в режиме одиночной игры, террористическая охота), он автоматически заставляет меня смотреть на землю.
Я пробовал разные комбинации флагов MOUSEEVENTF_MOVE и MOUSEEVENTF_ABSOLUTE, но безрезультатно. Пока это единственная библиотека, которая вообще сумела повлиять на игру. Все остальные ничего не делают, когда я сосредоточен на окне игры.
import ctypes
class MouseInput(ctypes.Structure):
_fields_ = [("dx", ctypes.c_long),
("dy", ctypes.c_long),
("mouseData", ctypes.c_ulong),
("dwFlags", ctypes.c_ulong),
("time",ctypes.c_ulong),
("dwExtraInfo", PUL)]
class Input_I(ctypes.Union):
_fields_ = [("ki", KeyBdInput),
("mi", MouseInput),
("hi", HardwareInput)]
class Input(ctypes.Structure):
_fields_ = [("type", ctypes.c_ulong),
("ii", Input_I)]
def move_mouse(x, y):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
x = int(x*(65536/ctypes.windll.user32.GetSystemMetrics(0))+1)
y = int(y*(65536/ctypes.windll.user32.GetSystemMetrics(1))+1)
ii_.mi = MouseInput(x, y, 0, 0x0001 | 0x8000, 0, ctypes.pointer(extra))
x = Input(ctypes.c_ulong(0), ii_)
ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
Я хочу иметь возможность перемещать мышь на определенную величину, сдвигая перспективу персонажей в Rainbow Six Siege. Я считаю, что мышь пытается достичь фиксированной точки на экране, что невозможно из-за того, что перемещение мыши только перемещает перспективу персонажа. Это заставляет его вести себя хаотично, когда он активен, путешествуя намного дальше, чем мне хотелось бы.