4
4
5
5
#include <ctype.h> /* For isupper() */
6
6
7
- /* Convenience wrappers around ugly APIs. */
8
- #define WIN32_KEY_EVENT_WAIT (key , flags ) \
9
- (win32KeyEvent(key, flags), Sleep(DEADBEEF_RANDRANGE(0, 63)))
10
-
11
7
void win32KeyEvent (int key , MMKeyFlags flags )
12
8
{
9
+ UINT scan = MapVirtualKey (key & 0xff , MAPVK_VK_TO_VSC );
10
+
13
11
/* Set the scan code for extended keys */
14
12
switch (key )
15
13
{
@@ -53,9 +51,11 @@ void win32KeyEvent(int key, MMKeyFlags flags)
53
51
54
52
INPUT keyboardInput ;
55
53
keyboardInput .type = INPUT_KEYBOARD ;
54
+ keyboardInput .ki .wScan = (WORD )scan ;
56
55
keyboardInput .ki .wVk = (WORD )key ;
57
- keyboardInput .ki .dwFlags = flags ;
58
- SendInput (1 , & keyboardInput , sizeof (INPUT ));
56
+ keyboardInput .ki .dwFlags = KEYEVENTF_SCANCODE | flags ;
57
+ keyboardInput .ki .time = 0 ;
58
+ SendInput (1 , & keyboardInput , sizeof (keyboardInput ));
59
59
}
60
60
61
61
void toggleKeyCode (MMKeyCode code , const bool down , MMKeyFlags flags )
@@ -66,19 +66,19 @@ void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags)
66
66
{
67
67
/* Parse modifier keys. */
68
68
if (flags & MOD_META )
69
- WIN32_KEY_EVENT_WAIT (K_META , dwFlags );
69
+ win32KeyEvent (K_META , dwFlags );
70
70
if (flags & MOD_ALT )
71
- WIN32_KEY_EVENT_WAIT (K_ALT , dwFlags );
71
+ win32KeyEvent (K_ALT , dwFlags );
72
72
if (flags & MOD_CONTROL )
73
- WIN32_KEY_EVENT_WAIT (K_CONTROL , dwFlags );
73
+ win32KeyEvent (K_CONTROL , dwFlags );
74
74
if (flags & MOD_SHIFT )
75
- WIN32_KEY_EVENT_WAIT (K_SHIFT , dwFlags );
75
+ win32KeyEvent (K_SHIFT , dwFlags );
76
76
77
- WIN32_KEY_EVENT_WAIT (code , dwFlags );
77
+ win32KeyEvent (code , dwFlags );
78
78
}
79
79
else
80
80
{
81
- WIN32_KEY_EVENT_WAIT (code , dwFlags );
81
+ win32KeyEvent (code , dwFlags );
82
82
83
83
/* Parse modifier keys. */
84
84
if (flags & MOD_META )
0 commit comments