54 lines
1.5 KiB
C++
54 lines
1.5 KiB
C++
//
|
|
// Created by WolverinDEV on 01/05/2020.
|
|
//
|
|
|
|
#include "./Win32KeyboardHook.h"
|
|
|
|
namespace hooks {
|
|
std::string key_string_from_vk(DWORD code, bool extended) {
|
|
auto scan_code = MapVirtualKey(code, MAPVK_VK_TO_VSC);
|
|
if(extended)
|
|
scan_code |= KF_EXTENDED;
|
|
|
|
char key_buffer[255];
|
|
auto length = GetKeyNameTextA(scan_code << 16, key_buffer, 255);
|
|
if(length == 0)
|
|
return "error";
|
|
else
|
|
return std::string{key_buffer, (size_t) length};
|
|
}
|
|
|
|
std::string key_string_from_sc(USHORT code) {
|
|
char key_buffer[255];
|
|
auto length = GetKeyNameTextA(code << 16, key_buffer, 255);
|
|
if(length == 0)
|
|
return "error";
|
|
else
|
|
return std::string{key_buffer, (size_t) length};
|
|
}
|
|
|
|
//https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes
|
|
KeyboardHook::KeyType key_type_from_vk(DWORD vk_code) {
|
|
using KeyType = KeyboardHook::KeyType;
|
|
|
|
switch(vk_code) {
|
|
case VK_CONTROL:
|
|
case VK_LCONTROL:
|
|
case VK_RCONTROL:
|
|
return KeyType::KEY_CTRL;
|
|
case VK_MENU:
|
|
case VK_RMENU:
|
|
case VK_LMENU:
|
|
return KeyType::KEY_ALT;
|
|
case VK_SHIFT:
|
|
case VK_RSHIFT:
|
|
case VK_LSHIFT:
|
|
return KeyType::KEY_SHIFT;
|
|
case VK_LWIN:
|
|
case VK_RWIN:
|
|
return KeyType::KEY_WIN;
|
|
default:
|
|
return KeyType::KEY_NORMAL;
|
|
}
|
|
}
|
|
} |