From f037df037827ce8b14c455a1dee2f6fce93f4889 Mon Sep 17 00:00:00 2001 From: Inori Date: Sat, 17 Aug 2019 18:43:20 -0400 Subject: [PATCH] Fix GetKeyboardState not recognizing Shift presses --- binding/miniffi-binding.cpp | 1 + src/fake-api.cpp | 15 +++++++++++++++ src/fake-api.h | 3 +++ 3 files changed, 19 insertions(+) diff --git a/binding/miniffi-binding.cpp b/binding/miniffi-binding.cpp index 7c0ad602..d0777e4f 100644 --- a/binding/miniffi-binding.cpp +++ b/binding/miniffi-binding.cpp @@ -60,6 +60,7 @@ MiniFFI_GetFunctionHandle(void *lib, const char *func) CAPTURE(SetWindowTextA); CAPTURE(GetWindowRect); CAPTURE(RegisterHotKey); + CAPTURE(GetKeyboardState); #endif return SDL_LoadFunction(lib, func); } diff --git a/src/fake-api.cpp b/src/fake-api.cpp index e3ba45bc..3795126e 100644 --- a/src/fake-api.cpp +++ b/src/fake-api.cpp @@ -142,4 +142,19 @@ MKXP_RegisterHotKey(HWND hWnd, UINT fsModifiers, UINT vk) NOP_VAL(true) + +// Shift key from GetKeyboardState doesn't work for whatever reason +BOOL __stdcall +MKXP_GetKeyboardState(PBYTE lpKeyState) +{ + bool rc = GetKeyboardState(lpKeyState); + if (rc) + { + const char *sdlkeystate = (const char*)SDL_GetKeyboardState(0); + lpKeyState[VK_LSHIFT] = sdlkeystate[SDL_SCANCODE_LSHIFT] << 7; + lpKeyState[VK_RSHIFT] = sdlkeystate[SDL_SCANCODE_RSHIFT] << 7; + lpKeyState[VK_SHIFT] = (lpKeyState[VK_LSHIFT] || lpKeyState[VK_RSHIFT]) ? 0x80 : 0; + } + return rc; +} #endif diff --git a/src/fake-api.h b/src/fake-api.h index 6278785f..0fc14405 100644 --- a/src/fake-api.h +++ b/src/fake-api.h @@ -74,4 +74,7 @@ MKXP_RegisterHotKey(HWND hWnd, int id, UINT fsModifiers, UINT vk); + +BOOL __stdcall +MKXP_GetKeyboardState(PBYTE lpKeyState); #endif