AutoItX3Lib.pas 单元的调用示例,涵盖主要方法及常见使用场景:
示例 1:启动记事本并输入文本
uses
AutoItX3Lib, SysUtils;
var
hWnd: HWND;
begin
// 初始化 AutoIt
AU3_Init();
// 启动记事本
AU3_Run('notepad.exe', '', SW_SHOWNORMAL);
// 等待记事本窗口激活(最多等待 5 秒)
AU3_WinWaitActive('无标题 - 记事本', '', 5);
// 发送文本(模拟键盘输入)
AU3_Send('Hello, AutoIt!', 0);
// 保存文件(Ctrl+S)
AU3_Send('^s', 0); // ^ 表示 Ctrl 键
// 等待保存对话框
AU3_WinWaitActive('另存为', '', 2);
// 输入文件名并保存
AU3_Send('test.txt{ENTER}', 0);
// 关闭记事本
hWnd := AU3_WinGetHandle('test.txt - 记事本', '');
AU3_WinCloseByHandle(hWnd);
end;
示例 2:操作窗口和控件
var
hWnd: HWND;
rect: TRECT;
buffer: array[0..255] of WideChar;
begin
// 获取计算器窗口句柄
hWnd := AU3_WinGetHandle('计算器', '');
if hWnd <> 0 then begin
// 激活窗口
AU3_WinActivateByHandle(hWnd);
// 获取窗口位置
AU3_WinGetPosByHandle(hWnd, @rect);
Writeln(Format('窗口位置: (%d, %d)', [rect.Left, rect.Top]));
// 点击按钮 "5"
AU3_ControlClickByHandle(hWnd, 0, '5', 'LEFT', 1);
// 获取按钮文本(假设控件 ID 为 135)
AU3_ControlGetTextByHandle(hWnd, 135, buffer, 256);
Writeln('控件文本: ' + buffer);
end else
Writeln('计算器未找到!');
end;
示例 3:鼠标和剪贴板操作
var
pos: TPoint;
clipText: array[0..255] of WideChar;
begin
// 获取鼠标位置
AU3_MouseGetPos(@pos);
Writeln(Format('当前鼠标位置: (%d, %d)', [pos.X, pos.Y]));
// 移动到 (100, 100) 并左键单击
AU3_MouseMove(100, 100, 10); // 移动速度较慢(10ms)
AU3_MouseClick('LEFT', 100, 100, 1, 10);
// 操作剪贴板
AU3_ClipPut('这是剪贴板内容');
AU3_ClipGet(clipText, 256);
Writeln('剪贴板内容: ' + clipText);
end;
示例 4:进程管理
var
pid: DWORD;
begin
// 检查记事本是否运行
pid := AU3_ProcessExists('notepad.exe');
if pid <> 0 then begin
Writeln('记事本进程 ID: ' + IntToStr(pid));
// 关闭进程
AU3_ProcessClose('notepad.exe');
end else
Writeln('记事本未运行');
end;
示例 5:设置 AutoIt 选项
begin
// 设置按键延迟为 50ms
AU3_AutoItSetOption('SendKeyDelay', 50);
// 设置窗口标题匹配模式为部分匹配
AU3_AutoItSetOption('WinTitleMatchMode', 2);
end;
常见注意事项:
-
宽字符处理:所有字符串参数需使用
PWideChar,可用WideString或array of WideChar转换。 -
默认值:参数如
AU3_INTDEFAULT表示使用默认值,例如AU3_MouseClick中不指定坐标。 -
错误处理:检查函数返回值(如返回 0 表示失败),或调用
AU3_error获取错误码。 -
缓冲区分配:对于返回文本的函数(如
AU3_ClipGet),需预先分配足够大的缓冲区。
浙公网安备 33010602011771号