鼠标操作模拟程序(保留拖动功能版)
2026-3-10 乱云飞
; 鼠标操作模拟程序(增加消息功能)
; 编译命令: 将本文件保存为 1.ahk,然后使用 Ahk2Exe 编译为 1.exe
; 使用方法: 1.exe 命令 参数...
#NoEnv
#SingleInstance Force
SendMode Input
SetWorkingDir %A_ScriptDir%
CoordMode, Mouse, Screen ; 使用屏幕坐标
; 解析命令行参数
Command := A_Args[1]
Param1 := A_Args[2]
Param2 := A_Args[3]
Param3 := A_Args[4]
Param4 := A_Args[5]
; 检查参数数量
if (Command = "")
{
MsgBox 使用方法:`n1.exe L X Y - 鼠标左键单击`n1.exe R X Y - 鼠标右键单击`n1.exe LL X Y - 鼠标左键双击`n1.exe M X Y - 鼠标移动到指定坐标`n1.exe M +X +Y - 鼠标相对移动(+右移 -左移 +下移 -上移)`n1.exe M X1 Y1 X2 Y2 - 鼠标拖动(从X1,Y1按下左键,移动到X2,Y2释放)`n1.exe msg 消息内容 - 弹出消息提示框`n`n示例:`n1.exe M 100 100`n1.exe M +30 -50`n1.exe L 100 100`n1.exe M 100 100 200 200`n1.exe msg 任务完成!
ExitApp
}
; 随机等待时间函数(200-500ms)
RandomSleep()
{
Random, SleepTime, 200, 500
Sleep, %SleepTime%
}
; 检查字符串是否以+或-开头
IsRelativeCoord(ByRef Coord)
{
if (SubStr(Coord, 1, 1) = "+" or SubStr(Coord, 1, 1) = "-")
{
return true
}
return false
}
; 解析相对坐标
ParseRelativeCoord(Coord, CurrentPos)
{
; 获取符号和数值
Sign := SubStr(Coord, 1, 1)
Value := SubStr(Coord, 2)
Value += 0 ; 转换为数字
if (Sign = "+")
{
return CurrentPos + Value
}
else if (Sign = "-")
{
return CurrentPos - Value
}
return CurrentPos
}
; 确保坐标是数字的函数
ValidateCoordinates(ByRef X, ByRef Y)
{
if (X = "" or Y = "")
{
return false
}
X += 0
Y += 0
return true
}
; 获取当前鼠标位置
MouseGetPos, CurrentX, CurrentY
; 根据命令执行相应操作
if (Command = "L") ; 左键单击
{
; 检查是否为相对坐标
if (IsRelativeCoord(Param1) or IsRelativeCoord(Param2))
{
; 获取当前鼠标位置
MouseGetPos, CurrentX, CurrentY
; 解析相对坐标
if (IsRelativeCoord(Param1))
TargetX := ParseRelativeCoord(Param1, CurrentX)
else
TargetX := Param1 + 0
if (IsRelativeCoord(Param2))
TargetY := ParseRelativeCoord(Param2, CurrentY)
else
TargetY := Param2 + 0
}
else
{
if (!ValidateCoordinates(Param1, Param2))
{
MsgBox 错误:左键单击需要提供X和Y坐标
ExitApp
}
TargetX := Param1
TargetY := Param2
}
; 移动到目标坐标并单击
MouseMove, %TargetX%, %TargetY%, 0
RandomSleep()
Click, %TargetX%, %TargetY%, left, 1
}
else if (Command = "R") ; 右键单击
{
; 检查是否为相对坐标
if (IsRelativeCoord(Param1) or IsRelativeCoord(Param2))
{
; 获取当前鼠标位置
MouseGetPos, CurrentX, CurrentY
; 解析相对坐标
if (IsRelativeCoord(Param1))
TargetX := ParseRelativeCoord(Param1, CurrentX)
else
TargetX := Param1 + 0
if (IsRelativeCoord(Param2))
TargetY := ParseRelativeCoord(Param2, CurrentY)
else
TargetY := Param2 + 0
}
else
{
if (!ValidateCoordinates(Param1, Param2))
{
MsgBox 错误:右键单击需要提供X和Y坐标
ExitApp
}
TargetX := Param1
TargetY := Param2
}
; 移动到目标坐标并单击
MouseMove, %TargetX%, %TargetY%, 0
RandomSleep()
Click, %TargetX%, %TargetY%, right, 1
}
else if (Command = "LL") ; 左键双击
{
; 检查是否为相对坐标
if (IsRelativeCoord(Param1) or IsRelativeCoord(Param2))
{
; 获取当前鼠标位置
MouseGetPos, CurrentX, CurrentY
; 解析相对坐标
if (IsRelativeCoord(Param1))
TargetX := ParseRelativeCoord(Param1, CurrentX)
else
TargetX := Param1 + 0
if (IsRelativeCoord(Param2))
TargetY := ParseRelativeCoord(Param2, CurrentY)
else
TargetY := Param2 + 0
}
else
{
if (!ValidateCoordinates(Param1, Param2))
{
MsgBox 错误:左键双击需要提供X和Y坐标
ExitApp
}
TargetX := Param1
TargetY := Param2
}
; 移动到目标坐标并双击
MouseMove, %TargetX%, %TargetY%, 0
RandomSleep()
Click, %TargetX%, %TargetY%, left, 2
}
else if (Command = "M") ; 鼠标移动或拖动
{
; 检查参数数量来判断是移动还是拖动
if (Param3 = "" and Param4 = "") ; 只有两个参数,是移动操作
{
; 检查是否为相对坐标
if (IsRelativeCoord(Param1) or IsRelativeCoord(Param2))
{
; 获取当前鼠标位置
MouseGetPos, CurrentX, CurrentY
; 解析相对坐标
if (IsRelativeCoord(Param1))
TargetX := ParseRelativeCoord(Param1, CurrentX)
else
TargetX := Param1 + 0
if (IsRelativeCoord(Param2))
TargetY := ParseRelativeCoord(Param2, CurrentY)
else
TargetY := Param2 + 0
}
else
{
if (!ValidateCoordinates(Param1, Param2))
{
MsgBox 错误:鼠标移动需要提供X和Y坐标
ExitApp
}
TargetX := Param1
TargetY := Param2
}
; 移动到目标坐标
MouseMove, %TargetX%, %TargetY%, 0
}
else ; 有四个参数,是拖动操作
{
; 检查起点是否为相对坐标
if (IsRelativeCoord(Param1) or IsRelativeCoord(Param2))
{
; 获取当前鼠标位置作为起点基准
MouseGetPos, CurrentX, CurrentY
; 解析起点相对坐标
if (IsRelativeCoord(Param1))
StartX := ParseRelativeCoord(Param1, CurrentX)
else
StartX := Param1 + 0
if (IsRelativeCoord(Param2))
StartY := ParseRelativeCoord(Param2, CurrentY)
else
StartY := Param2 + 0
}
else
{
if (!ValidateCoordinates(Param1, Param2))
{
MsgBox 错误:鼠标拖动需要提供起点坐标
ExitApp
}
StartX := Param1
StartY := Param2
}
; 检查终点是否为相对坐标
if (IsRelativeCoord(Param3) or IsRelativeCoord(Param4))
{
; 终点相对坐标以起点为基准
if (IsRelativeCoord(Param3))
EndX := ParseRelativeCoord(Param3, StartX)
else
EndX := Param3 + 0
if (IsRelativeCoord(Param4))
EndY := ParseRelativeCoord(Param4, StartY)
else
EndY := Param4 + 0
}
else
{
if (!ValidateCoordinates(Param3, Param4))
{
MsgBox 错误:鼠标拖动需要提供终点坐标
ExitApp
}
EndX := Param3
EndY := Param4
}
; 移动到起点
MouseMove, %StartX%, %StartY%, 0
RandomSleep() ; 随机等待200-500ms
; 在起点按下左键
Click, %StartX%, %StartY%, down
; 移动到终点(使用较慢的速度,使拖动更自然)
MouseMove, %EndX%, %EndY%, 50
RandomSleep() ; 随机等待200-500ms
; 释放左键
Click, up
}
}
else if (Command = "msg") ; 弹出消息框
{
; 组合消息内容(支持空格)
MsgContent := Param1
if (Param2 != "")
MsgContent := MsgContent . " " . Param2
if (Param3 != "")
MsgContent := MsgContent . " " . Param3
if (Param4 != "")
MsgContent := MsgContent . " " . Param4
; 如果没有任何消息内容,使用默认消息
if (MsgContent = "")
MsgContent := "任务完成!"
; 弹出消息框(带确定按钮和信息图标)
MsgBox, 64, 提示, %MsgContent%
}
else
{
MsgBox 未知命令:%Command%
ExitApp
}
ExitApp
----------------------------------------------------------------
# 移动到指定位置
1.exe M 1350 10
# 左键单击
1.exe L 1350 10
# 右键单击
1.exe R 200 200
# 左键双击
1.exe LL 100 100
# 相对移动
1.exe M +30 -50
# 相对单击
1.exe L +30 -50
# 拖动操作
1.exe M 100 100 200 200
# 消息提示
1.exe msg 操作完成!
本文链接:http://80c.cc/ez/866.html
发表评论: