目标:

终极目标:通过python调用大模型,获得结果,然后根据返回信息,控制AutoIT操作电脑软件,执行具体工作。让AI更具有执行力。

已完成部分:

 关于python调用大模型的,可以参考之前的文章:

AI入门7:python三种API方式调用本地Ollama+DeepSeek_deepseek大模型下载到本地后,如何在python代码中调用-CSDN博客

AI入门8:通过vsCode用python访问公网deepseek-r1等模型(Tocken模式)-CSDN博客

AutoIT介绍,和如何安装及配置,以及运行了第一个hello程序,然后学习了基本工具的使用和基本语法,见前面文档:

【AI飞】AutoIT入门一:AutoIT来了,准备让AI动起来-CSDN博客

【AI飞】AutoIT入门二:Autolt v3 Window Info,和SciTE Script Editor的使用及鼠标操作-CSDN博客

【AI飞】AutoIT入门三:Autolt基本语法-CSDN博客

本文,继续学习AutoIT,autoit的重点,是其他通用语言不具备的,桌面对象的操控,即模拟人工的点击鼠标、键盘等系统操作功能,这就是本节的内容,所以本节很重要,很重要,很重要。。。

主要系统对象操作函数

一、鼠标控制

在上面入门二,用的就是鼠标函数为例子,介绍工具的使用,这里不重复了,需要的翻一下:

【AI飞】AutoIT入门二:Autolt v3 Window Info,和SciTE Script Editor的使用及鼠标操作-CSDN博客

 其他常用函数见下面内容。

核心函数
  1. MouseMove($iX, $iY [, $iSpeed=10])

    • 移动鼠标到指定坐标
    • 参数:$iX$iY 屏幕坐标;$iSpeed 移动速度(0-100)
    MouseMove(500, 300, 50)  ; 中速移动到(500,300)
    
  2. MouseClick("button" [, $iX, $iY [, $iClicks=1 [, $iSpeed=10]]])

    • 模拟鼠标点击
    • 按钮类型:"left"(默认)、"right""middle"
    MouseClick("right", 800, 600)  ; 右键单击(800,600)
    
  3. MouseWheel("direction" [, $iClicks=1])

    • 滚轮操作:"up" 向上,"down" 向下
    MouseWheel("down", 3)  ; 向下滚动3格
    
参考示例
;执行后,用缓冲时间,把鼠标移到到打开的画图板上,默认是画线
Sleep(1000)
; 在画图程序中绘制一条线
MouseMove(500, 400)
MouseDown("left")       ; 按下左键
MouseMove(300, 300, 10) ; 拖拽
MouseUp("left")         ; 松开左键

二、键盘控制

 示例学习:

我们经常用win+r打开cmd,输入ipconfig查看当前系统ip,用autoit就是这样滴:

Sleep(1000)
;模拟win+R
send("#r")
Sleep(1000)
;默认是中文输入法,需要回车来输入字符
Send("cmd{ENTER}")
;避免太快看不起,增加缓冲
Sleep(1000)
;回车执行cmd命令
Send("{ENTER}")
;替换下面命令,太快看不清
;Send("cmd{ENTER}{ENTER}{ENTER}")
;弹出新窗口,时间要久一点,根据自己系统弹出窗口速度调整
Sleep(3000)
Send("ipconfig{ENTER}{ENTER}")

 其中,autoit用到了特殊字符,这些字符有特殊左右,如: ^ 代表Ctrl,# 代表Win(徽标键)等,还有{ENTER}代表回车键,这种特殊字符的说明在最后附录里,用时查一下就行了。

主要注意:其中要适当的sleep,就想人操作,要等窗口打开,在输入内容,不然太快没输到窗口里,示例根据自己系统的速度调整。

下面是常用函数语法。

核心函数
  1. Send("keys" [, $iFlag=0])

    • 发送按键:支持组合键(!=Alt,^=Ctrl,+=Shift)
    • 标志位:0(默认,恢复初始状态),1(保持修饰键按下)
    Send("^s")              ; Ctrl+S 保存
    Send("Hello{ENTER}")    ; 输入文本并回车
    
  2. HotKeySet("key", "function")

    • 设置全局热键绑定
    HotKeySet("{ESC}", "ExitScript")  ; 按ESC触发退出函数
    
  3. ControlSend("title", "text", "controlID", "string")

    • 向指定控件发送输入(无需窗口激活)
    ControlSend("登录窗口", "", "Edit1", "admin")  ; 填写用户名
    

