作者:Jes潔絲琳 | 来源:互联网 | 2023-09-05 12:35
///
/// 模拟鼠标点击
///
[hostprotection(securityaction.linkdemand, resources = hostprotectionresource.externalprocessmgmt)]
public class mousehelper
{
#region 鼠标相关属性
///
/// 检查鼠标是否已经安装.
///
public static bool mousepresent
{
get
{
return systeminformation.mousepresent;
}
}
///
/// 检查鼠标是否存在滚轮
///
public static bool wheelexists
{
get
{
if (!systeminformation.mousepresent)
{
throw new invalidoperationexception("没有找到鼠标.");
}
return systeminformation.mousewheelpresent;
}
}
///
/// 获取鼠标滚轮每次滚动的行数
///
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
}
///
/// 连续两次鼠标单击之间会被处理成双击事件的间隔时间。
///
/// 以毫秒表示的双击时间
[dllimport("user32.dll", entrypoint = "getdoubleclicktime")]
public static extern int getdoubleclicktime();
///
/// 检取光标的位置,以屏幕坐标表示。
///
///
point结构指针,该结构接收光标的屏幕坐标。
/// 如果成功,返回值非零;如果失败,返回值为零。
[dllimport("user32.dll", entrypoint = "getcursorpos")]
public static extern int getcursorpos(point lppoint);
///
/// 把光标移到屏幕的指定位置。如果新位置不在由 clipcursor函数设置的屏幕矩形区域之内,则系统自动调整坐标,使得光标在矩形之内。
///
///
指定光标的新的x坐标,以屏幕坐标表示。
///
指定光标的新的y坐标,以屏幕坐标表示。
/// 如果成功,返回非零值;如果失败,返回值是零
[dllimport("user32.dll")]
public static extern int setcursorpos(int x, int y);
#endregion
#region 封装函数
///
/// 在当前鼠标的位置左键点击一下
///
public static void mouseclick()
{
mouse_event(mouseeventflag.leftdown, 0, 0, 0, uintptr.zero);
mouse_event(mouseeventflag.leftup, 0, 0, 0, uintptr.zero);
}
///
/// 移动到坐标位置点击
///
///
要点击的坐标位置,屏幕绝对值
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);
}
///
/// 移动到坐标位置点击
///
///
要点击的坐标位置,屏幕绝对值
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);
}
///
/// 移动到坐标位置
///
public static void mousemove(point location)
{
setcursorpos(location.x, location.y);
}
#endregion
}