#include <windows.h>
#include <msp/graphics/window_private.h>
#include "keyboard.h"
+#include "keys.h"
#include "keys_private.h"
#define MAPVK_VK_TO_VSC 0
std::string Keyboard::get_button_name(unsigned btn) const
{
- if(btn==0)
+ if(btn==KEY_NONE)
return "None";
+ unsigned vkey = key_to_sys(btn);
+ unsigned scan = MapVirtualKey(vkey&0xFF, MAPVK_VK_TO_VSC);
+ scan |= vkey&0x100;
+
char buf[128];
- unsigned scan = MapVirtualKey(key_to_sys(btn), MAPVK_VK_TO_VSC);
if(!GetKeyNameText(scan<<16, buf, sizeof(buf)))
return Device::get_button_name(btn);
+
return buf;
}
{
case WM_KEYDOWN:
case WM_KEYUP:
- set_button_state(key_from_sys(event.wparam), event.msg==WM_KEYDOWN, true);
+ {
+ unsigned key = event.wparam | ((event.lparam>>16)&0x100);
+ if(key==VK_SHIFT)
+ {
+ if(((event.lparam>>16)&0xFF)==MapVirtualKey(VK_RSHIFT, MAPVK_VK_TO_VSC))
+ key = VK_RSHIFT;
+ else
+ key = VK_LSHIFT;
+ }
+ set_button_state(key_from_sys(key), event.msg==WM_KEYDOWN, true);
+ }
break;
case WM_CHAR:
signal_character.emit(event.wparam);