Baby Language Lab Scripts
A collection of data processing tools.
 All Classes Namespaces Files Functions Variables Pages
keyboard.py
Go to the documentation of this file.
1 import win32api
2 import win32con
3 import time
4 
5 class Keyboard(object):
6  COMBS = {
7  'A': [
8  'SHIFT',
9  'a'],
10  'B': [
11  'SHIFT',
12  'b'],
13  'C': [
14  'SHIFT',
15  'c'],
16  'D': [
17  'SHIFT',
18  'd'],
19  'E': [
20  'SHIFT',
21  'e'],
22  'F': [
23  'SHIFT',
24  'f'],
25  'G': [
26  'SHIFT',
27  'g'],
28  'H': [
29  'SHIFT',
30  'h'],
31  'I': [
32  'SHIFT',
33  'i'],
34  'J': [
35  'SHIFT',
36  'j'],
37  'K': [
38  'SHIFT',
39  'k'],
40  'L': [
41  'SHIFT',
42  'l'],
43  'M': [
44  'SHIFT',
45  'm'],
46  'N': [
47  'SHIFT',
48  'n'],
49  'O': [
50  'SHIFT',
51  'o'],
52  'P': [
53  'SHIFT',
54  'p'],
55  'R': [
56  'SHIFT',
57  'r'],
58  'S': [
59  'SHIFT',
60  's'],
61  'T': [
62  'SHIFT',
63  't'],
64  'U': [
65  'SHIFT',
66  'u'],
67  'W': [
68  'SHIFT',
69  'w'],
70  'X': [
71  'SHIFT',
72  'x'],
73  'Y': [
74  'SHIFT',
75  'y'],
76  'Z': [
77  'SHIFT',
78  'z'],
79  'V': [
80  'SHIFT',
81  'v'],
82  'Q': [
83  'SHIFT',
84  'q'],
85  '?': [
86  'SHIFT',
87  '/'],
88  '>': [
89  'SHIFT',
90  '.'],
91  '<': [
92  'SHIFT',
93  ','],
94  '"': [
95  'SHIFT',
96  "'"],
97  ':': [
98  'SHIFT',
99  ';'],
100  '|': [
101  'SHIFT',
102  '\\'],
103  '}': [
104  'SHIFT',
105  ']'],
106  '{': [
107  'SHIFT',
108  '['],
109  '+': [
110  'SHIFT',
111  '='],
112  '_': [
113  'SHIFT',
114  '-'],
115  '!': [
116  'SHIFT',
117  '1'],
118  '@': [
119  'SHIFT',
120  '2'],
121  '#': [
122  'SHIFT',
123  '3'],
124  '$': [
125  'SHIFT',
126  '4'],
127  '%': [
128  'SHIFT',
129  '5'],
130  '^': [
131  'SHIFT',
132  '6'],
133  '&': [
134  'SHIFT',
135  '7'],
136  '*': [
137  'SHIFT',
138  '8'],
139  '(': [
140  'SHIFT',
141  '9'],
142  ')': [
143  'SHIFT',
144  '0'],
145  'ALT-TAB': [
146  'ALT',
147  'TAB'],
148  }
149  BASE = {
150  '0': 48,
151  '1': 49,
152  '2': 50,
153  '3': 51,
154  '4': 52,
155  '5': 53,
156  '6': 54,
157  '7': 55,
158  '8': 56,
159  '9': 57,
160  'a': 65,
161  'b': 66,
162  'c': 67,
163  'd': 68,
164  'e': 69,
165  'f': 70,
166  'g': 71,
167  'h': 72,
168  'i': 73,
169  'j': 74,
170  'k': 75,
171  'l': 76,
172  'm': 77,
173  'n': 78,
174  'o': 79,
175  'p': 80,
176  'q': 81,
177  'r': 82,
178  's': 83,
179  't': 84,
180  'u': 85,
181  'v': 86,
182  'w': 87,
183  'x': 88,
184  'y': 89,
185  'z': 90,
186  '.': 190,
187  '-': 189,
188  ',': 188,
189  '=': 187,
190  '/': 191,
191  ';': 186,
192  '[': 219,
193  ']': 221,
194  '\\': 220,
195  "'": 222,
196  'ALT': 18,
197  'TAB': 9,
198  'CAPSLOCK': 20,
199  'ENTER': 13,
200  'BS': 8,
201  'CTRL': 17,
202  'ESC': 27,
203  ' ': 32,
204  'END': 35,
205  'DOWN': 40,
206  'LEFT': 37,
207  'UP': 38,
208  'RIGHT': 39,
209  'SELECT': 41,
210  'PRINTSCR': 44,
211  'INS': 45,
212  'DEL': 46,
213  'LWIN': 91,
214  'RWIN': 92,
215  'LSHIFT': 160,
216  'SHIFT': 161,
217  'LCTRL': 162,
218  'RCTRL': 163,
219  'VOLUP': 175,
220  'DOLDOWN': 174,
221  'NUMLOCK': 144,
222  'SCROLL': 145,
223  }
224 
225  @staticmethod
226  def key_down(key_cd):
227  win32api.keybd_event(key_cd, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0)
228 
229  @staticmethod
230  def key_up(key_cd):
231  win32api.keybd_event(key_cd, 0, win32con.KEYEVENTF_EXTENDEDKEY | win32con.KEYEVENTF_KEYUP, 0)
232 
233  @staticmethod
234  def key_press(c, press_interval=0.05):
235  if c in Keyboard.BASE:
236  Keyboard.key_down(Keyboard.BASE[c])
237  time.sleep(press_interval)
238  Keyboard.key_up(Keyboard.BASE[c])
239 
240  elif c in Keyboard.COMBS:
241  Keyboard.key_down(Keyboard.BASE[Keyboard.COMBS[c][0]])
242  time.sleep(press_interval)
243  Keyboard.key_down(Keyboard.BASE[Keyboard.COMBS[c][1]])
244  time.sleep(press_interval)
245  Keyboard.key_up(Keyboard.BASE[Keyboard.COMBS[c][1]])
246  time.sleep(press_interval)
247  Keyboard.key_up(Keyboard.BASE[Keyboard.COMBS[c][0]])
248 
249  @staticmethod
250  def type_msg(msg, press_interval=0.05):
251  for c in msg:
252  Keyboard.key_press(c, press_interval)