private IntPtr KeyboardHookDelegate(Int32 nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN)) { int vkCode = Marshal.ReadInt32(lParam); if (null != KeyPressEvent) { KeyPressEvent(this, new KeyPressedArgs(KeyInterop.KeyFromVirtualKey(vkCode))); } } return(GlobalHooksHelper.CallNextHookEx(kbHookHandle, nCode, wParam, lParam)); }