Pynput 和 pyAutoGui 无法保存键
Pynput and pyAutoGui can't hold keys
我想制作一个简单的宏来按住 'W' 一段时间,但即使像这样的简单脚本也不起作用。
import time
import pyautogui
from pynput.keyboard import Key, Controller
keyboard = Controller()
pyautogui.keyDown('w')
time.sleep(3)
pyautogui.keyUp('w')
time.sleep(5)
keyboard.press('w')
time.sleep(3)
keyboard.release('w')
如果我在任何文本中测试它 editor/text 输入 window 它会在脚本启动时写入一个 'w' 并且在 8 秒后没有 holding/spaming 写入另一个。因此,它在任何游戏中都不起作用,而这本应是该脚本的全部目的。我在各种各样的不同游戏(Java Minecraft、source Gmod、Roblox 和一些 unity 游戏)中尝试过它,这个脚本在其中任何一个游戏中都不起作用,但如果游戏有聊天、搜索框或任何其他文本输入 window,此脚本将在一段时间后写入一个 'w' 和另一个。
我真的不知道为什么会这样,但我记得两年前我试图在 pynput 上制作类似的脚本并且它确实有效,所以我尝试安装旧版本的 pynput,但这对我没有帮助还有...
这可能是开始使用:
#
#simulate keystroke for some amount of time
import msvcrt
import time
def press(char, duration, sleep, limit=None):
while True:
lim = limit
t1 = time.time()
while time.time() - t1 < duration: # do for duration specified
msvcrt.putch(char) # output character, putch() awaits a byte string
if lim: # limit specified?
lim -= 1
if lim == 0: # limit reached
break
time.sleep(SLEEP)
if msvcrt.kbhit(): # key pressed?
char = msvcrt.getch()
press(b'w', .001, 2, None)
所以经过很长一段时间我终于可以解决这个问题,我发现问题的根源在于微软的DirectInput。基本上 pynput 和 pyAutoGUI 无法进入 DirectInput 并且根本没有信号,而我认为有信号,但时间太短以至于游戏无法接收它。多亏了这个人 PyAutoGUI not working? Use DirectInput,这个问题的解决方案非常简单。感谢他的 PyDirectInput 库,您可以使用 python 来模拟游戏中的按钮按下和保持!
我想制作一个简单的宏来按住 'W' 一段时间,但即使像这样的简单脚本也不起作用。
import time
import pyautogui
from pynput.keyboard import Key, Controller
keyboard = Controller()
pyautogui.keyDown('w')
time.sleep(3)
pyautogui.keyUp('w')
time.sleep(5)
keyboard.press('w')
time.sleep(3)
keyboard.release('w')
如果我在任何文本中测试它 editor/text 输入 window 它会在脚本启动时写入一个 'w' 并且在 8 秒后没有 holding/spaming 写入另一个。因此,它在任何游戏中都不起作用,而这本应是该脚本的全部目的。我在各种各样的不同游戏(Java Minecraft、source Gmod、Roblox 和一些 unity 游戏)中尝试过它,这个脚本在其中任何一个游戏中都不起作用,但如果游戏有聊天、搜索框或任何其他文本输入 window,此脚本将在一段时间后写入一个 'w' 和另一个。
我真的不知道为什么会这样,但我记得两年前我试图在 pynput 上制作类似的脚本并且它确实有效,所以我尝试安装旧版本的 pynput,但这对我没有帮助还有...
这可能是开始使用:
#
#simulate keystroke for some amount of time
import msvcrt
import time
def press(char, duration, sleep, limit=None):
while True:
lim = limit
t1 = time.time()
while time.time() - t1 < duration: # do for duration specified
msvcrt.putch(char) # output character, putch() awaits a byte string
if lim: # limit specified?
lim -= 1
if lim == 0: # limit reached
break
time.sleep(SLEEP)
if msvcrt.kbhit(): # key pressed?
char = msvcrt.getch()
press(b'w', .001, 2, None)
所以经过很长一段时间我终于可以解决这个问题,我发现问题的根源在于微软的DirectInput。基本上 pynput 和 pyAutoGUI 无法进入 DirectInput 并且根本没有信号,而我认为有信号,但时间太短以至于游戏无法接收它。多亏了这个人 PyAutoGUI not working? Use DirectInput,这个问题的解决方案非常简单。感谢他的 PyDirectInput 库,您可以使用 python 来模拟游戏中的按钮按下和保持!