diff --git a/src/keyboard.c b/src/keyboard.c index 5298ce5..feab45c 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -39,13 +39,20 @@ void keyboard_hook_exit() LRESULT CALLBACK keyboard_hook_proc(int code, WPARAM wParam, LPARAM lParam) { - if (code < 0 || !wParam) // code != HC_ACTION || + if (code < 0 || !wParam) return CallNextHookEx(g_keyboard_hook, code, wParam, lParam); - BOOL alt_down = (lParam & (1 << 29)); + BOOL alt_down = !!(lParam & (1 << 29)); BOOL key_down = !(lParam & (1 << 30)); BOOL key_up = !!(lParam & (1 << 31)); + //TRACE("VK_MENU - wParam=%u, key_down=%u, key_up=%u, alt_down=%u\n", wParam, key_down, key_up, alt_down); + + if (wParam == VK_MENU && (key_up || key_down)) /* Fix for alt key being stuck on alt+tab in some games */ + { + g_ddraw.alt_key_down = alt_down; + } + if (wParam == g_config.hotkeys.toggle_fullscreen && alt_down) { if (key_down) diff --git a/src/wndproc.c b/src/wndproc.c index 2da7daf..0d65fce 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -707,7 +707,10 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } if (wParam && g_ddraw.alt_key_down && !g_config.releasealt) + { PostMessageA(g_ddraw.hwnd, WM_SYSKEYUP, VK_MENU, 0); + g_ddraw.alt_key_down = FALSE; + } return 0; } @@ -758,20 +761,10 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } case WM_SYSKEYDOWN: { - if (wParam == VK_MENU) - { - g_ddraw.alt_key_down = TRUE; - } - break; } case WM_SYSKEYUP: { - if (wParam == VK_MENU) - { - g_ddraw.alt_key_down = FALSE; - } - if (wParam == VK_TAB || (wParam && wParam == g_config.hotkeys.toggle_fullscreen)) { return DefWindowProc(hWnd, uMsg, wParam, lParam);