首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pydirectinput/Pynput/Pyautogui并不总是按键

Pydirectinput/Pynput/Pyautogui并不总是按键
EN

Stack Overflow用户
提问于 2021-11-29 21:02:52
回答 1查看 725关注 0票数 0

所以,我一直在为Roblox上的游戏做一个宏,有时输入不起作用?这一切为什么要发生?我在pydirectinput,pynput和pyautogui都试过,但它们都不起作用。在过去的几个小时里,我一直在尝试这样做,我非常希望有人能帮助我!

下面是我的代码(用于pydirectinput):

代码语言:javascript
运行
复制
import pydirectinput, threading, time, sys, os

# os._exit(404)

def press_key(key):
    pydirectinput.press(key)

def hold_key(key, s):
    pydirectinput.keyDown(key)
    time.sleep(s)
    pydirectinput.keyUp(key)

w = "w"
a = "a"
s = "s"
d = "d"
period = "."
comma =  ","

# def reset():
#     press_key("esc")
#     time.sleep(.1)
#     press_key(KeyCode(char="r"))
#     time.sleep(.1)
#     press_key(Key.enter)
#     time.sleep(.1)

def start():
    press_key(period)
    time.sleep(.1)
    press_key(period)
    hold_key(w, 2)
    time.sleep(1)
    press_key("space")
    time.sleep(.1)
    hold_key(w, 2)
    time.sleep(.5)
    press_key(comma)
    time.sleep(.1)
    press_key(comma)
    time.sleep(.3)
    hold_key(w, 1)
    time.sleep(.2)
    press_key(period)
    time.sleep(.1)
    press_key(period)
    time.sleep(.3)
    hold_key(w, .5)
    time.sleep(.3)
    press_key(period)
    time.sleep(.1)
    press_key(period)
    time.sleep(.2)
    hold_key(w, .3)
    time.sleep(.1)
    press_key("e")

def loop():
    print("loop")
    # while True:
    #     hold_key(w, 1)
    #     hold_key(a, 1)
    #     hold_key(s, 1)
    #     hold_key(d, 1)

time.sleep(2)
threading.Thread(target=start()).start()
time.sleep(2)
threading.Thread(target=loop).start()
EN

回答 1

Stack Overflow用户

发布于 2022-04-18 20:37:30

我意识到这是4个月前发布的,没有答案,但如果有人发现你的问题,如果你还没有找到答案,也没有更新你的问题。对于大多数游戏,您需要通过扫描代码或直接发送输入到内核,因为DirectX是一个不同的API。Pyautogui不适用于DirectX游戏的一些输入方法。例如,FFXIV可以按下pyautogui的键,但不能使用该库中的鼠标移动。另外,一些游戏,例如Maplestory,完全忽略了不来自硬件API (也就是内核)的关键笔画。使用反欺骗软件的游戏也会阻止这一点。但是,pydirectinput修复了这个问题,因为它用扫描代码代替了pyautogui的win32 API方法,扫描代码与OnScreen键盘相同。只需要确保您以管理员的身份打开脚本,如果您使用IDE打开脚本作为admin运行脚本。

我所看到的唯一不对的是线程:

代码语言:javascript
运行
复制
threading.Thread(target=start()).start()

线程中的Thread函数的问题是,不能像普通一样简单地将参数传递给它。您必须将参数与它的“必需”参数分开。所以,就像现在一样,它是行不通的。因为start()函数没有任何参数。它就像删除线程的括号一样简单。

代码语言:javascript
运行
复制
threading.Thread(target=start).start()

*让我们以hold_key()函数为例:按住'w‘键5秒

代码语言:javascript
运行
复制
threading.Thread(target=hold_key, args=('w', 5)).start()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70161288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档