Skip to content

Commit 4941c1c

Browse files
committed
Merge pull request #151 from mgmartel/map-virtual-key
2 parents a09562e + c47f8b0 commit 4941c1c

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/keypress.c

+16-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@
1313

1414
/* Convenience wrappers around ugly APIs. */
1515
#if defined(IS_WINDOWS)
16-
#define WIN32_KEY_EVENT(key, flags) keybd_event(key, 0, flags, 0)
1716
#define WIN32_KEY_EVENT_WAIT(key, flags) \
18-
(WIN32_KEY_EVENT(key, flags), Sleep(DEADBEEF_RANDRANGE(0, 63)))
17+
(win32KeyEvent(key, flags), Sleep(DEADBEEF_RANDRANGE(0, 63)))
1918
#elif defined(USE_X11)
2019
#define X_KEY_EVENT(display, key, is_press) \
2120
(XTestFakeKeyEvent(display, \
@@ -27,6 +26,20 @@
2726
microsleep(DEADBEEF_UNIFORM(0.0, 62.5)))
2827
#endif
2928

29+
#if defined(IS_WINDOWS)
30+
void win32KeyEvent(int key, MMKeyFlags flags)
31+
{
32+
int scan = MapVirtualKey(key & 0xff, 0);
33+
34+
/* Set the scancode for keyup */
35+
if ( flags & KEYEVENTF_KEYUP ) {
36+
scan = scan | 0x80;
37+
}
38+
39+
keybd_event(key, scan, flags, 0);
40+
}
41+
#endif
42+
3043
void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags)
3144
{
3245
#if defined(IS_MACOSX)
@@ -47,7 +60,7 @@ void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags)
4760
if (flags & MOD_CONTROL) WIN32_KEY_EVENT_WAIT(K_CONTROL, dwFlags);
4861
if (flags & MOD_SHIFT) WIN32_KEY_EVENT_WAIT(K_SHIFT, dwFlags);
4962

50-
WIN32_KEY_EVENT(code, dwFlags);
63+
win32KeyEvent(code, dwFlags);
5164
#elif defined(USE_X11)
5265
Display *display = XGetMainDisplay();
5366
const Bool is_press = down ? True : False; /* Just to be safe. */

src/keypress.h

+5
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ extern "C"
5151

5252
#endif
5353

54+
#if defined(IS_WINDOWS)
55+
/* Send win32 key event for given key. */
56+
void win32KeyEvent(int key, MMKeyFlags flags);
57+
#endif
58+
5459
/* Toggles the given key down or up. */
5560
void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags);
5661

0 commit comments

Comments
 (0)