-
Notifications
You must be signed in to change notification settings - Fork 5
/
directkeys.py
123 lines (100 loc) · 2.41 KB
/
directkeys.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import ctypes
import time
SendInput = ctypes.windll.user32.SendInput
W = 0x11
A = 0x1E
S = 0x1F
D = 0x20
#http://www.philipstorr.id.au/pcbook/book3/scancode.htm
# http://www.scs.stanford.edu/10wi-cs140/pintos/specs/kbd/scancodes-1.html
U = 0x16
I = 0x17
O = 0x18
J = 0x24
K = 0x25
L = 0x26
Up=0x48
Left= 0x4B
Right= 0x4D
Down= 0x50
# And the scan codes for the arrow keys are:
# Up: 0x48
# Left: 0x4B
# Right: 0x4D
# Down: 0x50
# C struct redefinitions
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( 0, hexKeyCode, 0x0008, 0, ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def ReleaseKey(hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput( 0, hexKeyCode, 0x0008 | 0x0002, 0, ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
key2hex = {'T': 84,
'Y': 89,
'U': 85,
'I': 73,
'O': 79,
'P': 80,
'G': 71,
'H': 72,
'J': 74,
'K': 75,
'L': 76,
';': 59,
'V': 86,
'B': 66,
'N': 78,
'M': 77,
',': 44,
'.': 46,
'\r': 13,
'Q': 81,
'W': 87,
'E': 69,
'R': 82,
'A': 65,
'S': 83,
'D': 68,
'F': 70,
'Z': 90,
'X': 88,
'C': 67,
'2': 50,
'3': 51}
if __name__ == '__main__':
PressKey(0x11)
time.sleep(1)
ReleaseKey(0x11)
time.sleep(1)