static IntPtr HookProc(IntPtr hWnd, WM_EVENT msg, IntPtr wParam, IntPtr lParam) { IntPtr returnCode = CallWindowProc(prevWndProc, hWnd, msg, wParam, lParam); switch (msg) { case WM_EVENT.GETDLGCODE: returnCode = (IntPtr)(returnCode.ToInt32() | DLGC_WANTALLKEYS); break; case WM_EVENT.IME_SETCONTEXT: if (wParam.ToInt32() == 1) { ImmAssociateContext(hWnd, hIMC); } break; case WM_EVENT.INPUTLANGCHANGE: ImmAssociateContext(hWnd, hIMC); returnCode = (IntPtr)1; break; // Key Events case WM_EVENT.KEY_DOWN: KeyboardEventDispatcher.EventInput_KeyDown(null, (Keys)wParam); break; case WM_EVENT.KEY_UP: KeyboardEventDispatcher.EventInput_KeyUp(null, (Keys)wParam); break; case WM_EVENT.KEY_CHAR: KeyboardEventDispatcher.EventInput_CharEntered(null, (char)wParam, lParam.ToInt32()); break; // Mouse Events case WM_EVENT.MOUSE_MOVE: if (OnMouseMotion != null) { OnMouseMotion(null, new MouseMotionEventArgs(lParam.ToInt64())); } break; case WM_EVENT.MOUSE_LBUTTONDOWN: if (OnMouseButton != null) { OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Left, ButtonState.Pressed)); } break; case WM_EVENT.MOUSE_LBUTTONUP: if (OnMouseButton != null) { OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Left, ButtonState.Released)); } break; case WM_EVENT.MOUSE_MBUTTONDOWN: if (OnMouseButton != null) { OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Middle, ButtonState.Pressed)); } break; case WM_EVENT.MOUSE_MBUTTONUP: if (OnMouseButton != null) { OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Middle, ButtonState.Released)); } break; case WM_EVENT.MOUSE_RBUTTONDOWN: if (OnMouseButton != null) { OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Right, ButtonState.Pressed)); } break; case WM_EVENT.MOUSE_RBUTTONUP: if (OnMouseButton != null) { OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Right, ButtonState.Released)); } break; case WM_EVENT.MOUSE_WHEEL: if (OnMouseWheel != null) { OnMouseWheel(null, new MouseWheelEventArgs(wParam.ToInt32())); } break; } return(returnCode); }
static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, WM_EVENT Msg, IntPtr wParam, IntPtr lParam);
static IntPtr HookProc(IntPtr hWnd, WM_EVENT msg, IntPtr wParam, IntPtr lParam) { IntPtr returnCode = CallWindowProc(prevWndProc, hWnd, msg, wParam, lParam); switch(msg) { case WM_EVENT.GETDLGCODE: returnCode = (IntPtr)(returnCode.ToInt32() | DLGC_WANTALLKEYS); break; case WM_EVENT.IME_SETCONTEXT: if(wParam.ToInt32() == 1) { ImmAssociateContext(hWnd, hIMC); } break; case WM_EVENT.INPUTLANGCHANGE: ImmAssociateContext(hWnd, hIMC); returnCode = (IntPtr)1; break; // Key Events case WM_EVENT.KEY_DOWN: KeyboardEventDispatcher.EventInput_KeyDown(null, (Keys)wParam); break; case WM_EVENT.KEY_UP: KeyboardEventDispatcher.EventInput_KeyUp(null, (Keys)wParam); break; case WM_EVENT.KEY_CHAR: KeyboardEventDispatcher.EventInput_CharEntered(null, (char)wParam, lParam.ToInt32()); break; // Mouse Events case WM_EVENT.MOUSE_MOVE: if(OnMouseMotion != null) OnMouseMotion(null, new MouseMotionEventArgs(lParam.ToInt64())); break; case WM_EVENT.MOUSE_LBUTTONDOWN: if(OnMouseButton != null) OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Left, ButtonState.Pressed)); break; case WM_EVENT.MOUSE_LBUTTONUP: if(OnMouseButton != null) OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Left, ButtonState.Released)); break; case WM_EVENT.MOUSE_MBUTTONDOWN: if(OnMouseButton != null) OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Middle, ButtonState.Pressed)); break; case WM_EVENT.MOUSE_MBUTTONUP: if(OnMouseButton != null) OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Middle, ButtonState.Released)); break; case WM_EVENT.MOUSE_RBUTTONDOWN: if(OnMouseButton != null) OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Right, ButtonState.Pressed)); break; case WM_EVENT.MOUSE_RBUTTONUP: if(OnMouseButton != null) OnMouseButton(null, new MouseButtonEventArgs(lParam.ToInt64(), MouseButton.Right, ButtonState.Released)); break; case WM_EVENT.MOUSE_WHEEL: if(OnMouseWheel != null) OnMouseWheel(null, new MouseWheelEventArgs(wParam.ToInt32())); break; } return returnCode; }