public static IntPtr KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode < 0 || MouseKeyboardEventHandler.s_threadRecorder == null || MainWindow.s_mainWin.IsRecording == false) { return(NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)); } KeyboardEvents kEvent = (KeyboardEvents)wParam.ToInt32(); KBDLLHOOKSTRUCT kbd = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT)); int scanCode = (int)kbd.scanCode; VirtualKeys vk = (VirtualKeys)kbd.vkCode; if (vk == VirtualKeys.VK_PAUSE && kEvent == KeyboardEvents.KeyDown) { s_bPauseMouseKeyboard = !s_bPauseMouseKeyboard; if (s_bPauseMouseKeyboard == true) { NativeMethods.PostMessage(MainWindow.s_windowHandle, (int)MainWindow.UiThreadTask.PauseRecording, 0, 0); } else { NativeMethods.PostMessage(MainWindow.s_windowHandle, (int)MainWindow.UiThreadTask.Active, 0, 0); } } if (s_bPauseMouseKeyboard == false) { MouseKeyboardEventHandler.RecordKey(kEvent, vk, scanCode); } return(NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)); }
public static IntPtr KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode < 0) { return(NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)); } KeyboardEvents kEvent = (KeyboardEvents)wParam.ToInt32(); KBDLLHOOKSTRUCT kbd = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT)); int scanCode = (int)kbd.scanCode; VirtualKeys vk = (VirtualKeys)kbd.vkCode; if (vk == VirtualKeys.VK_PAUSE && kEvent == KeyboardEvents.KeyDown) { s_bPausing = !s_bPausing; } // Record encoded key virtual key if (s_bPausing == false) { MouseKeyboardEventHandler.RecordKey(kEvent, vk, scanCode); } return(NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)); }