三、窗口操作

示例学习

打开记事本,获得记事本窗口,然后写入内容,关闭窗口,示例代码:

;打开记事本
Run("notepad.exe")
Sleep(1000)
;定位窗口
;WinWaitActive("无标题 - Notepad")
WinWaitActive("[CLASS:Notepad]")
;WinActive("无标题 - Notepad")
;WinActive("[CLASS:Notepad]")
Sleep(300)
Send("哇哈哈。。。")
Sleep(1000)
;关闭窗口
WinClose("[CLASS:Notepad]")
Sleep(2000)
;按不保存按钮 Alt+n,如果不运行,则根据自己系统中记事本的快捷键修改
Send("!n")

激活窗口,有两种参数,一种是窗口标题,一种是class,同一个程序,在不同系统打开时,标题不一定相同,class相同的几率高一点,无论怎样,要以程序所运行的系统为准。

常用函数的基本语法如下。

核心函数
  1. WinActivate("title" [, "text"])

    • 激活指定窗口
  2. WinWaitActive("title" [, "text" [, $iTimeout=0]])

    • 等待窗口激活
    WinActivate("记事本")
    WinWaitActive("无标题 - 记事本", "", 5)  ; 最多等待5秒
    
  3. WinMove("title", "text", $iX, $iY [, $iWidth, $iHeight])

    • 移动/调整窗口
    WinMove("计算器", "", 0, 0, 400, 300)  ; 调整到400x300
    
  4. WinClose("title" [, "text"])

    • 关闭窗口

 四、进程管理

学习示例

检测系统notepad程序是否运行,运行则关闭,未允许,则启动,请原谅这个例子的逻辑性,只为了测试函数功能:

;检测进程是否存在
if ProcessExists("notepad.exe") Then
	MsgBox(0,"","notepad is running")
	Sleep(4000)
	;存在关闭进程
	ProcessClose("notepad.exe")
Else
	MsgBox(0,"","no notepad")
	;不存在,打开进程,并以最大化方式运行,返回PID
	$ntid=Run("notepad.exe", "", @SW_MAXIMIZE)
	Sleep(2000)
	;把pid写到记事本中,方便查看
	Send($ntid)	
EndIf

进程名称和pid,对应于任务管理器的“详细信息” 

核心函数

1、Run("程序路径" [, "工作目录" [, @SW_状态]])

  1. 启动进程,返回PID

    $pid = Run("notepad.exe", "", @SW_MAXIMIZE)  ; 最大化启动
    

                状态参数: 

AutoIt参数 对应Win32 API常量 数值 说明
@SW_HIDE SW_HIDE 0 完全隐藏窗口
@SW_MAXIMIZE SW_MAXIMIZE 3 最大化窗口
@SW_MINIMIZE SW_MINIMIZE 6 最小化窗口
@SW_RESTORE SW_RESTORE 9 还原窗口状态
@SW_SHOWNA SW_SHOWNA 8 非激活显示

2、ProcessWait("进程名" [, $iTimeout=0])

ProcessWait("chrome.exe", 10)  ; 等待Chrome启动,最多10秒
  • 等待进程启动

3、ProcessClose("进程名或PID")

ProcessClose("notepad.exe")  ; 结束所有记事本进程

五、文件/目录/驱动器管理

