You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.9 KiB
89 lines
2.9 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Container.Common
|
|
{
|
|
public class MouseHook
|
|
{
|
|
private Point point;
|
|
private Point Point
|
|
{
|
|
get { return point; }
|
|
set
|
|
{
|
|
if (point != value)
|
|
{
|
|
point = value;
|
|
if (MouseMoveEvent != null)
|
|
{
|
|
var e = new MouseEventArgs(MouseButtons.None, 0, point.X, point.Y, 0);
|
|
MouseMoveEvent(this, e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
private int hHook;
|
|
private const int WM_LBUTTONDOWN = 0x201;
|
|
private const int WM_RBUTTONDOWN = 0x204;
|
|
public const int WH_MOUSE_LL = 14;
|
|
public Win32Api.HookProc hProc;
|
|
public MouseHook()
|
|
{
|
|
this.Point = new Point();
|
|
}
|
|
public int SetHook()
|
|
{
|
|
hProc = new Win32Api.HookProc(MouseHookProc);
|
|
hHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL, hProc, IntPtr.Zero, 0);
|
|
return hHook;
|
|
}
|
|
public void UnHook()
|
|
{
|
|
Win32Api.UnhookWindowsHookEx(hHook);
|
|
}
|
|
private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
|
|
{
|
|
Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));
|
|
if (nCode < 0)
|
|
{
|
|
return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);
|
|
}
|
|
else
|
|
{
|
|
if (MouseClickEvent != null)
|
|
{
|
|
MouseButtons button = MouseButtons.None;
|
|
int clickCount = 0;
|
|
switch ((Int32)wParam)
|
|
{
|
|
case WM_LBUTTONDOWN:
|
|
button = MouseButtons.Left;
|
|
clickCount = 1;
|
|
break;
|
|
case WM_RBUTTONDOWN:
|
|
button = MouseButtons.Right;
|
|
clickCount = 1;
|
|
break;
|
|
}
|
|
|
|
var e = new MouseEventArgs(button, clickCount, point.X, point.Y, 0);
|
|
MouseClickEvent(this, e);
|
|
}
|
|
this.Point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);
|
|
return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);
|
|
}
|
|
}
|
|
|
|
public delegate void MouseMoveHandler(object sender, MouseEventArgs e);
|
|
public event MouseMoveHandler MouseMoveEvent;
|
|
|
|
public delegate void MouseClickHandler(object sender, MouseEventArgs e);
|
|
public event MouseClickHandler MouseClickEvent;
|
|
}
|
|
}
|
|
|