事件剧本
事件剧本可以依次执行文字、键盘、鼠标、等待和循环操作,支持 text、stroke、event、wait、repeat、move 和 wheel。
文件与运行
将剧本保存为 UTF-8 文件(推荐 .fsevent
),放入软件“打开剧本目录”按钮打开的文件夹。便携版的该目录位于程序旁;安装版的位置见安装与更新。
页面只列出该目录第一层的 .fsevent 和 .txt 文件。选择文件时会自动检查;可以点击“编辑”用文本编辑器修改,保存后点击“刷新”。单个文件最多
1 MiB,允许 UTF-8 BOM。
保持软件停留在事件剧本页,切换到目标窗口后按启动热键(默认 F8
)。再次按下可停止。启动前软件会重新读取并检查文件;若有错误,会在状态栏提示,不会执行部分内容。运行期间也会检查按键配对和屏幕布局变化。
三项功能的热键仅在各自页面生效;设置和关于页不响应启动热键。运行中切页会先停止当前任务。
参数单位
剧本的参数值不写单位。单位由所用参数决定:
| 参数 | 固定单位 | 示例 |
|---|---|---|
| 按压时间、字符间隔、等待时间 | 整数毫秒(ms) | 250 表示 250 毫秒;仅按压时间和字符间隔允许 0 |
| 鼠标坐标 | 虚拟桌面物理像素 | -1920, 100 |
| 滚轮 | 整数步数 | -1 表示向下一步 |
| 循环次数 | 正整数次,或 -1 |
3 表示执行三次,-1 表示无限循环 |
不写 ms、s、px 等后缀,不按数值大小自动判断单位。时间只接受整数毫秒,上限 86400000;按压时间与字符间隔允许 0,wait(0)
无效,wait 至少为 1。0.5 等小数无效。坐标、滚轮与次数也必须为整数。
命令速查
以下是当前支持的全部命令;名称区分大小写。除 repeat 块外,每条命令均以 ; 结束。
| 命令 | 作用与参数 |
|---|---|
text("内容", press, interval); |
逐字符输入 Unicode 文本;每个字符按压 press 毫秒,相邻字符间等待 interval 毫秒。两项均可为 0。 |
stroke(target[, target...], press); |
按顺序按下一个或多个 Key.*/Mouse.* 目标,保持 press 毫秒后逆序抬起;最多 32 个目标,同一目标不可重复。 |
event(target, Down \| Up); |
对单个 Key.*/Mouse.* 目标执行一次按下或抬起;不包含按压时长,必须配对,不得重复按下。 |
wait(ms); |
暂停指定的整数毫秒;必须为 1~86400000,不接受 0。 |
repeat(count) { ... } |
重复执行块内命令;count 为 1~1000000000,-1 表示无限循环。最多嵌套 16 层;无限循环必须包含时间推进。块后不加分号。 |
move(x, y); |
将鼠标移至虚拟桌面的绝对物理像素坐标;支持负坐标,必须位于任一实际显示器。 |
wheel(steps); |
在当前鼠标位置滚动;正数向上、负数向下,单次为 -100~-1 或 1~100 步。 |
命令详解
下列示例可直接写入 .fsevent 文件。时间参数均为整数毫秒,坐标为整个虚拟桌面的物理像素。
text:输入文字
格式:text("内容", 按压时间, 字符间隔);。逐字使用 Unicode 输入,不依赖当前输入法。字符间隔只发生在同一条 text
的相邻字符之间,首尾不额外等待。
text("你好,Flori Input", 5, 20);
两个时间参数均可为 0。要输入双引号,在文本中写成 "";反斜杠不表示转义,因此 \n 不会变成换行。换行请使用
stroke(Key.Enter, 5);。
stroke:完整按压动作
格式:stroke(目标[, 目标...], 按压时间);。按给定顺序按下键盘键或鼠标键,保持指定时间,再逆序抬起。单个目标相当于一次按键或点击;多个目标可组成组合键。
stroke(Key.Ctrl, Key.A, 30);
stroke(Mouse.Left, 5);
目标必须写成 Key.名称 或 Mouse.名称,同一条命令不能重复目标,最多 32 个。按压时间可为 0
,表示立即提交按下和抬起。组合键不做“是否有意义”的白名单判断。
event:单次按下或抬起
格式:event(目标, Down); 或 event(目标, Up);。它只执行一步,不会自动等待或自动抬起,适合需要在按住期间穿插其他操作的场景。
move(300, 300);
event(Mouse.Left, Down);
wait(100);
move(600, 400);
event(Mouse.Left, Up);
每个 Down 都必须有对应的 Up;重复按下、无对应按下的抬起,或结束时仍有按住的目标,都会报错。停止或出错时软件会尝试释放已按下的输入。
wait:暂停
格式:wait(毫秒);。在两项操作之间加入明确的等待,取值为 1~86400000,不能写 0 或小数。
stroke(Key.Enter, 5);
wait(250);
text("下一步", 5, 10);
repeat:重复一段操作
格式:repeat(次数) { ... }。次数为 1~1000000000;-1 表示持续循环,直到再次按启动热键停止。最多嵌套 16 层,右花括号后不加分号。
repeat(3) {
stroke(Mouse.Left, 5);
wait(500);
}
无限循环必须包含实际耗时的操作,推荐明确写入 wait,避免无等待动作过多而被保护机制停止。循环次数不能为 0,除 -1
外也不能为负数。
move:移动鼠标
格式:move(x, y);。坐标以整个虚拟桌面为基准;左侧或上方的副屏可能出现负坐标。点击事件剧本页的“捕获坐标”,将鼠标移到目标位置后左键确认,坐标会以
x, y 形式复制到剪贴板,可粘贴到 move(...) 中;右键或 Esc 取消。
move(400, 300);
stroke(Mouse.Left, 5);
请将示例坐标换成自己选取的位置。目标必须落在某块实际显示器内;若处于屏幕间空白区域,或运行时显示器布局已变化,剧本会报错,不会自动吸附到其他屏幕。
wheel:滚动鼠标滚轮
格式:wheel(步数);。正数向上,负数向下;单次允许 -100~-1 或 1~100,不能写 0。
wheel(2);
wait(100);
wheel(-1);
语法与安全提示
字符串之外可以使用空格、缩进、换行和 // 行注释。命令与目标名称区分大小写,不支持别名。text 不允许跨行或包含控制字符;换行、Tab
等请使用对应的 Key.* 按键。
键盘目标名称支持 A~Z、0~9、F1~F24,以及 Ctrl、Shift、Alt、Win、Enter、Tab、Esc、Space、Backspace、
Delete、Insert、Home、End、PageUp、PageDown、ArrowLeft、ArrowRight、ArrowUp、ArrowDown。鼠标目标名称仅支持
Left、Middle、Right。
为防止意外长时间运行,有限剧本默认最多执行 10 万步,连续没有正时间等待的动作默认最多 1000
步;超限时会停止并尝试释放输入。需要无限循环时,请在循环体中加入合理的 wait,并确认启动热键可随时停止。