文件操作
  1. FileCopy("源文件", "目标路径" [, $iFlag=0])

    • 标志:1=覆盖,8=创建目标目录
    FileCopy("C:\logs\*.txt", "D:\backup\", 1+8) ; 覆盖复制并创建目录
    
  2. FileDelete("路径")

    FileDelete(@TempDir & "\cache_*.tmp")  ; 删除临时缓存
    
目录操作
  1. DirCreate("路径")

    DirCreate("D:\Projects\AutoIT\")  ; 创建多级目录
    
  2. FileFindFirstFile/FileFindNextFile

    $hSearch = FileFindFirstFile("C:\*.docx")  ; 遍历Word文档
    While 1
       $sFile = FileFindNextFile($hSearch)
       If @error Then ExitLoop
       MsgBox(0, "找到文件", $sFile)
    WEnd
    
驱动器管理
  1. DriveGetDrive("类型")

    • 类型:"ALL""FIXED""CDROM"
    $aDrives = DriveGetDrive("CDROM")  ; 获取所有光驱
    For $i = 1 To $aDrives[0]
       MsgBox(0, "光驱", $aDrives[$i])
    Next
    

注意事项

  1. 权限问题:文件/进程操作需管理员权限时,使用 #requireadmin 指令
  2. 路径分隔符:建议使用 @ScriptDir 和 @DesktopDir 等宏代替硬编码路径
  3. 窗口匹配:优先使用窗口句柄 WinGetHandle() 提高准确性
  4. 错误处理:关键操作后检查 @error 宏,例如:
    If Not FileDelete("重要文件.txt") Then
       MsgBox(16, "错误", "删除失败:" & @error)
    EndIf

结尾:

文中,主要介绍各类对象的使用形式,只涉及了一小部分常用函数,更多的内容还得用时查帮助手册。

今天超额完成了学习进度,万里长城又进了一步,哇哈哈😄😄😄


附录:AutoIt 中特殊字符

以下基于官方文档及技术资料,系统总结 AutoIt 脚本语言中特殊字符的核心含义及用法,涵盖键盘控制、字符串处理、路径操作等多个场景。


(一)、键盘控制相关特殊字符

1. 修饰键符号

用于 Send() 函数中的组合键操作,需配合标志位参数使用:

字符 含义 示例 功能说明
! Alt Send("!f") 触发 Alt+F 菜单
+ Shift Send("+{TAB}") Shift+Tab 切换焦点
^ Ctrl Send("^c") 复制操作 (Ctrl+C)
# Windows键 Send("#r") 打开运行窗口 (Win+R)

注意事项


2. 特殊按键转义符

使用 {} 包裹按键名称,支持组合操作:

Send("{ENTER}")        ; 回车键  
Send("{F5 3}")         ; 按3次 F5  
Send("{UP down}")      ; 按住↑方向键  
Sleep(1000)  
Send("{UP up}")        ; 释放↑方向键  

常用转义列表

转义符 功能描述
{ESC} 退出键
{BACKSPACE} 退格键
{CAPSLOCK} 切换大写锁定
{LWIN} / {RWIN} 左/右 Windows 键
{NUMPAD0}~{NUMPAD9} 小键盘数字键

3. ASCII/UNICODE 字符输入

通过 {ASC nnnn} 格式发送任意字符:

Send("{ASC 65}")       ; 发送 ASCII 65 (A)  
Send("{ASC 2709}")     ; 发送 Unicode 汉字(如示例)  

规则

  • 必须使用 3-4 位数字,不足补零(如 {ASC 065}
  • 支持 Unicode 扩展字符集 

(二)、字符串处理相关特殊字符

1. 转义字符
字符 含义 示例
" 双引号包裹字符串 $s = "文本"
' 单引号包裹字符串 $s = '文本'
@CR 回车符 (ASCII 13) Send("A@CR") → "A\r"
@LF 换行符 (ASCII 10) Send("A@LF") → "A\n"
@TAB 制表符 (ASCII 9) Send("A@TAB") → "A\t"

转义示例

$sPath = "C:\\Windows\\system32"  ; 路径需双反斜杠转义  
MsgBox(0, "", "他说:""你好!""")  ; 双引号嵌套需转义  

2. 字符串函数控制符

在 String* 系列函数中使用:

StringRegExp($sText, "[0-9]{3}")  ; 正则表达式匹配三位数字  
StringReplace($sText, "\n", @CR) ; 替换换行符为系统回车  

正则特殊字符

符号 含义 示例
\d 匹配数字 \d+ → 任意整数
\w 匹配字母/数字/下划线 \w{5} → 5位单词
[^] 排除字符集 [^A-Z] → 非大写字母

(三)、文件路径与系统符号

1. 路径处理符号
符号 含义 示例
@ScriptDir 脚本所在目录 FileOpen(@ScriptDir & "\log.txt")
@HomeDrive 系统主驱动器盘符 MsgBox(0, "", @HomeDrive)
\ 路径分隔符 DirCreate("D:\Data\2024")

路径转义技巧

; 使用双反斜杠或单斜杠  
$sPath1 = "C:/Program Files/App/config.ini"  
$sPath2 = "C:\\Program Files\\App\\config.ini"  

2. 系统宏符号

以 @ 开头的预定义宏:

If @OSVersion = "WIN_10" Then    ; 判断操作系统版本  
   MsgBox(0, "", "运行在 Win10")  
EndIf  

常用系统宏

宏名称 返回值示例
@ComputerName "PC-01"
@UserName "Administrator"
@OSArch "X64"


 中文帮助

autoit 在线手册中文版_脚本之家

官方帮助(英文):AutoIt

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