我怎样才能使这个按键模拟器更快?

how can I make this keypress simulator faster?

所以我从 pyautogui 库中获得了这段代码,但我并不完全理解它的实际作用。


    for apply_mod, vk_mod in [(mods & 4, 0x12), (mods & 2, 0x11),
        (mods & 1 or needsShift, 0x10)]: #HANKAKU not suported! mods & 8
        if apply_mod:
            ctypes.windll.user32.keybd_event(vk_mod, 0, 0, 0) #
    ctypes.windll.user32.keybd_event(vkCode, 0, 2, 0)
    for apply_mod, vk_mod in [(mods & 1 or needsShift, 0x10), (mods & 2, 0x11),
        (mods & 4, 0x12)]: #HANKAKU not suported! mods & 8
        print()
        if apply_mod:
            ctypes.windll.user32.keybd_event(vk_mod, 0, 2, 0)

所以假设我有一个不会改变或抛出错误的预期输入,我可以去掉/重写什么来让它更快(它目前很慢)

我今天偶然发现了这段完全相同的代码,虽然我没有太多细节,但我或多或少地了解了它的作用。 您粘贴的这段代码对应于 keyUp 函数,如果您调用 presstypewrite,该函数也会在 keyDown 之后立即执行。 它检查需要正确键入修饰键的特殊字符。 在这段代码的正上方,有一行:

mods, vkCode = divmod(keyboardMapping[key], 0x100)

看到这个变量mods。它接收接收到的密钥的底数除以 0x100,即 256。vkCode 得到余数。如果输入键有code 300,比如mods收到1,vkCode收到44.

在第一个循环中,它检查 mods 并将其替换为 0x10、0x11 或 0x12,然后调用 ctypes.windll.user32.keybd_event(vkCode, 0, 0, 0).这个 0 是 KEYDOWN。在此之后,它会在循环之间释放 vkCode 键(因为它是 keyUp)。然后 for 循环再次检查 mods 并且这次它释放修改键,使用代码 2.

一种使其更快的方法是在找到 mods 的结果后 break 循环,但由于涉及 needsShift,可能需要更多考虑(此代码可以同时按住2个修改键)。

另一种方法是完全删除它,只留下中间的 keybd_event,如果您认为您永远不需要使用它,但它当然仅供个人使用。此外,如果您无论如何都打算更改它,请在 python 文件中查找与 keyDown 函数对应的类似代码,以反映其中的更改。