Nel mio aggancio della tastiera, ogni pressione di un tasto riceve un flag che indica se è stato iniettato o meno. http://msdn.microsoft.com/en-us/library/ms644967(VS.85).aspxCome si usano flag a 8 bit di basso livello come condizionali?
Ho distillato un KBDLLHOOKSTRUCT dal lParam. Posso accedere a kbd.flags.XXX. Non so proprio come convertire questo flag a 8 bit in un condizionale di tipo if (injected) {...
che so come usare.
Se uno di voi tipi di computer intelligenti mi aiutasse, lo apprezzerei molto.
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
KBDLLHOOKSTRUCT kbd = new KBDLLHOOKSTRUCT();
Marshal.PtrToStructure(lParam, kbd);
//if (injected) {...
Cheers!
questo (e altri qui che ho provato) sta lanciando un 'Un'eccezione di prima possibilità di tipo 'System.ArgumentException' si è verificata in foofoo.exe. Sembra che stia incasinando il precedente codice di aggancio della tastiera che avevo anch'io. Cosa dà? Inoltre non si compila a meno che non aggiungo parentesi: 'bool isInjected = ((kbd.flags & LLKHF_INJECTED)! = 0);' ... sta cambiando il codice? – cksubs
Gli extra paren non stanno cambiando il codice - riparano semplicemente il mio stupido errore di precedenza. Risposta aggiornata – itowlson
Non ho idea da dove provenga ArgumentException, dato che stai leggendo solo dal campo flags. Un'eccezione viene effettivamente lanciata o è solo un messaggio di debug su un'eccezione di prima scelta (cioè catturato e gestito internamente all'interno del CLR)? Se il primo, qual è la traccia dello stack dell'eccezione? Lo ottieni ancora se solo Console.WriteLine (kbd.flags)?Una volta esaminati, è possibile che si desideri creare una domanda separata perché probabilmente non è correlata alla pura domanda di bit-twiddling "come si usano i flag bit a bit in C#?", Più probabilmente un problema di marshalling. – itowlson