Skip to content

Commit a711f36

Browse files
committed
Finished fixing the scancode to keycode translation for win32.
1 parent 3b04308 commit a711f36

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

windows/hook_callback.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,18 +193,22 @@ LRESULT CALLBACK keyboard_event_proc(int nCode, WPARAM wParam, LPARAM lParam) {
193193
}
194194
*/
195195

196+
// Fire key pressed event.
197+
event.type = EVENT_KEY_PRESSED;
198+
event.mask = get_modifiers();
199+
200+
event.data.keyboard.keycode = kbhook->scanCode;
201+
if (kbhook->flags != 0x00) {
202+
event.data.keyboard.keycode |= ((UINT8) kbhook->flags ^ 0x0F) << 8;
203+
}
204+
196205
// FIXME Remove this log entry as it is only for testing.
197206
fprintf(stdout, "%s [%u]: kbhook->flags == %#X; kbhook->scanCode == %#X; kbhook->keyCode == %#X\n",
198207
__FUNCTION__, __LINE__,
199208
kbhook->flags,
200209
kbhook->scanCode,
201-
(UINT16) ( ~kbhook->flags << 12 | (BYTE) kbhook->scanCode) );
202-
203-
// Fire key pressed event.
204-
event.type = EVENT_KEY_PRESSED;
205-
event.mask = get_modifiers();
206-
207-
event.data.keyboard.keycode = (UINT16) ( ~kbhook->flags << 12 | (BYTE) kbhook->scanCode);
210+
event.data.keyboard.keycode);
211+
208212
event.data.keyboard.rawcode = kbhook->vkCode;
209213
event.data.keyboard.keychar = CHAR_UNDEFINED;
210214

@@ -283,7 +287,11 @@ LRESULT CALLBACK keyboard_event_proc(int nCode, WPARAM wParam, LPARAM lParam) {
283287
event.type = EVENT_KEY_RELEASED;
284288
event.mask = get_modifiers();
285289

286-
event.data.keyboard.keycode = (~kbhook->flags << 20) | kbhook->scanCode;
290+
event.data.keyboard.keycode = kbhook->scanCode;
291+
if (kbhook->flags != 0x00) {
292+
event.data.keyboard.keycode |= ((UINT8) kbhook->flags ^ 0x0F) << 8;
293+
}
294+
287295
event.data.keyboard.rawcode = kbhook->vkCode;
288296
event.data.keyboard.keychar = CHAR_UNDEFINED;
289297

0 commit comments

Comments
 (0)