了解C++ VK_热键组合值

b1n*_*phy 2 c++ windows hotkeys windows-shell

我一直在使用IShellLink界面,并对如何映射热键组合感到困惑.

仅应用单个热键时,返回值对应于记录的虚拟键代码; 例如F5 == 0x74

但是,当使用组合时,会返回一个我没有解密的无证值; 例如CTRL + ALT + A == 0x641

使用什么操作来组合多个虚拟键码?

Dav*_*nan 6

这在以下文档中进行了解释IShellLink::GetHotkey:

虚拟键代码位于低位字节中,修饰符标志位于高位字节中.修饰符标志可以是以下值的组合:

  • HOTKEYF_ALT(ALT键)
  • HOTKEYF_CONTROL(CTRL键)
  • HOTKEYF_EXT(扩展键)
  • HOTKEYF_SHIFT(SHIFT键)

这些标志定义如下:

#define HOTKEYF_SHIFT           0x01
#define HOTKEYF_CONTROL         0x02
#define HOTKEYF_ALT             0x04
#define HOTKEYF_EXT             0x08
Run Code Online (Sandbox Code Playgroud)

因此,当你将CTRLALT标志带到一个单词的高位字节并组合它们时,你得到的0x0200 | 0x0400是等于0x0600.与虚拟键码组合这A0x41,你有你的魔法不变0x0641.