diff --git a/Windows/KeyboardDevice.cpp b/Windows/KeyboardDevice.cpp index 2eae3a9e37..73038065b5 100644 --- a/Windows/KeyboardDevice.cpp +++ b/Windows/KeyboardDevice.cpp @@ -90,6 +90,10 @@ std::map windowsTransTable = InitConstMap (VK_OEM_PLUS, KEYCODE_PLUS) (VK_LCONTROL, KEYCODE_CTRL_LEFT) (VK_RCONTROL, KEYCODE_CTRL_RIGHT) + (VK_LSHIFT, KEYCODE_SHIFT_LEFT) + (VK_RSHIFT, KEYCODE_SHIFT_RIGHT) + (VK_LMENU, KEYCODE_ALT_LEFT) + (VK_RMENU, KEYCODE_ALT_RIGHT) (VK_BACK, KEYCODE_BACK) (VK_SPACE, KEYCODE_SPACE) (VK_ESCAPE, KEYCODE_ESCAPE) @@ -105,7 +109,6 @@ std::map windowsTransTable = InitConstMap (VK_LEFT, KEYCODE_DPAD_LEFT) (VK_RIGHT, KEYCODE_DPAD_RIGHT) (VK_CAPITAL, KEYCODE_CAPS_LOCK) - (VK_TAB, KEYCODE_TAB) (VK_CLEAR, KEYCODE_CLEAR) (VK_PRINT, KEYCODE_SYSRQ) (VK_SCROLL, KEYCODE_SCROLL_LOCK) diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 12749bfb8f..f556a29da4 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -85,18 +85,23 @@ namespace MainWindow LRESULT CALLBACK DisplayProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); - HWND GetHWND() - { + HWND GetHWND() { return hwndMain; } - HWND GetDisplayHWND() - { + HWND GetDisplayHWND() { return hwndDisplay; } - void Init(HINSTANCE hInstance) - { + void SendCheckedNativeKey(KeyInput &key, int vKey) { + key.keyCode = windowsTransTable[(int)vKey]; + if (key.keyCode) { + key.flags = GetAsyncKeyState(vKey) ? KEY_DOWN : KEY_UP; + NativeKey(key); + } + } + + void Init(HINSTANCE hInstance) { #ifdef THEMES WTL::CTheme::IsThemingSupported(); #endif @@ -785,7 +790,7 @@ namespace MainWindow ShellExecute(NULL, "open", "http://forums.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL); break; - case ID_HELP_ABOUT: + case ID_HELP_ABOUT: DialogManager::EnableAll(FALSE); DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); DialogManager::EnableAll(TRUE); @@ -806,9 +811,25 @@ namespace MainWindow KeyInput key; key.deviceId = DEVICE_ID_KEYBOARD; key.flags = KEY_DOWN; - key.keyCode = windowsTransTable[(int)wParam]; - if (key.keyCode) - NativeKey(key); + switch ((int)wParam) { + case VK_SHIFT: + SendCheckedNativeKey(key, VK_LSHIFT); + SendCheckedNativeKey(key, VK_RSHIFT); + break; + case VK_CONTROL: + SendCheckedNativeKey(key, VK_LCONTROL); + SendCheckedNativeKey(key, VK_RCONTROL); + break; + case VK_MENU: + SendCheckedNativeKey(key, VK_LMENU); + SendCheckedNativeKey(key, VK_RMENU); + break; + default: + key.keyCode = windowsTransTable[(int)wParam]; + if (key.keyCode) + NativeKey(key); + break; + } } return 0; @@ -817,9 +838,26 @@ namespace MainWindow KeyInput key; key.deviceId = DEVICE_ID_KEYBOARD; key.flags = KEY_UP; - key.keyCode = windowsTransTable[(int)wParam]; - if (key.keyCode) - NativeKey(key); + switch ((int)wParam) { + case VK_SHIFT: + // We have no idea which was released, so just resend both. + SendCheckedNativeKey(key, VK_LSHIFT); + SendCheckedNativeKey(key, VK_RSHIFT); + break; + case VK_CONTROL: + SendCheckedNativeKey(key, VK_LCONTROL); + SendCheckedNativeKey(key, VK_RCONTROL); + break; + case VK_MENU: + SendCheckedNativeKey(key, VK_LMENU); + SendCheckedNativeKey(key, VK_RMENU); + break; + default: + key.keyCode = windowsTransTable[(int)wParam]; + if (key.keyCode) + NativeKey(key); + break; + } } return 0;