了解C ++ VK_热键组合值

时间:2012-05-22 19:53:51

标签: c++ windows hotkeys windows-shell

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

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

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

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

2 个答案:

答案 0 :(得分: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

因此,当您将 CTRL ALT 标志带到单词的高位字节并组合它们时,您得到的0x0200 | 0x0400等于{ {1}}。将此与 A 的虚拟键码相结合,即0x0600,你的魔法常量为0x41

答案 1 :(得分:1)

来自MSDN上的IShellLink::GetHotkey

  

键盘快捷键的地址。虚拟键码在   低位字节,修饰符标志位于高位字节。该   修饰符标志可以是以下值的组合。

     

HOTKEYF_ALT

     

HOTKEYF_CONTROL

     

HOTKEYF_EXT

     

HOTKEYF_SHIFT

您可以使用传统的LOBYTE,HIBYTE和MAKEWORD宏来读/写...