Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Python win32api simple Vitual keystroke example
#Giant dictonary to hold key name and VK value
VK_CODE = {'backspace':0x08,
'tab':0x09,
'clear':0x0C,
'enter':0x0D,
'shift':0x10,
'ctrl':0x11,
'alt':0x12,
'pause':0x13,
'caps_lock':0x14,
'esc':0x1B,
'spacebar':0x20,
'page_up':0x21,
'page_down':0x22,
'end':0x23,
'home':0x24,
'left_arrow':0x25,
'up_arrow':0x26,
'right_arrow':0x27,
'down_arrow':0x28,
'select':0x29,
'print':0x2A,
'execute':0x2B,
'print_screen':0x2C,
'ins':0x2D,
'del':0x2E,
'help':0x2F,
'0':0x30,
'1':0x31,
'2':0x32,
'3':0x33,
'4':0x34,
'5':0x35,
'6':0x36,
'7':0x37,
'8':0x38,
'9':0x39,
'a':0x41,
'b':0x42,
'c':0x43,
'd':0x44,
'e':0x45,
'f':0x46,
'g':0x47,
'h':0x48,
'i':0x49,
'j':0x4A,
'k':0x4B,
'l':0x4C,
'm':0x4D,
'n':0x4E,
'o':0x4F,
'p':0x50,
'q':0x51,
'r':0x52,
's':0x53,
't':0x54,
'u':0x55,
'v':0x56,
'w':0x57,
'x':0x58,
'y':0x59,
'z':0x5A,
'numpad_0':0x60,
'numpad_1':0x61,
'numpad_2':0x62,
'numpad_3':0x63,
'numpad_4':0x64,
'numpad_5':0x65,
'numpad_6':0x66,
'numpad_7':0x67,
'numpad_8':0x68,
'numpad_9':0x69,
'multiply_key':0x6A,
'add_key':0x6B,
'separator_key':0x6C,
'subtract_key':0x6D,
'decimal_key':0x6E,
'divide_key':0x6F,
'F1':0x70,
'F2':0x71,
'F3':0x72,
'F4':0x73,
'F5':0x74,
'F6':0x75,
'F7':0x76,
'F8':0x77,
'F9':0x78,
'F10':0x79,
'F11':0x7A,
'F12':0x7B,
'F13':0x7C,
'F14':0x7D,
'F15':0x7E,
'F16':0x7F,
'F17':0x80,
'F18':0x81,
'F19':0x82,
'F20':0x83,
'F21':0x84,
'F22':0x85,
'F23':0x86,
'F24':0x87,
'num_lock':0x90,
'scroll_lock':0x91,
'left_shift':0xA0,
'right_shift ':0xA1,
'left_control':0xA2,
'right_control':0xA3,
'left_menu':0xA4,
'right_menu':0xA5,
'browser_back':0xA6,
'browser_forward':0xA7,
'browser_refresh':0xA8,
'browser_stop':0xA9,
'browser_search':0xAA,
'browser_favorites':0xAB,
'browser_start_and_home':0xAC,
'volume_mute':0xAD,
'volume_Down':0xAE,
'volume_up':0xAF,
'next_track':0xB0,
'previous_track':0xB1,
'stop_media':0xB2,
'play/pause_media':0xB3,
'start_mail':0xB4,
'select_media':0xB5,
'start_application_1':0xB6,
'start_application_2':0xB7,
'attn_key':0xF6,
'crsel_key':0xF7,
'exsel_key':0xF8,
'play_key':0xFA,
'zoom_key':0xFB,
'clear_key':0xFE,
'+':0xBB,
',':0xBC,
'-':0xBD,
'.':0xBE,
'/':0xBF,
'`':0xC0,
';':0xBA,
'[':0xDB,
'\\':0xDC,
']':0xDD,
"'":0xDE,
'`':0xC0}
def press(*args):
'''
one press, one release.
accepts as many arguments as you want. e.g. press('left_arrow', 'a','b').
'''
for i in args:
win32api.keybd_event(VK_CODE[i], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE[i],0 ,win32con.KEYEVENTF_KEYUP ,0)
def pressAndHold(*args):
'''
press and hold. Do NOT release.
accepts as many arguments as you want.
e.g. pressAndHold('left_arrow', 'a','b').
'''
for i in args:
win32api.keybd_event(VK_CODE[i], 0,0,0)
time.sleep(.05)
def pressHoldRelease(*args):
'''
press and hold passed in strings. Once held, release
accepts as many arguments as you want.
e.g. pressAndHold('left_arrow', 'a','b').
this is useful for issuing shortcut command or shift commands.
e.g. pressHoldRelease('ctrl', 'alt', 'del'), pressHoldRelease('shift','a')
'''
for i in args:
win32api.keybd_event(VK_CODE[i], 0,0,0)
time.sleep(.05)
for i in args:
win32api.keybd_event(VK_CODE[i],0 ,win32con.KEYEVENTF_KEYUP ,0)
time.sleep(.1)
def release(*args):
'''
release depressed keys
accepts as many arguments as you want.
e.g. release('left_arrow', 'a','b').
'''
for i in args:
win32api.keybd_event(VK_CODE[i],0 ,win32con.KEYEVENTF_KEYUP ,0)
def typer(string=None,*args):
## time.sleep(4)
for i in string:
if i == ' ':
win32api.keybd_event(VK_CODE['spacebar'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['spacebar'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '!':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['1'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['1'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '@':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['2'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['2'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '{':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['['], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['['],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '?':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['/'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['/'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == ':':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE[';'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE[';'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '"':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['\''], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['\''],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '}':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE[']'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE[']'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '#':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['3'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['3'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '$':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['4'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['4'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '%':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['5'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['5'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '^':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['6'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['6'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '&':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['7'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['7'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '*':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['8'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['8'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '(':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['9'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['9'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == ')':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['0'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['0'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '_':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['-'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['-'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '=':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['+'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['+'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '~':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['`'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['`'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '<':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE[','], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE[','],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == '>':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['.'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['.'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'A':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['a'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['a'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'B':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['b'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['b'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'C':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['c'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['c'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'D':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['d'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['d'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'E':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['e'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['e'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'F':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['f'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['f'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'G':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['g'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['g'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'H':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['h'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['h'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'I':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['i'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['i'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'J':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['j'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['j'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'K':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['k'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['k'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'L':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['l'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['l'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'M':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['m'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['m'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'N':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['n'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['n'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'O':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['o'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['o'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'P':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['p'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['p'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'Q':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['q'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['q'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'R':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['r'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['r'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'S':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['s'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['s'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'T':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['t'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['t'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'U':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['u'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['u'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'V':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['v'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['v'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'W':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['w'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['w'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'X':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['x'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['x'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'Y':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['y'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['y'],0 ,win32con.KEYEVENTF_KEYUP ,0)
elif i == 'Z':
win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)
win32api.keybd_event(VK_CODE['z'], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)
win32api.keybd_event(VK_CODE['z'],0 ,win32con.KEYEVENTF_KEYUP ,0)
else:
win32api.keybd_event(VK_CODE[i], 0,0,0)
time.sleep(.05)
win32api.keybd_event(VK_CODE[i],0 ,win32con.KEYEVENTF_KEYUP ,0)
@kendase3
Copy link

I just wanted to say that this is a great resource. The dict in particular was a real time-saver. However, I'm having trouble using the same means as you for holding down keys. Does this call to keybd_event with three zeros only work on certain versions of Windows? I'm having trouble finding documentation on win32api. I've gotten a similar example for shift to work that used different syntax. The script I'm writing is a rather specific situation: A user may use a toggle key to alternate holding down a target key.

@kendase3
Copy link

Actually it looks like you might not need the dict if you just take input and run hex(ord(input))

@kendase3
Copy link

or even just ord(input)

@kendase3
Copy link

It seems as though the "pressAndHold" function simply presses on my system: when in a loop everything seems to work fine

@cagrimertbakirci
Copy link

Such an incredible resource, thank you so much!

@adk96r
Copy link

adk96r commented Aug 18, 2016

This is awesome ! I am using this beautiful piece of code to control my Mclaren in NFS using the arduino ( hooked up to a accelerometer ). Thankyou very much .

@15449119
Copy link

hi, this is really nice..
one quick question: I have made a script to automatically login to windows when it is locked. I add the script to scheduled tasked,when the desktop is locked ,the script will run, the action is typing my password. as I can see, the cursor is in the password box. but nothing typed there. I wonder where does the script typed the password.. do I need to set the cursor?

@om-nishu-trantor
Copy link

om-nishu-trantor commented May 4, 2017

More exhaustive list of Virtual Key(VK) codes : http://www.kbdedit.com/manual/low_level_vk_list.html

@AustinScola
Copy link

dictionary contains duplicate entry: '`':0xC0

@TheGreatCabbage
Copy link

Very useful, thank you.

@Hzzkygcs
Copy link

Thanks... It is very useful...

@Dimon4eg
Copy link

Oh guys, you can just use VkKeyScan from Windows API!
Look here https://stackoverflow.com/questions/43753346/how-to-get-virtual-key-code-of-a-key/50100057#50100057

@TheoGuerin64
Copy link

Thanks !

@gorodion
Copy link

gorodion commented Apr 24, 2021

after last updating windows no longer works

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment