Comprensión de los valores de combinación de teclas de acceso directo de C++ VK_

I've been playing around with the IShellLink interface, and am confused about how hotkey combinations are mapped.

Cuando solo se aplican teclas de acceso rápido individuales, el valor devuelto corresponde al código de tecla virtual documentado; p.ej F5 == 0x74

However, when a combination is used, an undocumented value is returned that I'm having trouble deciphering; e.g. CTRL + ALT + A == 0x641

What operation is used to combine multiple virtual key codes?

preguntado el 22 de mayo de 12 a las 20:05

buena pregunta, yo me preguntaba lo mismo! Tal vez intente un bit a bit y? Lo intentaría yo mismo, pero no estoy en un lugar que sea posible en este momento. -

He intentado bit a bit AND así como bit a bit OR inclusivo/exclusivo, todos los cuales fallan =( -

2 Respuestas

Esto se explica en la documentación para IShellLink::GetHotkey:

The virtual key code is in the low-order byte, and the modifier flags are in the high-order byte. The modifier flags can be a combination of the following values:

  • HOTKEYF_ALT (ALT key)
  • HOTKEYF_CONTROL (tecla CTRL)
  • HOTKEYF_EXT (tecla extendida)
  • HOTKEYF_SHIFT (SHIFT key)

These flags are defined so:

#define HOTKEYF_SHIFT           0x01
#define HOTKEYF_CONTROL         0x02
#define HOTKEYF_ALT             0x04
#define HOTKEYF_EXT             0x08

Entonces, cuando tomas el CTRL y ALT flags to the high order byte of a word, and combine them, you get 0x0200 | 0x0400 que es igual 0x0600. Combine esto con el código de llave virtual para A cual es 0x41 y tienes tu magia constante de 0x0641.

contestado el 22 de mayo de 12 a las 21:05

Egggcellent, thank you =) To simplify for the rest, here's the expression I'm using to make it work: MAKEWORD(0x41, HOTKEYF_ALT + HOTKEYF_CONTROL) - b1nary.atr0phy

Desde IShellLink::GetHotkey en MSDN:

La dirección del atajo de teclado. El código de la tecla virtual está en el byte de orden inferior y los indicadores modificadores están en el byte de orden superior. Los indicadores modificadores pueden ser una combinación de los siguientes valores.

HOTKEYF_ALT

HOTKEYF_CONTROL

HOTKEYF_EXT

HOTKEYF_SHIFT

Puedes usar el tradicional LOBYTE, HIBYTE and MAKEWORD macros to read/write...

contestado el 22 de mayo de 12 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.