1#[doc(hidden)]
2pub use winapi::um::winuser::GetAsyncKeyState;
3
4#[macro_export]
13macro_rules! detect_keydown {
14 ($($keycode:expr),*) => {
15 if true $(&& (|keycode| unsafe { $crate::GetAsyncKeyState(keycode) })($keycode) & 0x8000 != 0 )* {
16 true
17 } else {
18 false
19 }
20 };
21}
22
23pub fn detect_keypress(code: i32) -> bool {
34 unsafe { GetAsyncKeyState(code) & 1 != 0 }
35}
36
37pub struct VirtualKeyCode;
40impl VirtualKeyCode {
41 pub const VK_LBUTTON: i32 = 0x01;
42 pub const VK_RBUTTON: i32 = 0x02;
43 pub const VK_CANCEL: i32 = 0x03;
44 pub const VK_MBUTTON: i32 = 0x04;
45 pub const VK_XBUTTON1: i32 = 0x05;
46 pub const VK_XBUTTON2: i32 = 0x06;
47 pub const VK_BACK: i32 = 0x08;
48 pub const VK_TAB: i32 = 0x09;
49 pub const VK_CLEAR: i32 = 0x0C;
50 pub const VK_RETURN: i32 = 0x0D;
51 pub const VK_SHIFT: i32 = 0x10;
52 pub const VK_CONTROL: i32 = 0x11;
53 pub const VK_MENU: i32 = 0x12;
54 pub const VK_PAUSE: i32 = 0x13;
55 pub const VK_CAPITAL: i32 = 0x14;
56 pub const VK_KANA: i32 = 0x15;
57 pub const VK_HANGUEL: i32 = 0x15;
58 pub const VK_HANGUL: i32 = 0x15;
59 pub const VK_IME_ON: i32 = 0x16;
60 pub const VK_JUNJA: i32 = 0x17;
61 pub const VK_FINAL: i32 = 0x18;
62 pub const VK_HANJA: i32 = 0x19;
63 pub const VK_KANJI: i32 = 0x19;
64 pub const VK_IME_OFF: i32 = 0x1A;
65 pub const VK_ESCAPE: i32 = 0x1B;
66 pub const VK_CONVERT: i32 = 0x1C;
67 pub const VK_NONCONVERT: i32 = 0x1D;
68 pub const VK_ACCEPT: i32 = 0x1E;
69 pub const VK_MODECHANGE: i32 = 0x1F;
70 pub const VK_SPACE: i32 = 0x20;
71 pub const VK_PRIOR: i32 = 0x21;
72 pub const VK_NEXT: i32 = 0x22;
73 pub const VK_END: i32 = 0x23;
74 pub const VK_HOME: i32 = 0x24;
75 pub const VK_LEFT: i32 = 0x25;
76 pub const VK_UP: i32 = 0x26;
77 pub const VK_RIGHT: i32 = 0x27;
78 pub const VK_DOWN: i32 = 0x28;
79 pub const VK_SELECT: i32 = 0x29;
80 pub const VK_PRINT: i32 = 0x2A;
81 pub const VK_EXECUTE: i32 = 0x2B;
82 pub const VK_SNAPSHOT: i32 = 0x2C;
83 pub const VK_INSERT: i32 = 0x2D;
84 pub const VK_DELETE: i32 = 0x2E;
85 pub const VK_HELP: i32 = 0x2F;
86 pub const VK_0: i32 = 0x30;
87 pub const VK_1: i32 = 0x31;
88 pub const VK_2: i32 = 0x32;
89 pub const VK_3: i32 = 0x33;
90 pub const VK_4: i32 = 0x34;
91 pub const VK_5: i32 = 0x35;
92 pub const VK_6: i32 = 0x36;
93 pub const VK_7: i32 = 0x37;
94 pub const VK_8: i32 = 0x38;
95 pub const VK_9: i32 = 0x39;
96 pub const VK_A: i32 = 0x41;
97 pub const VK_B: i32 = 0x42;
98 pub const VK_C: i32 = 0x43;
99 pub const VK_D: i32 = 0x44;
100 pub const VK_E: i32 = 0x45;
101 pub const VK_F: i32 = 0x46;
102 pub const VK_G: i32 = 0x47;
103 pub const VK_H: i32 = 0x48;
104 pub const VK_I: i32 = 0x49;
105 pub const VK_J: i32 = 0x4A;
106 pub const VK_K: i32 = 0x4B;
107 pub const VK_L: i32 = 0x4C;
108 pub const VK_M: i32 = 0x4D;
109 pub const VK_N: i32 = 0x4E;
110 pub const VK_O: i32 = 0x4F;
111 pub const VK_P: i32 = 0x50;
112 pub const VK_Q: i32 = 0x51;
113 pub const VK_R: i32 = 0x52;
114 pub const VK_S: i32 = 0x53;
115 pub const VK_T: i32 = 0x54;
116 pub const VK_U: i32 = 0x55;
117 pub const VK_V: i32 = 0x56;
118 pub const VK_W: i32 = 0x57;
119 pub const VK_X: i32 = 0x58;
120 pub const VK_Y: i32 = 0x59;
121 pub const VK_Z: i32 = 0x5A;
122 pub const VK_LWIN: i32 = 0x5B;
123 pub const VK_RWIN: i32 = 0x5C;
124 pub const VK_APPS: i32 = 0x5D;
125 pub const VK_SLEEP: i32 = 0x5F;
126 pub const VK_NUMPAD0: i32 = 0x60;
127 pub const VK_NUMPAD1: i32 = 0x61;
128 pub const VK_NUMPAD2: i32 = 0x62;
129 pub const VK_NUMPAD3: i32 = 0x63;
130 pub const VK_NUMPAD4: i32 = 0x64;
131 pub const VK_NUMPAD5: i32 = 0x65;
132 pub const VK_NUMPAD6: i32 = 0x66;
133 pub const VK_NUMPAD7: i32 = 0x67;
134 pub const VK_NUMPAD8: i32 = 0x68;
135 pub const VK_NUMPAD9: i32 = 0x69;
136 pub const VK_MULTIPLY: i32 = 0x6A;
137 pub const VK_ADD: i32 = 0x6B;
138 pub const VK_SEPARATOR: i32 = 0x6C;
139 pub const VK_SUBTRACT: i32 = 0x6D;
140 pub const VK_DECIMAL: i32 = 0x6E;
141 pub const VK_DIVIDE: i32 = 0x6F;
142 pub const VK_F1: i32 = 0x70;
143 pub const VK_F2: i32 = 0x71;
144 pub const VK_F3: i32 = 0x72;
145 pub const VK_F4: i32 = 0x73;
146 pub const VK_F5: i32 = 0x74;
147 pub const VK_F6: i32 = 0x75;
148 pub const VK_F7: i32 = 0x76;
149 pub const VK_F8: i32 = 0x77;
150 pub const VK_F9: i32 = 0x78;
151 pub const VK_F10: i32 = 0x79;
152 pub const VK_F11: i32 = 0x7A;
153 pub const VK_F12: i32 = 0x7B;
154 pub const VK_F13: i32 = 0x7C;
155 pub const VK_F14: i32 = 0x7D;
156 pub const VK_F15: i32 = 0x7E;
157 pub const VK_F16: i32 = 0x7F;
158 pub const VK_F17: i32 = 0x80;
159 pub const VK_F18: i32 = 0x81;
160 pub const VK_F19: i32 = 0x82;
161 pub const VK_F20: i32 = 0x83;
162 pub const VK_F21: i32 = 0x84;
163 pub const VK_F22: i32 = 0x85;
164 pub const VK_F23: i32 = 0x86;
165 pub const VK_F24: i32 = 0x87;
166 pub const VK_NUMLOCK: i32 = 0x90;
167 pub const VK_SCROLL: i32 = 0x91;
168 pub const VK_LSHIFT: i32 = 0xA0;
169 pub const VK_RSHIFT: i32 = 0xA1;
170 pub const VK_LCONTROL: i32 = 0xA2;
171 pub const VK_RCONTROL: i32 = 0xA3;
172 pub const VK_LMENU: i32 = 0xA4;
173 pub const VK_RMENU: i32 = 0xA5;
174 pub const VK_BROWSER_BACK: i32 = 0xA6;
175 pub const VK_BROWSER_FORWARD: i32 = 0xA7;
176 pub const VK_BROWSER_REFRESH: i32 = 0xA8;
177 pub const VK_BROWSER_STOP: i32 = 0xA9;
178 pub const VK_BROWSER_SEARCH: i32 = 0xAA;
179 pub const VK_BROWSER_FAVORITES: i32 = 0xAB;
180 pub const VK_BROWSER_HOME: i32 = 0xAC;
181 pub const VK_VOLUME_MUTE: i32 = 0xAD;
182 pub const VK_VOLUME_DOWN: i32 = 0xAE;
183 pub const VK_VOLUME_UP: i32 = 0xAF;
184 pub const VK_MEDIA_NEXT_TRACK: i32 = 0xB0;
185 pub const VK_MEDIA_PREV_TRACK: i32 = 0xB1;
186 pub const VK_MEDIA_STOP: i32 = 0xB2;
187 pub const VK_MEDIA_PLAY_PAUSE: i32 = 0xB3;
188 pub const VK_LAUNCH_MAIL: i32 = 0xB4;
189 pub const VK_LAUNCH_MEDIA_SELECT: i32 = 0xB5;
190 pub const VK_LAUNCH_APP1: i32 = 0xB6;
191 pub const VK_LAUNCH_APP2: i32 = 0xB7;
192 pub const VK_OEM_1: i32 = 0xBA;
193 pub const VK_OEM_PLUS: i32 = 0xBB;
194 pub const VK_OEM_COMMA: i32 = 0xBC;
195 pub const VK_OEM_MINUS: i32 = 0xBD;
196 pub const VK_OEM_PERIOD: i32 = 0xBE;
197 pub const VK_OEM_2: i32 = 0xBF;
198 pub const VK_OEM_3: i32 = 0xC0;
199 pub const VK_OEM_4: i32 = 0xDB;
200 pub const VK_OEM_5: i32 = 0xDC;
201 pub const VK_OEM_6: i32 = 0xDD;
202 pub const VK_OEM_7: i32 = 0xDE;
203 pub const VK_OEM_8: i32 = 0xDF;
204 pub const VK_OEM_102: i32 = 0xE2;
205 pub const VK_PROCESSKEY: i32 = 0xE5;
206 pub const VK_PACKET: i32 = 0xE7;
207 pub const VK_ATTN: i32 = 0xF6;
208 pub const VK_CRSEL: i32 = 0xF7;
209 pub const VK_EXSEL: i32 = 0xF8;
210 pub const VK_EREOF: i32 = 0xF9;
211 pub const VK_PLAY: i32 = 0xFA;
212 pub const VK_ZOOM: i32 = 0xFB;
213 pub const VK_NONAME: i32 = 0xFC;
214 pub const VK_PA1: i32 = 0xFD;
215 pub const VK_OEM_CLEAR: i32 = 0xFE;
216}