/// <summary> /// The callback for the keyboard hook /// </summary> /// <param name="code">The hook code, if it isn't >= 0, the function shouldn't do anyting</param> /// <param name="wParam">The event type</param> /// <param name="lParam">The keyhook event information</param> /// <returns></returns> public int hookProc(int code, int wParam, ref keyboardHookStruct lParam) { if (code >= 0) { Keys key = (Keys)lParam.vkCode; keyboardPacket kp = new keyboardPacket(); if (HookedKeys.Contains(key) || HookAll == true) { bool bAlt = (NativeMethods.GetKeyState((int)WindowsVirtualKey.VK_LMENU) & 0x8000) != 0; bAlt |= (NativeMethods.GetKeyState((int)WindowsVirtualKey.VK_RMENU) & 0x8000) != 0; bool bShift = (NativeMethods.GetKeyState((int)WindowsVirtualKey.VK_LSHIFT) & 0x8000) != 0; bShift |= (NativeMethods.GetKeyState((int)WindowsVirtualKey.VK_RSHIFT) & 0x8000) != 0; bool bControl = (NativeMethods.GetKeyState((int)WindowsVirtualKey.VK_LCONTROL) & 0x8000) != 0; bControl |= (NativeMethods.GetKeyState((int)WindowsVirtualKey.VK_RCONTROL) & 0x8000) != 0; KeyEventArgs kea = new KeyEventArgs( key | (bAlt ? Keys.Alt : Keys.None) | (bShift ? Keys.Shift : Keys.None) | (bControl ? Keys.Control : Keys.None) ); Debug.WriteLine("Code : {0}, wParam : {1}, lParam.vkCode :{2}", code, wParam, lParam.vkCode); Debug.WriteLine("lParam.scanCode : {0}, lParam.flag : {1}, lParam.dwExtraInfo :{2}", lParam.scanCode, lParam.flags, lParam.dwExtraInfo); Debug.WriteLine("Alt : {0}, Ctrl : {1}, Shift : {2}", bAlt, bControl, bShift); if ((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null)) { KeyDown(this, kea); kp.flags = FLAG_KEYDOWN; } else if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null)) { KeyUp(this, kea); kp.flags = FLAG_KEYUP; } kp.vkCode = lParam.vkCode; if (DonotFireEvent == false) { if (LastInputForCommand == false) { KeyEvent(kp); } else { LastInputForCommand = false; } if (kea.Handled) { return(1); } } } } return(CallNextHookEx(hhook, code, wParam, ref lParam)); }
public void FireKeyEvent(IKeyboardSimulator a_iks, keyboardPacket a_kp) { if (a_kp.flags == 0x00) { a_iks.KeyUp((WindowsInput.Native.VirtualKeyCode)a_kp.vkCode); } else { a_iks.KeyDown((WindowsInput.Native.VirtualKeyCode)a_kp.vkCode); } }
public static string getLogMessage(keyboardPacket a_kp) { return(string.Format("패킷 키보드 : {0} {1}", a_kp.flags == globalKeyboardHook.FLAG_KEYDOWN ? "누름" : "풀림", a_kp.vkCode)); }