Да, вот список:
vk_type sc_to_vk(sc_type aSC)
// These are mapped manually because MapVirtualKey() doesn't support them correctly, at least
// on some -- if not all -- OSs. The main app also relies upon the values assigned below to
// determine which keys should be handled by scan code rather than vk:
// Even though neither of the SHIFT keys are extended -- and thus could be mapped with MapVirtualKey()
// -- it seems better to define them explicitly because under Win9x (maybe just Win95).
// I'm pretty sure MapVirtualKey() would return VK_SHIFT instead of the left/right VK.
case SC_LSHIFT: return VK_LSHIFT; // Modifiers are listed first for performance.
case SC_RSHIFT: return VK_RSHIFT;
case SC_LCONTROL: return VK_LCONTROL;
case SC_RCONTROL: return VK_RCONTROL;
case SC_LALT: return VK_LMENU;
case SC_RALT: return VK_RMENU;
// Numpad keys require explicit mapping because MapVirtualKey() doesn't support them on all OSes.
// See comments in vk_to_sc() for details.
case SC_NUMLOCK: return VK_NUMLOCK;
case SC_NUMPADDIV: return VK_DIVIDE;
case SC_NUMPADMULT: return VK_MULTIPLY;
case SC_NUMPADSUB: return VK_SUBTRACT;
case SC_NUMPADADD: return VK_ADD;
case SC_NUMPADENTER: return VK_RETURN;
// The following are ambiguous because each maps to more than one VK. But be careful
// changing the value to the other choice because some callers rely upon the values
// assigned below to determine which keys should be handled by scan code rather than vk:
case SC_NUMPADDEL: return VK_DELETE;
case SC_NUMPADCLEAR: return VK_CLEAR;
case SC_NUMPADINS: return VK_INSERT;
case SC_NUMPADUP: return VK_UP;
case SC_NUMPADDOWN: return VK_DOWN;
case SC_NUMPADLEFT: return VK_LEFT;
case SC_NUMPADRIGHT: return VK_RIGHT;
case SC_NUMPADHOME: return VK_HOME;
case SC_NUMPADEND: return VK_END;
case SC_NUMPADPGUP: return VK_PRIOR;
case SC_NUMPADPGDN: return VK_NEXT;
// No callers currently need the following alternate virtual key mappings. If it is ever needed,
// could have a new aReturnSecondary parameter that if true, causes these to be returned rather
// than the above:
//case SC_NUMPADDEL: return VK_DECIMAL;
//case SC_NUMPADCLEAR: return VK_NUMPAD5; // Same key as Numpad5 on most keyboards?
//case SC_NUMPADINS: return VK_NUMPAD0;
//case SC_NUMPADUP: return VK_NUMPAD8;
//case SC_NUMPADDOWN: return VK_NUMPAD2;
//case SC_NUMPADLEFT: return VK_NUMPAD4;
//case SC_NUMPADRIGHT: return VK_NUMPAD6;
//case SC_NUMPADHOME: return VK_NUMPAD7;
//case SC_NUMPADEND: return VK_NUMPAD1;
//case SC_NUMPADPGUP: return VK_NUMPAD9;
//case SC_NUMPADPGDN: return VK_NUMPAD3;
case SC_APPSKEY: return VK_APPS; // Added in v1.1.17.00.
// Use the OS API call to resolve any not manually set above. This should correctly
// resolve even elements such as SC_INSERT, which is an extended scan code, because
// it passes in only the low-order byte which is SC_NUMPADINS. In the case of SC_INSERT
// and similar ones, MapVirtualKey() will return the same vk for both, which is correct.
// Only pass the LOBYTE because I think it fails to work properly otherwise.
// Also, DO NOT pass 3 for the 2nd param of MapVirtualKey() because apparently
// that is not compatible with Win9x so it winds up returning zero for keys
// such as UP, LEFT, HOME, and PGUP (maybe other sorts of keys too). This
// should be okay even on XP because the left/right specific keys have already
// been resolved above so don't need to be looked up here (LWIN and RWIN
// each have their own VK's so shouldn't be problem for the below call to resolve):
return MapVirtualKey((BYTE)aSC, 1);
https://github.com/Lexikos/AutoHotkey_L … _mouse.cpp