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
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!