/// <summary>
/// 模擬鼠標點擊
/// </summary>
[HostProtection(SecurityAction.LinkDemand, Resources = HostProtectionResource.ExternalProcessMgmt)]
public class MouseHelper
{
#region 鼠標相關屬性
/// <summary>
/// 檢查鼠標是否已經安裝.
/// </summary>
public static bool MousePresent
{
get
{
return SystemInformation.MousePresent;
}
}
/// <summary>
/// 檢查鼠標是否存在滾輪
/// </summary>
public static bool WheelExists
{
get
{
if (!SystemInformation.MousePresent)
{
throw new InvalidOperationException("沒有找到鼠標.");
}
return SystemInformation.MouseWheelPresent;
}
}
/// <summary>
/// 獲取鼠標滾輪每次滾動的行數
/// </summary>
public static int WheelScrollLines
{
get
{
if (!WheelExists)
{
throw new InvalidOperationException("沒有找到鼠標滑輪.");
}
return SystemInformation.MouseWheelScrollLines;
}
}
#endregion
#region 鼠標操作函數
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
[Flags]
enum MouseEventFlag : uint
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
Absolute = 0x8000
}
/// <summary>
/// 連續兩次鼠標單擊之間會被處理成雙擊事件的間隔時間。
/// </summary>
/// <returns>以毫秒表示的雙擊時間</returns>
[DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]
public static extern int GetDoubleClickTime();
/// <summary>
/// 檢取光標的位置,以屏幕坐標表示。
/// </summary>
/// <param name="lpPoint">POINT結構指針,該結構接收光標的屏幕坐標。</param>
/// <returns>如果成功,返回值非零;如果失敗,返回值為零。</returns>
[DllImport("user32.dll", EntryPoint = "GetCursorPos")]
public static extern int GetCursorPos(Point lpPoint);
/// <summary>
/// 把光標移到屏幕的指定位置。如果新位置不在由 ClipCursor函數設置的屏幕矩形區域之內,則系統自動調整坐標,使得光標在矩形之內。
/// </summary>
/// <param name="x">指定光標的新的X坐標,以屏幕坐標表示。</param>
/// <param name="y">指定光標的新的Y坐標,以屏幕坐標表示。</param>
/// <returns>如果成功,返回非零值;如果失敗,返回值是零</returns>
[DllImport("user32.dll")]
public static extern int SetCursorPos(int x, int y);
#endregion
#region 封裝函數
/// <summary>
/// 在當前鼠標的位置左鍵點擊一下
/// </summary>
public static void MouseClick()
{
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
}
/// <summary>
/// 移動到坐標位置點擊
/// </summary>
/// <param name="location">要點擊的坐標位置,屏幕絕對值</param>
public static void MouseClick(Point location)
{
MouseMove(location);
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
}
/// <summary>
/// 移動到坐標位置點擊
/// </summary>
/// <param name="location">要點擊的坐標位置,屏幕絕對值</param>
public static void MouseRightClick(Point location)
{
MouseMove(location);
mouse_event(MouseEventFlag.RightDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEventFlag.RightUp, 0, 0, 0, UIntPtr.Zero);
}
/// <summary>
/// 移動到坐標位置
/// </summary>
public static void MouseMove(Point location)
{
SetCursorPos(location.X, location.Y);
}
#endregion
}