想要做一个《流放之路》的固定点击脚本,写的代码可以在游戏外运行,一进入游戏就失灵?怎么回事?只要切换出游戏界面后又可以正常运行;同时我还发现键盘输出在文字聊天上可以正常使用
import pyautogui
import time
import keyboard
while True:
keyboard.press('r')#按下‘R’键
keyboard.press('space')#按下空格键
pyautogui.moveTo([100, 100], duration=0.1) # 鼠标调用
pyautogui.click(button='left')#点击左键
time.sleep(2)
pyautogui.moveTo([400, 400], duration=0.1) # 鼠标调用
pyautogui.click(button='left')#点击左键
time.sleep(3)
无报错
我怀疑是不是游戏将外置插件屏蔽了,所以我打开了老游戏《魔兽争霸》DOTA进行测试,发现DOTA中只可以运行一次键盘按键,鼠标按键一直生效
让这个小玩意不受环境影响
目前已解决《魔兽争霸》中键盘按键问题。
主要问题是keyboard.press的意思是按住‘R’键不放。所以后续的按键无法响应。将此命令改为keyboard.send('r'),即可解决。
现在的问题应该改为《流放之路》中有检测外部按键输入的程序,有谁能绕过不?封号也算啊。
2022.4.26日修改
我参照B站QingAn71视频up主的脚本做法做了一下,目前结论是,利用pywin32 中的win32gui库,找到游戏主窗口并显示,再用win32con库中的命令与此窗口发生连接,目前已经可以正常输入指令了(程序封装为exe后用管理员模式运行,在pycharm中无法正常运行)。具体代码如下:
python
import keyboard
import time
import win32con
import win32gui
#查找主窗口
win = win32gui.FindWindow(u'POEWindowClass', None)
# 将窗口调到前台
win32gui.SetForegroundWindow(win)
win32gui.ShowWindow(win, win32con.SW_SHOW)
while True:
if keyboard.record('space'):
keyboard.send('r')
time.sleep(0.1)
keyboard.send('j')
time.sleep(0.1)
与触发的事件有关。
可以用pyperclip库,模拟按键效果
您可以从pygame获得事件,然后注意KEYDOWN事件,而不是查看get_pressed()返回的键(它给出当前按下的键,而KEYDOWN事件显示在该帧上按下了哪些键)。