Operacion con bytes -> KBDLLHOOKSTRUCT flags

Iniciado por patilanz, 17 Enero 2015, 17:17 PM

0 Miembros y 1 Visitante están viendo este tema.

patilanz

Hola estoy intentando capturar combinaciones de teclas con un hook en windows y me pasa esto:

Código (cpp) [Seleccionar]
KBDLLHOOKSTRUCT *data = (KBDLLHOOKSTRUCT*)lparam;
int i = 1 << data->flags;

si pulso Alt Gr i contiene 2 y data->flags 129

Pero luego aquí
Código (cpp) [Seleccionar]
KBDLLHOOKSTRUCT *data = (KBDLLHOOKSTRUCT*)lparam;
int i = 1 << 129;


i contiene 0  :(
data->flags es un DWORD (unsinged long) por esto probe hacer una conversión aunque creo que da igual.

Código (cpp) [Seleccionar]
KBDLLHOOKSTRUCT *data = (KBDLLHOOKSTRUCT*)lparam;
int i = 1 << (DWORD)129;

El i sigue 0.

Porque pasa esto?

Saludos

ivancea96

estás desplazando 129 veces 1 a la izquierda. ¿Es eso lo que quieres hacer? ¿No será al revés?

patilanz

En realidad lo que quiero es comprobar si esta activo el 5 byte que ya lo hice de otra forma pero el problema esta en que el i es diferente dependiendo si uso data->flags que vale 129 y lo pongo como constante y no se porque.

cpu2

#3
Cita de: patilanz en 17 Enero 2015, 17:17 PMPorque pasa esto?

Un int (Dword) son 4 bytes - 32 bits, y tu estas moviendo a la izquierda 129, como veras eso se pasa de los 32 asi que todo sera 0.

Igualmente no se a que viene lo del byte numero 5, si estas con un int, si quires comparar bytes siempre tienes AND.

Un saludo.


patilanz

Luego lo hice con AND pero quería probar otra cosa que no tiene relación.

CitarUn int (Dword) son 4 bytes - 32 bits, y tu estas moviendo a la izquierda 129, como veras eso se pasa de los 32 asi que todo sera 0.

Vale y porque si utilizo para mover el contenido data->flags que en el debugger de pone que vale 129 me devuelve 2 ?

cpu2

Como quieres que sepa lo que hace el debugger si no lo veo?

Un saludo.