如何用Python向我正在玩的游戏发送按键?
我正在玩《人类革命:德军总部》,游戏中有一些东西需要输入正确的四位数字代码才能访问。
我在想,能不能写个脚本,通过发送按键来暴力破解这个代码。我试过用发送按键的方式,但没能成功。有没有什么好主意?谢谢。
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来向当前活动的应用程序发送按键。不过,在某些类型的应用程序,比如游戏中,你还需要提供一个扫描码才能让它正常工作。
要发送一个单独的按键,你需要知道它的虚拟按键代码。你可以通过这个方法来获取,或者你也可以找一个字典(在网上很容易找到,或者自己做一个)。
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
你有没有试过这个?