鼠标操作模拟程序(保留拖动功能版) - 洛阳翼展电脑


鼠标操作模拟程序(保留拖动功能版)

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
0

发表评论:

VirtualCamera:在录像机中虚拟一个通道显示电脑桌面、视频文件、USB摄像头~
预ICP备10086-001号 © 翼展网/80C.CC 技术支持/洛阳翼展科技
TEL / 13213610060 QQ / 345794501
Powered by emlog