Global Windows Hook
Hej alle.Jeg er igang med at kode en keyboard hook i c#. Indtil videre kan jeg forhindre tastetryk "i at komme frem" og logge hvilke taster der bliver trykket på. Hvad jeg også gerne vil have er muligheden for at ændre tastetryk så f.eks. e bliver til f. Indtil videre har jeg:
//Start
//Sætter HOOK op i alle processor
KeyboardHookProcedure = new HookProc(KeyboardHookProc);
hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL,
KeyboardHookProcedure,
Marshal.GetHINSTANCE(
Assembly.GetExecutingAssembly().GetModules()[0]),
0);
//og i Hookproc
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
KeyEventArgs e = null;
if ((nCode >= 0) && (KeyDown!=null || KeyUp!=null || KeyPress!=null))
{
KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct) Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct));if ( KeyDown!=null && ( wParam ==WM_KEYDOWN ||wParam==WM_SYSKEYDOWN ))
{
Keys keyData=(Keys)MyKeyboardHookStruct.vkCode;
e = new KeyEventArgs(keyData);
KeyDown(this, e);
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
Jeg har prøvet at ændre lParam (da den indeholder den virtuelle kode) men uden held. Hvis jeg returnerer -1 bliver der ikke trykket på noget. En mulighed var at bruge SendKeys, men jeg vil helst holde mig til en global løsning.