-
Notifications
You must be signed in to change notification settings - Fork 39
/
key_output.py
152 lines (134 loc) · 4.63 KB
/
key_output.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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import ctypes
SendInput = ctypes.windll.user32.SendInput
PUL = ctypes.POINTER(ctypes.c_ulong)
# http://www.flint.jp/misc/?q=dik&lang=en
w_char=0x11
s_char=0x1F
a_char=0x1E
d_char=0x20
q_char=0x10
n_char=0x31 # is bound on my machine to clear decals
r_char=0x13
one_char=0x02
two_char=0x03
three_char=0x04
four_char=0x05
five_char=0x06
seven_char=0x08
ctrl_char=0x1D
shift_char=0x2A
space_char=0x39
b_char=0x30
i_char=0x17
v_char=0x2F
h_char=0x23
o_char=0x18
p_char=0x19
e_char=0x12
c_char_=0x2E
t_char=0x14
u_char=0x16
m_char=0x32
g_char=0x22
k_char=0x25
x_char=0x2D
c_char2=0x2E
y_char=0x15
under_char=0x0C # actually minus, use in combo w shift for underscore
cons_char=0x29
ret_char=0x1C
esc_char=0x01
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)]
def set_pos(x, y, Wd, Hd):
# raw input off, mouse sensitivity 2.50, res 800x600, box =400
x = 1 + int(x * 65536./Wd)
y = 1 + int(y * 65536./Hd)
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.mi = MouseInput(x, y, 0, (0x0001 | 0x8000), 0, ctypes.pointer(extra))
command=Input(ctypes.c_ulong(0), ii_)
# comment this out if want to test something without movement
SendInput(1, ctypes.pointer(command), ctypes.sizeof(command))
def HoldKey(hexKeyCode):
# with ctypes only
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))
def left_click():
# https://www.reddit.com/r/learnpython/comments/bognbs/direct_input_for_python_with_pynput/
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.mi = MouseInput(0, 0, 0, 0x0002, 0, ctypes.pointer(extra))
x= Input(ctypes.c_ulong(0), ii_)
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.mi = MouseInput(0, 0, 0, 0x0004, 0, ctypes.pointer(extra))
x= Input(ctypes.c_ulong(0), ii_)
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def hold_left_click():
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.mi = MouseInput(0, 0, 0, 0x0002, 0, ctypes.pointer(extra))
x=Input(ctypes.c_ulong(0), ii_)
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def release_left_click():
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.mi = MouseInput(0, 0, 0, 0x0004, 0, ctypes.pointer(extra))
x=Input(ctypes.c_ulong(0), ii_)
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def right_click():
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.mi = MouseInput(0, 0, 0, 0x0008, 0, ctypes.pointer(extra))
x= Input(ctypes.c_ulong(0), ii_)
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.mi = MouseInput(0, 0, 0, 0x0010, 0, ctypes.pointer(extra))
x= Input(ctypes.c_ulong(0), ii_)
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def hold_right_click():
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.mi = MouseInput(0, 0, 0, 0x0008, 0, ctypes.pointer(extra))
x=Input(ctypes.c_ulong(0), ii_)
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def release_right_click():
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.mi = MouseInput(0, 0, 0, 0x0010, 0, ctypes.pointer(extra))
x=Input(ctypes.c_ulong(0), ii_)
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))