How to generate keyboard events in Python?

后端 未结 11 1164
有刺的猬
有刺的猬 2020-11-22 14:55

short summary:

I am trying to create a program that will send keyboard events to the computer that for all purposes the simulated events should be t

11条回答
  •  渐次进展
    2020-11-22 15:31

    regarding the recommended answer's code,

    For my bot the recommended answer did not work. This is because I'm using Chrome which is requiring me to use KEYEVENTF_SCANCODE in my dwFlags.

    To get his code to work I had to modify these code blocks:

    class KEYBDINPUT(ctypes.Structure):
        _fields_ = (("wVk",         wintypes.WORD),
                    ("wScan",       wintypes.WORD),
                    ("dwFlags",     wintypes.DWORD),
                    ("time",        wintypes.DWORD),
                    ("dwExtraInfo", wintypes.ULONG_PTR))
    
        def __init__(self, *args, **kwds):
            super(KEYBDINPUT, self).__init__(*args, **kwds)
            # some programs use the scan code even if KEYEVENTF_SCANCODE
            # isn't set in dwFflags, so attempt to map the correct code.
            #if not self.dwFlags & KEYEVENTF_UNICODE:l
                #self.wScan = user32.MapVirtualKeyExW(self.wVk,
                                                     #MAPVK_VK_TO_VSC, 0)
                # ^MAKE SURE YOU COMMENT/REMOVE THIS CODE^
    
    def PressKey(keyCode):
        input = INPUT(type=INPUT_KEYBOARD,
                  ki=KEYBDINPUT(wScan=keyCode,
                                dwFlags=KEYEVENTF_SCANCODE))
        user32.SendInput(1, ctypes.byref(input), ctypes.sizeof(input))
    
    def ReleaseKey(keyCode):
        input = INPUT(type=INPUT_KEYBOARD,
                  ki=KEYBDINPUT(wScan=keyCode,
                                dwFlags=KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP))
        user32.SendInput(1, ctypes.byref(input), ctypes.sizeof(input))
    
    time.sleep(5) # sleep to open browser tab
    PressKey(0x26) # press right arrow key
    time.sleep(2) # hold for 2 seconds
    ReleaseKey(0x26) # release right arrow key
    
    

    I hope this helps someone's headache!

提交回复
热议问题