-
Notifications
You must be signed in to change notification settings - Fork 0
/
usb_kb.py
79 lines (60 loc) · 2.67 KB
/
usb_kb.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#______ ___ __ _______ _____
#| ___ \ / _ \ \ \ / /_ _|_ _|
#| |_/ /__ _ __ _ __ / /_\ \_ __ _ __ ___ \ V / | | | |
#| __/ _ \ '_ \| '_ \| _ | '_ \| '_ \/ __| / \ | | | |
#| | | __/ | | | | | | | | | |_) | |_) \__ \ / /^\ \_| |_ _| |_
#\_| \___|_| |_|_| |_\_| |_/ .__/| .__/|___/ \/ \/\___/ \___/
# | | | |
# |_| |_|
# USB connection to keyboard
import os, platform, ctypes, time
if platform.system() == "Windows":
SendInput = ctypes.windll.user32.SendInput
# C struct redefinitions (by lucasg)
PUL = ctypes.POINTER(ctypes.c_ulong)
class KeyBdInput(ctypes.Structure):
_fields_ = [("wVk", ctypes.c_ushort),
("wScan", ctypes.c_ushort),
("dwFlags", ctypes.c_ulong),
("time", ctypes.c_ulong),
("dwExtraInfo", PUL)]
class HardwareInput(ctypes.Structure):
_fields_ = [("uMsg", ctypes.c_ulong),
("wParamL", ctypes.c_short),
("wParamH", ctypes.c_ushort)]
class MouseInput(ctypes.Structure):
_fields_ = [("dx", ctypes.c_long),
("dy", ctypes.c_long),
("mouseData", ctypes.c_ulong),
("dwFlags", ctypes.c_ulong),
("time",ctypes.c_ulong),
("dwExtraInfo", PUL)]
class Input_I(ctypes.Union):
_fields_ = [("ki", KeyBdInput),
("mi", MouseInput),
("hi", HardwareInput)]
class Input(ctypes.Structure):
_fields_ = [("type", ctypes.c_ulong),
("ii", Input_I)]
# Actuals Functions
def PressKey(hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput( hexKeyCode, 0x48, 0, 0, ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def ReleaseKey(hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput( hexKeyCode, 0x48, 0x0002, 0, ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def key_to_hexcode(key):
if key in "1234567890":
return int(key) + 0x60
else:
lookup = {"NUMLOCK": 0x90, '/': 0xBF, '*': 0x6A, '-': 0x6D, '+': 0x6B,
'.': 0x6E, "ENTER": 0x0D}
return lookup[key]
if __name__ == "__main__":
PressKey(key_to_hexcode('+'))