You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求推荐可在CS GO等游戏中控制鼠标位置的Python库(PynPut、win32api无效)

Solution for Controlling Mouse Position in Games Like CS:GO with Python

Why pynput/win32api Fail

Games like CS:GO rely on DirectInput or Raw Input to read user input—these systems bypass the higher-level input hooks that libraries like pynput or the older win32api.mouse_event use. The "virtual" input simulated by those libraries is often ignored or blocked by games, especially when anti-cheat systems are active.

Working Python Approaches

1. Use ctypes to Call Windows' SendInput API

SendInput is the official Windows API for simulating input, operating at a lower level than pynput's default implementation. It’s more likely to be recognized by games that ignore higher-level tools. Here’s a practical example to move the mouse relative to its current position:

import ctypes
import time

# Define Windows API structures
class INPUT(ctypes.Structure):
    _fields_ = [("type", ctypes.c_uint),
                ("mi", ctypes.c_void_p)]

class MOUSEINPUT(ctypes.Structure):
    _fields_ = [("dx", ctypes.c_long),
                ("dy", ctypes.c_long),
                ("mouseData", ctypes.c_uint),
                ("dwFlags", ctypes.c_uint),
                ("time", ctypes.c_uint),
                ("dwExtraInfo", ctypes.c_void_p)]

# Input constants
INPUT_MOUSE = 0
MOUSEEVENTF_MOVE = 0x0001

def move_mouse_relative(dx, dy):
    mouse_input = MOUSEINPUT(dx, dy, 0, MOUSEEVENTF_MOVE, 0, None)
    input_obj = INPUT(INPUT_MOUSE, ctypes.byref(mouse_input))
    ctypes.windll.user32.SendInput(1, ctypes.byref(input_obj), ctypes.sizeof(input_obj))

# Test: move right 100px, down 50px, then back
move_mouse_relative(100, 50)
time.sleep(1)
move_mouse_relative(-100, -50)

For absolute position movement, use the MOUSEEVENTF_ABSOLUTE flag—you’ll need to scale your screen coordinates to the 0-65535 range that SendInput expects.

2. vJoy (Driver-Level Simulation)

If SendInput still gets blocked, vJoy is a virtual joystick driver that creates a hardware-like input device games recognize. You can control it via Python:

  1. Install the vJoy driver (look for the official release, no external links needed)
  2. Use the pyvjoy wrapper to send input:
from pyvjoy import VJoyDevice, HID_USAGE_X, HID_USAGE_Y

# Initialize vJoy device (typically ID 1)
virtual_device = VJoyDevice(1)

# Move to absolute position (scale coordinates to 0-32767 range)
# Example: center of a 1920x1080 screen
virtual_device.set_axis(HID_USAGE_X, 16384)  # Midpoint for X-axis
virtual_device.set_axis(HID_USAGE_Y, 16384)  # Midpoint for Y-axis

# Reset the device when done
virtual_device.reset()

Note: vJoy requires admin privileges, and you should verify if your game allows virtual input devices (anti-cheat systems may flag it).

Critical Reminders

  • Anti-Cheat Warning: Using input simulation tools in online games like CS:GO violates the game’s terms of service and can lead to a VAC ban. This guide is for educational purposes only.
  • Admin Rights: Most low-level input methods require running your Python script as an administrator to access the necessary APIs.

内容的提问来源于stack exchange,提问作者kush_131999

火山引擎 最新活动