in Tools/UIRecorder/UIRecorder/MouseKeyboardHook.cs [421:469]
public static IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode < 0 || MouseKeyboardEventHandler.s_threadRecorder == null || s_bPauseMouseKeyboard == true)
{
return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
}
MSLLHOOKSTRUCT mhs = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
int left = mhs.pt.X;
int top = mhs.pt.Y;
//skip if cursor is on this app
IntPtr hwnd = NativeMethods.WindowFromPoint(left, top);
if (hwnd == MainWindow.s_windowHandle)
{
MouseKeyboardEventHandler.ResetRecordTimer();
return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
}
switch (wParam.ToInt32())
{
case WM_MOUSEMOVE:
MouseKeyboardEventHandler.MouseMove(left, top);
break;
case WM_MOUSEWHEEL:
short zDelta = (short)(mhs.mouseData >> 16);
MouseKeyboardEventHandler.MouseWheel(left, top, zDelta);
break;
case WM_LBUTTONDOWN:
MouseKeyboardEventHandler.LeftMouseDown(left, top);
break;
case WM_LBUTTONUP:
MouseKeyboardEventHandler.LeftMouseUp(left, top);
break;
case WM_RBUTTONDOWN:
MouseKeyboardEventHandler.RightMouseDown(left, top);
break;
case WM_RBUTTONUP:
MouseKeyboardEventHandler.RightMouseUp(left, top);
break;
}
return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
}