1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- using System;
- using System.Reflection;
- using System.Runtime.InteropServices;
- using System.Windows.Forms;
- namespace GUI.Hook
- {
- public class MouseHook : IHook
- {
- int hHook = 0;
- Win32Api.HookProc mouseHookDelegate;
- public event MouseEventHandler OnMouseMoveEvent;
- public event MouseEventHandler OnMouseDownEvent;
- public event MouseEventHandler OnMouseUpEvent;
- public MouseHook() { }
- public void SetHook()
- {
- mouseHookDelegate = new Win32Api.HookProc(MouseHookProc);
- hHook = Win32Api.SetWindowsHookEx(Win32Api.WH_MOUSE_LL, mouseHookDelegate, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
- }
- public void UnHook()
- {
- Win32Api.UnhookWindowsHookEx(hHook);
- }
- int MouseHookProc(int nCode, int wParam, IntPtr lParam)
- {
- Win32Api.MouseHookStruct msg = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));
- if (nCode >= 0)
- {
- switch (wParam)
- {
- case 513: OnMouseDownEvent?.Invoke(this, new(MouseButtons.Left, 0, msg.pt.x, msg.pt.y, 0)); break;
- case 514: OnMouseUpEvent?.Invoke(this, new(MouseButtons.Left, 0, msg.pt.x, msg.pt.y, 0)); break;
- case 516: OnMouseDownEvent?.Invoke(this, new(MouseButtons.Right, 0, msg.pt.x, msg.pt.y, 0)); break;
- case 517: OnMouseUpEvent?.Invoke(this, new(MouseButtons.Right, 0, msg.pt.x, msg.pt.y, 0)); break;
- default: OnMouseMoveEvent?.Invoke(this, new(MouseButtons.None, 0, msg.pt.x, msg.pt.y, 0)); break;
- }
- }
- return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);
- }
- }
- }
|