私はIShellLinkインターフェイスで遊んでいますが、ホットキーの組み合わせがどのようにマッピングされるかについて混乱しています。
単一のホットキーのみが適用される場合、戻り値は文書化された仮想キーコードに対応します。例:F5 == 0x74
ただし、組み合わせを使用すると、解読に問題があるという文書化されていない値が返されます。例:CTRL + ALT + A == 0x641
複数の仮想キーコードを組み合わせるためにどのような操作が使用されますか?
私はIShellLinkインターフェイスで遊んでいますが、ホットキーの組み合わせがどのようにマッピングされるかについて混乱しています。
単一のホットキーのみが適用される場合、戻り値は文書化された仮想キーコードに対応します。例:F5 == 0x74
ただし、組み合わせを使用すると、解読に問題があるという文書化されていない値が返されます。例:CTRL + ALT + A == 0x641
複数の仮想キーコードを組み合わせるためにどのような操作が使用されますか?
これは、次のドキュメントで説明されています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
に等しいが得られます0x0600
。Aこれをである仮想キーコードと組み合わせると0x41
、魔法の定数は。になります0x0641
。
MSDNのIShellLink::GetHotkeyから:
キーボードショートカットのアドレス。仮想キーコードは下位バイトにあり、修飾子フラグは上位バイトにあります。修飾子フラグは、次の値の組み合わせにすることができます。
HOTKEYF_ALT
HOTKEYF_CONTROL
HOTKEYF_EXT
HOTKEYF_SHIFT
従来のLOBYTE、HIBYTE、およびMAKEWORDマクロを使用して読み取り/書き込みを行うことができます...