internal KeybordCaptureEventArgs(w32.KBDLLHOOKSTRUCT keyData) { m_keyCode = keyData.vkCode; m_scanCode = keyData.scanCode; m_flags = keyData.flags; m_time = keyData.time; m_cancel = false; }
static IntPtr HookProc(int nCode, IntPtr wParam, ref w32.KBDLLHOOKSTRUCT lParam) { bool cancel = false; if (nCode == HC_ACTION) { KeybordCaptureEventArgs ev = new KeybordCaptureEventArgs(lParam); switch (wParam.ToInt32()) { case WM_KEYDOWN: if (KeyDown != null) { KeyDown(null, ev); } break; case WM_KEYUP: if (KeyUp != null) { KeyUp(null, ev); } break; case WM_SYSKEYDOWN: if (SysKeyDown != null) { SysKeyDown(null, ev); } break; case WM_SYSKEYUP: if (SysKeyUp != null) { SysKeyUp(null, ev); } break; } cancel = ev.Cancel; } return(cancel ? (IntPtr)1 : w32.CallNextHookEx(s_hook, nCode, wParam, ref lParam)); }