如何用Python向我正在玩的游戏发送按键?

3 投票
3 回答
5822 浏览
提问于 2025-04-17 05:31

我正在玩《人类革命:德军总部》,游戏中有一些东西需要输入正确的四位数字代码才能访问。

我在想,能不能写个脚本,通过发送按键来暴力破解这个代码。我试过用发送按键的方式,但没能成功。有没有什么好主意?谢谢。

Python:

-SendKeys

这是我尝试过的代码,找到了这个:

import win32com.client
import time
import SendKeys
import os
from ctypes import *

shell = win32com.client.Dispatch("WScript.Shell")
os.startfile('C:\\....exe')
time.sleep( 150 )
shell.SendKeys('1')

我最开始的尝试是用脚本打开游戏,设置一个延迟时间来加载存档,然后打开一个终端来进行破解,但按键没有发送成功。

-pywinauto:

使用pywinauto我有这个:

from pywinauto import application
import time

app=application.Application()
app.connect_(title_re = "Deus Ex: Human Revolution - The Missing Link", class_name = "DeusExHRE")

现在我在寻找可用的对话框。

AutoHotKeys:

除了Python,我还在尝试使用AutoHotKeys:

这个可以工作:

SetKeyDelay 180

F12::
     Send {0 down}
     Send {0 up}
     Send {0 down}
     Send {0 up}
     Send {0 down}
     Send {0 up}
     Send {0 down}
     Send {0 up}
     Send {Backspace down}
     Send {Backspace up}
Return

我发现的按键延迟是最小的,这样不会漏掉任何按键。我在寻找更快的方法,也许可以尝试不同的发送方式。

更新:

-pywinauto
-autohotkeys

3 个回答

0

虽然我来晚了,但还是想回答这个问题,因为可能还有其他人也会遇到我曾经遇到的同样问题...

在Windows系统中,你可以使用win32api来向当前活动的应用程序发送按键。不过,在某些类型的应用程序,比如游戏中,你还需要提供一个扫描码才能让它正常工作。

要发送一个单独的按键,你需要知道它的虚拟按键代码。你可以通过这个方法来获取,或者你也可以找一个字典(在网上很容易找到,或者自己做一个)。

MapVirtualKey

keybd_event

import win32api, win32con, time

# in this example i'm using a dictionary (that i called VK_CODE)
# to map the keys to their respective virtual key codes

# Sending the key a
i = 'a'

# send key down event
win32api.keybd_event(VK_CODE[i], win32api.MapVirtualKey(VK_CODE[i], 0), 0, 0)

# wait for it to get registered. 
# You might need to increase this time for some applications
time.sleep(.05)

# send key up event
win32api.keybd_event(VK_CODE[i], win32api.MapVirtualKey(VK_CODE[i], 0), win32con.KEYEVENTF_KEYUP, 0)
1

你可能已经想到了这一点,但为了保险起见,确保你在几个地方试试你的解决方案。我记得在《德军总部:新秩序》里,有几个地方你必须在游戏中找到代码才能使用,尽管这些代码其实是直接写进游戏里的。

如果能有个东西自动帮你完成黑客迷你游戏,那就太酷了。 :)

3

你有没有试过这个

撰写回答