/*----------------------------------------------------------------
// Copyright (C) 2007 liu523@QQ.COM
// 版权所有。
// 开发者:liu523@QQ.COM团队
// 文件名:MouseHook.cs
// 文件功能描述:鼠标控制(Hook鼠标)。
//----------------------------------------------------------------*/
using System;
using System.Text;
using System.Runtime.InteropServices;
using RemoteControlLib.API;
using RemoteControlLib.Codes;
namespace RemoteControlLib.Hooks
{
///
/// 鼠标Hook类
///
public class MouseHook
{
///
/// 鼠标事件枚举
///
public enum MouseEventFlag
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
Absolute = 0x8000
}
///
/// 委托-鼠标按键触发
///
///
///
///
///
///
public delegate void DoMouseButtons(int flags, int dx, int dy, int dwData, int dwExtraInfo);
///
/// 委托-鼠标移动触发
///
///
///
///
public delegate bool DoMouseMove(int X, int Y);
///
/// 模拟鼠标按钮按下的事件
///
private event DoMouseButtons MouseButton;
///
/// 模拟鼠标移动的事件
///
private event DoMouseMove MouseMove;
///
/// 创建鼠标钩子的实例
///
public MouseHook()
{
MouseButton += new DoMouseButtons(Api.mouse_event);
MouseMove += new DoMouseMove(Api.SetCursorPos);
}
///
/// 控制鼠标执行相应操作
///
/// 指定的鼠标事件
public void MouseWork(MouseEvent MEvent)
{
switch (MEvent.Type)
{
case MouseEventType.MouseMove:
MouseMove(MEvent.X, MEvent.Y);
break;
case MouseEventType.MouseLeftDown:
MouseMove(MEvent.X, MEvent.Y);
MouseButton((int)MouseEventFlag.LeftDown, MEvent.X, MEvent.Y, 0, 0);
break;
case MouseEventType.MouseLeftUp:
MouseMove(MEvent.X, MEvent.Y);
MouseButton((int)MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 0, 0);
break;
case MouseEventType.MouseRightDown:
MouseButton((int)MouseEventFlag.RightDown, MEvent.X, MEvent.Y, 0, 0);
break;
case MouseEventType.MouseRightUp:
MouseButton((int)MouseEventFlag.RightUp, MEvent.X, MEvent.Y, 0, 0);
break;
case MouseEventType.MouseClick:
MouseMove(MEvent.X, MEvent.Y);
MouseButton((int)MouseEventFlag.LeftDown, MEvent.X, MEvent.Y, 0, 0);
MouseButton((int)MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 0, 0);
break;
case MouseEventType.MouseDoubleClick:
MouseMove(MEvent.X, MEvent.Y);
MouseButton((int)MouseEventFlag.LeftDown, MEvent.X, MEvent.Y, 0, 0);
MouseButton((int)MouseEventFlag.LeftDown, MEvent.X, MEvent.Y, 0, 0);
MouseButton((int)MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 0, 0);
MouseButton((int)MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 0, 0);
break;
}
}
}
}