具有随机延迟的热键按键

问题描述 投票:0回答:1

我的问题很简单,我的代码需要热键数字“ 1”以模拟数字“ 2、3、4”的按键现在,我想在它上面放一个随机延迟,我的意思是:当我按下数字“ 1”时,他等待“随机秒”,然后他模拟数字“ 2”的按键事件,以此类推,这是我的模式:

Press number "1" with hotkey numbers "2, 3, 4"
random seconds
keypress simulate number "2"
random secs
keypress simulate number "3"
random secs
keypress simulate number "4"
repeat when i press again the hotkey number "1"

这里是我的代码,没有随机延迟,我该如何像我的示例所示那样延迟一下?我尝试使用time.sleep,但是没有用。

import keyboard
import time
import random


def cont():
    while True:
        keyboard.add_hotkey('1', lambda: keyboard.press_and_release('2'))
        keyboard.add_hotkey('1', lambda: keyboard.press_and_release('3'))
        keyboard.wait('esc')


if __name__ == '__main__':
    cont()
python python-3.x
1个回答
0
投票

[它可能会踩踏keyboard.press_and_release()作为add_hotkey中的下一个参数,而不是lambda的一部分,并在开始时执行keyboard.press_and_release()-甚至在按下键之前。

您可能需要使用()lambda中的命令分组,例如

 keyboard.add_hotkey('1', (lambda: time.sleep(2), keyboard.press_and_release('2')) )

或者更好地创建常规函数,并在add_hotkey()中使用其名称>

import keyboard
import time
import random

def function()
    time.sleep(random.randint(1, 5))
    keyboard.press_and_release('2')
    time.sleep(random.randint(1, 5))
    keyboard.press_and_release('3')
    time.sleep(random.randint(1, 5))
    keyboard.press_and_release('4')

if __name__ == '__main__':
    keyboard.add_hotkey('1', function)
    keyboard.wait('esc')

EDIT:

如果您同时按两次1,则它将同时运行两次function。如果您不想要它,则必须使用一些全局变量来控制函数是否仍在运行:
import keyboard
import time
import random

running = False # global variable with value at start

def function():
    global running

    if running:
        return

    running = True
    time.sleep(random.randint(1, 5))
    keyboard.press_and_release('2')
    time.sleep(random.randint(1, 5))
    keyboard.press_and_release('3')
    time.sleep(random.randint(1, 5))
    keyboard.press_and_release('4')
    running = False

if __name__ == '__main__':
    keyboard.add_hotkey('1', function)
    keyboard.wait('esc')
© www.soinside.com 2019 - 2024. All rights reserved.