Fix GetKeyboardState not recognizing Shift presses

This commit is contained in:
Inori 2019-08-17 18:43:20 -04:00 committed by Inori
parent df4cf83e93
commit 8243802921
3 changed files with 19 additions and 0 deletions

View file

@ -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);
}

View file

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

View file

@ -74,4 +74,7 @@ MKXP_RegisterHotKey(HWND hWnd,
int id,
UINT fsModifiers,
UINT vk);
BOOL __stdcall
MKXP_GetKeyboardState(PBYTE lpKeyState);
#endif