@@ -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