You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AutoHotInterception/C#/TestApp/Helpers/AhkKeys.cs

308 lines
11 KiB
C#

using System.Collections.Generic;
/* Get AHK specific Scancodes for a given key, as reported by AHK's GetKeySC() */
namespace TestApp.Helpers
{
public class AhkKey
{
public string Name { get; }
public ushort Code { get; }
public AhkKey(ushort code, string name)
{
Name = name;
Code = code;
}
public string LogCode()
{
return $"{Code}/0x{Code.ToString("X")}";
}
}
public static class AhkKeys
{
private static Dictionary<string, AhkKey> _keyNames = new Dictionary<string, AhkKey>();
private static Dictionary<ushort, AhkKey> _keyCodes = new Dictionary<ushort, AhkKey>();
static AhkKeys()
{
foreach (var key in KeyList){
AddKey(key.Key, key.Value);
}
}
// Given a Name, get Code
public static string Name(ushort code)
{
return Obj(code).Name;
}
// Given a Code, get Name
public static int Code(string name)
{
return Obj(name).Code;
}
// Given a Name, get AhkKey object
public static AhkKey Obj(string name)
{
var keyObj = _keyNames.ContainsKey(name) ? _keyNames[name] : new AhkKey(0, "UNKNOWN");
return keyObj;
}
// Given a Code, get AhkKey object
public static AhkKey Obj(ushort code)
{
var keyObj = _keyCodes.ContainsKey(code) ? _keyCodes[code] : new AhkKey(code, "UNKNOWN");
return keyObj;
}
private static void AddKey(ushort code, string name)
{
var key = new AhkKey(code, name);
_keyCodes.Add(code, key);
_keyNames.Add(name, key);
}
public static Dictionary<ushort, string> KeyList = new Dictionary<ushort, string>()
{
{1 /*(0x1)*/, "Escape"},
{2 /*(0x2)*/, "1"},
{3 /*(0x3)*/, "2"},
{4 /*(0x4)*/, "3"},
{5 /*(0x5)*/, "4"},
{6 /*(0x6)*/, "5"},
{7 /*(0x7)*/, "6"},
{8 /*(0x8)*/, "7"},
{9 /*(0x9)*/, "8"},
{10 /*(0xa)*/, "9"},
{11 /*(0xb)*/, "0"},
{12 /*(0xc)*/, "-"},
{13 /*(0xd)*/, "="},
{14 /*(0xe)*/, "Backspace"},
{15 /*(0xf)*/, "Tab"},
{16 /*(0x10)*/, "q"},
{17 /*(0x11)*/, "w"},
{18 /*(0x12)*/, "e"},
{19 /*(0x13)*/, "r"},
{20 /*(0x14)*/, "t"},
{21 /*(0x15)*/, "y"},
{22 /*(0x16)*/, "u"},
{23 /*(0x17)*/, "i"},
{24 /*(0x18)*/, "o"},
{25 /*(0x19)*/, "p"},
{26 /*(0x1a)*/, "["},
{27 /*(0x1b)*/, "]"},
{28 /*(0x1c)*/, "Enter"},
{29 /*(0x1d)*/, "LControl"},
{30 /*(0x1e)*/, "a"},
{31 /*(0x1f)*/, "s"},
{32 /*(0x20)*/, "d"},
{33 /*(0x21)*/, "f"},
{34 /*(0x22)*/, "g"},
{35 /*(0x23)*/, "h"},
{36 /*(0x24)*/, "j"},
{37 /*(0x25)*/, "k"},
{38 /*(0x26)*/, "l"},
{39 /*(0x27)*/, ";"},
{40 /*(0x28)*/, "'"},
{41 /*(0x29)*/, "`"},
{42 /*(0x2a)*/, "LShift"},
{43 /*(0x2b)*/, "#"},
{44 /*(0x2c)*/, "z"},
{45 /*(0x2d)*/, "x"},
{46 /*(0x2e)*/, "c"},
{47 /*(0x2f)*/, "v"},
{48 /*(0x30)*/, "b"},
{49 /*(0x31)*/, "n"},
{50 /*(0x32)*/, "m"},
{51 /*(0x33)*/, ","},
{52 /*(0x34)*/, "."},
{53 /*(0x35)*/, "/"},
{54 /*(0x36)*/, "Shift"},
{55 /*(0x37)*/, "NumpadMult"},
{56 /*(0x38)*/, "LAlt"},
{57 /*(0x39)*/, "Space"},
{58 /*(0x3a)*/, "CapsLock"},
{59 /*(0x3b)*/, "F1"},
{60 /*(0x3c)*/, "F2"},
{61 /*(0x3d)*/, "F3"},
{62 /*(0x3e)*/, "F4"},
{63 /*(0x3f)*/, "F5"},
{64 /*(0x40)*/, "F6"},
{65 /*(0x41)*/, "F7"},
{66 /*(0x42)*/, "F8"},
{67 /*(0x43)*/, "F9"},
{68 /*(0x44)*/, "F10"},
{69 /*(0x45)*/, "Pause"},
{70 /*(0x46)*/, "ScrollLock"},
{71 /*(0x47)*/, "NumpadHome"},
{72 /*(0x48)*/, "NumpadUp"},
{73 /*(0x49)*/, "NumpadPgUp"},
{74 /*(0x4a)*/, "NumpadSub"},
{75 /*(0x4b)*/, "NumpadLeft"},
{76 /*(0x4c)*/, "NumpadClear"},
{77 /*(0x4d)*/, "NumpadRight"},
{78 /*(0x4e)*/, "NumpadAdd"},
{79 /*(0x4f)*/, "NumpadEnd"},
{80 /*(0x50)*/, "NumpadDown"},
{81 /*(0x51)*/, "NumpadPgDn"},
{82 /*(0x52)*/, "NumpadIns"},
{83 /*(0x53)*/, "NumpadDel"},
//{84 /*(0x54)*/, "PrintScreen"}, Use 311 instead
{86 /*(0x56)*/, "\\"},
{87 /*(0x57)*/, "F11"},
{88 /*(0x58)*/, "F12"},
{99 /*(0x63)*/, "Help"},
{100 /*(0x64)*/, "F13"},
{101 /*(0x65)*/, "F14"},
{102 /*(0x66)*/, "F15"},
{103 /*(0x67)*/, "F16"},
{104 /*(0x68)*/, "F17"},
{105 /*(0x69)*/, "F18"},
{106 /*(0x6a)*/, "F19"},
{107 /*(0x6b)*/, "F20"},
{108 /*(0x6c)*/, "F21"},
{109 /*(0x6d)*/, "F22"},
{110 /*(0x6e)*/, "F23"},
{118 /*(0x76)*/, "F24"},
{272 /*(0x110)*/, "Media_Prev"},
{281 /*(0x119)*/, "Media_Next"},
{284 /*(0x11c)*/, "NumpadEnter"},
{285 /*(0x11d)*/, "RControl"},
{288 /*(0x120)*/, "Volume_Mute"},
{289 /*(0x121)*/, "Launch_App2"},
{290 /*(0x122)*/, "Media_Play_Pause"},
{292 /*(0x124)*/, "Media_Stop"},
{302 /*(0x12e)*/, "Volume_Down"},
{304 /*(0x130)*/, "Volume_Up"},
{306 /*(0x132)*/, "Browser_Home"},
{309 /*(0x135)*/, "NumpadDiv"},
{310 /*(0x136)*/, "RShift"},
{311 /*(0x136)*/, "PrintScreen"}, // Note: GetKeySC("PrintScreen") yields 311, but GetKeyName("sc54") (Dec of 84) yields "PrintScreen"
{312 /*(0x138)*/, "RAlt"},
{325 /*(0x145)*/, "Numlock"},
{326 /*(0x146)*/, "CtrlBreak"},
{327 /*(0x147)*/, "Home"},
{328 /*(0x148)*/, "Up"},
{329 /*(0x149)*/, "PgUp"},
{331 /*(0x14b)*/, "Left"},
{333 /*(0x14d)*/, "Right"},
{335 /*(0x14f)*/, "End"},
{336 /*(0x150)*/, "Down"},
{337 /*(0x151)*/, "PgDn"},
{338 /*(0x152)*/, "Insert"},
{339 /*(0x153)*/, "Delete"},
{347 /*(0x15b)*/, "LWin"},
{348 /*(0x15c)*/, "RWin"},
{349 /*(0x15d)*/, "AppsKey"},
{351 /*(0x15f)*/, "Sleep"},
{357 /*(0x165)*/, "Browser_Search"},
{358 /*(0x166)*/, "Browser_Favorites"},
{359 /*(0x167)*/, "Browser_Refresh"},
{360 /*(0x168)*/, "Browser_Stop"},
{361 /*(0x169)*/, "Browser_Forward"},
{362 /*(0x16a)*/, "Browser_Back"},
{363 /*(0x16b)*/, "Launch_App1"},
{364 /*(0x16c)*/, "Launch_Mail"},
{365 /*(0x16d)*/, "Launch_Media"},
// ============ DUPES ==================
// {89 /*(0x59)*/, "NumpadClear"} (Also 76)
// {124 /*(0x7c)*/, "Tab"} (Also 15)
// {257 /*(0x101)*/, "Escape"} (Also 1)
// {258 /*(0x102)*/, "1"} (Also 2)
// {259 /*(0x103)*/, "2"} (Also 3)
// {260 /*(0x104)*/, "3"} (Also 4)
// {261 /*(0x105)*/, "4"} (Also 5)
// {262 /*(0x106)*/, "5"} (Also 6)
// {263 /*(0x107)*/, "6"} (Also 7)
// {264 /*(0x108)*/, "7"} (Also 8)
// {265 /*(0x109)*/, "8"} (Also 9)
// {266 /*(0x10a)*/, "9"} (Also 10)
// {267 /*(0x10b)*/, "0"} (Also 11)
// {268 /*(0x10c)*/, "-"} (Also 12)
// {269 /*(0x10d)*/, "="} (Also 13)
// {270 /*(0x10e)*/, "Backspace"} (Also 14)
// {271 /*(0x10f)*/, "Tab"} (Also 15)
// {273 /*(0x111)*/, "w"} (Also 17)
// {274 /*(0x112)*/, "e"} (Also 18)
// {275 /*(0x113)*/, "r"} (Also 19)
// {276 /*(0x114)*/, "t"} (Also 20)
// {277 /*(0x115)*/, "y"} (Also 21)
// {278 /*(0x116)*/, "u"} (Also 22)
// {279 /*(0x117)*/, "i"} (Also 23)
// {280 /*(0x118)*/, "o"} (Also 24)
// {282 /*(0x11a)*/, "["} (Also 26)
// {283 /*(0x11b)*/, "]"} (Also 27)
// {286 /*(0x11e)*/, "a"} (Also 30)
// {287 /*(0x11f)*/, "s"} (Also 31)
// {291 /*(0x123)*/, "h"} (Also 35)
// {293 /*(0x125)*/, "k"} (Also 37)
// {294 /*(0x126)*/, "l"} (Also 38)
// {295 /*(0x127)*/, ";"} (Also 39)
// {296 /*(0x128)*/, "'"} (Also 40)
// {297 /*(0x129)*/, "`"} (Also 41)
// {298 /*(0x12a)*/, "Shift"} (Also 54)
// {299 /*(0x12b)*/, "#"} (Also 43)
// {300 /*(0x12c)*/, "z"} (Also 44)
// {301 /*(0x12d)*/, "x"} (Also 45)
// {303 /*(0x12f)*/, "v"} (Also 47)
// {305 /*(0x131)*/, "n"} (Also 49)
// {307 /*(0x133)*/, ","} (Also 51)
// {308 /*(0x134)*/, "."} (Also 52)
// {311 /*(0x137)*/, "PrintScreen"} (Also 84)
// {313 /*(0x139)*/, "Space"} (Also 57)
// {314 /*(0x13a)*/, "CapsLock"} (Also 58)
// {315 /*(0x13b)*/, "F1"} (Also 59)
// {316 /*(0x13c)*/, "F2"} (Also 60)
// {317 /*(0x13d)*/, "F3"} (Also 61)
// {318 /*(0x13e)*/, "F4"} (Also 62)
// {319 /*(0x13f)*/, "F5"} (Also 63)
// {320 /*(0x140)*/, "F6"} (Also 64)
// {321 /*(0x141)*/, "F7"} (Also 65)
// {322 /*(0x142)*/, "F8"} (Also 66)
// {323 /*(0x143)*/, "F9"} (Also 67)
// {324 /*(0x144)*/, "F10"} (Also 68)
// {330 /*(0x14a)*/, "NumpadSub"} (Also 74)
// {332 /*(0x14c)*/, "NumpadClear"} (Also 76)
// {334 /*(0x14e)*/, "NumpadAdd"} (Also 78)
// {340 /*(0x154)*/, "PrintScreen"} (Also 84)
// {342 /*(0x156)*/, "\"} (Also 86)
// {343 /*(0x157)*/, "F11"} (Also 87)
// {344 /*(0x158)*/, "F12"} (Also 88)
// {345 /*(0x159)*/, "NumpadClear"} (Also 76)
// {355 /*(0x163)*/, "Help"} (Also 99)
// {356 /*(0x164)*/, "F13"} (Also 100)
// {366 /*(0x16e)*/, "F23"} (Also 110)
// {374 /*(0x176)*/, "F24"} (Also 118)
// {380 /*(0x17c)*/, "Tab"} (Also 15)
};
}
}
// AHK Script to get names
//clipboard := ""
//log := "`n// ============ DUPES ==================`n"
//keys := {}
//Loop 512 {
// hex := Format("{:x}", A_Index)
// name := GetKeyName("sc" hex)
// if (name == "")
// continue
// str := "{" A_Index " /*(0x" hex ")*/, " """" name """" "}"
// ;~ if (A_Index == 86 || A_Index = 342)
// ;~ break = true
// if (keys.HasKey(name)){
// log.= "// " str " (Also " keys[name] ")`n"
// } else {
// clipboard.= str ",`n"
// keys[name] := A_Index
// }
//}
//clipboard.= log