脚本
从自动化场景入手,学习创建和运行 PixPin 脚本,了解支持的 JavaScript 语法、截图与贴图接口、区域和动作常量,并掌握参数、平台差异及排错方法。
PixPin 脚本用 JavaScript 调用截图、贴图和窗口操作。你可以把重复步骤保存成一个动作,再用快捷键、托盘菜单或命令行触发。「脚本」是手册中的说明章节,软件内的编辑入口在「配置 → 快捷键/动作」。
- 截取活动窗口用一个动作完成取图与复制。
- 固定截图区域重复使用相同的位置和尺寸。
- 打开一组参考图传入文件列表,批量创建贴图。
哪些事情适合用脚本
| 需求 | 脚本怎样帮忙 |
|---|---|
| 总是截取同一块区域 | 固定位置与尺寸,或按鼠标位置生成指定大小的区域 |
| 希望少点几次工具栏 | 框选结束后直接复制、贴图、保存或识别 |
| 不想每次手动框选 | 直接截取活动窗口、鼠标所在屏幕或上次截图区域 |
| 每天都要打开一组参考文件 | 用文件路径数组一次创建多张贴图 |
| 想把操作接入其他工具 | 通过命令行执行一段脚本或 .js 文件 |
如果只想换一个快捷键、调整托盘入口或避开某个程序,直接使用快捷键/动作设置即可。脚本适合需要组合操作或指定参数的情况。
创建并运行第一个脚本
打开「配置 → 快捷键/动作」,点击「添加新动作」。先在「预设」中选择接近需求的操作,例如「截图并... → 截图并贴图」。
为动作填写不重复的名称,查看或修改「脚本」框中的内容。下面这一行会开始截图,并在选区确定后贴图。
pixpin.screenShot(ShotAction.Pin);点击「测试脚本」,实际完成一次截图,检查结果。测试出错时会显示错误信息。
点击「应用」,回到列表为新动作设置快捷键;也可勾选「托盘菜单」。以后从对应入口执行。
测试会真正执行脚本。选择另一项预设会覆盖编辑框内容,取消窗口也不会撤回已经测试执行的操作。系统内置动作的脚本不能修改;需要变体时,另建一个自定义动作。
从命令行执行
-r 后面放脚本文本,-f 后面放脚本文件路径。PixPin 已经运行时,请求会交给现有实例;首次启动时会等待初始化完成再执行。
Windows PowerShell,将程序路径换成实际安装位置:
& 'D:/Apps/PixPin/PixPin.exe' -r 'pixpin.screenShot(ShotAction.Copy);'
& 'D:/Apps/PixPin/PixPin.exe' -f 'D:/Scripts/capture.js'macOS 终端,以下假设应用安装在「应用程序」目录:
"/Applications/PixPin.app/Contents/MacOS/PixPin" -r 'pixpin.screenShot(ShotAction.Copy);'
"/Applications/PixPin.app/Contents/MacOS/PixPin" -f '/Users/yourname/Scripts/capture.js'文件里只写 JavaScript,不写代码块标记;含中文时建议保存为带 BOM 的 UTF-8 文本。较长脚本优先使用 -f,可以减少终端引号、反斜杠和 $ 的转义问题。路径含空格时保留外层引号。
命令行返回不代表截图、识别或保存已经完成;这个入口也不会把脚本最后一行的值作为结构化结果返回给调用方。macOS 自动化调用不会为交互截图主动弹出权限引导,请先在软件内完成屏幕录制和辅助功能授权。
支持的语法与运行方式
脚本区接受 JavaScript。接口名和常量名区分大小写,例如必须写 pixpin.screenShot,不能改成 pixpin.screenshot。
| 类别 | 支持的常见写法 |
|---|---|
| 变量与数据 | var、let、const;数字、字符串、布尔值、数组、对象、null |
| 判断与循环 | if / else、switch、for、while、for...of、break |
| 函数与类 | function、箭头函数、参数、return、class;函数声明外不能直接写 return |
| 常用表达式 | 算术与比较、&&、||、!、三元表达式、模板字符串、解构、?? |
| 数据处理 | Array、String、Math、Date、JSON、Map、Set 等内置对象 |
| 异常 | try / catch / finally、throw new Error(...) |
当前版本的脚本环境不支持可选链 ?. 和 async/await,也不能在普通脚本中使用 import / export。需要判空时用 if,需要分步骤操作时使用 PixPin 提供的接口。
环境没有浏览器的 window、document、fetch,也没有 Node.js 的 require、process 和 fs;没有提供 setTimeout。不要直接粘贴依赖网页、Node.js 或第三方包的示例。这里的“对象支持”也不表示一个普通对象能代替接口要求的矩形。
顺序执行,不等待手动操作
JavaScript 语句按顺序执行,但打开截图窗口的调用只负责启动操作,不等待你完成框选。因此,想“截图后贴图”,直接写 pixpin.screenShot(ShotAction.Pin);不要把开始截图、读取剪贴板贴图简单写成前后两行。
- 框选后执行动作screenShot:先手动确定选区,再复制或贴图。
- 指定区域,立即取图directScreenShot:使用已知区域,无需手动框选。
脚本引擎会复用,尽量把临时变量放进函数中,避免多次运行相互影响。本文的多行示例使用立即执行的函数:
(function () {
var width = 640;
var height = 480;
var rect = pixpin.genRectUnderCursor(width, height);
pixpin.directScreenShot(rect, ShotAction.Copy);
})();函数最后的 () 表示立即执行。不要用无限循环等待截图结束;这会占住界面执行线程。console.log(...) 可用于日志输出,但编辑窗口没有交互式控制台。
全局对象、参数与返回值
| 名称 | 用途 |
|---|---|
pixpin | 调用截图、贴图、延时、窗口及系统命令接口 |
ShotAction | 指定截图后做什么,例如 ShotAction.Copy |
PixConst | 指定特殊区域,例如 PixConst.SpRectActiveWindow |
普通数值、布尔值和字符串直接填写;文件列表用字符串数组。文件名建议使用绝对路径;JavaScript 路径字符串可写 D:/Images/example.png,若使用反斜杠则写 D:\\Images\\example.png。
矩形请通过以下三个接口生成,并原样传给后续接口:
| 调用 | 含义 |
|---|---|
pixpin.genRect(x, y, width, height) | 指定屏幕位置和尺寸 |
pixpin.genRectUnderCursor(width, height) | 以鼠标位置为中心生成区域,并调整到适合屏幕的位置 |
pixpin.getSpRect(type) | 读取某个特殊区域,type 使用 PixConst 常量 |
坐标与尺寸按屏幕逻辑坐标理解,宽、高应为正数;多屏布局下坐标可以为负。鼠标附近空间不足时,genRectUnderCursor 会按比例缩小区域以适应屏幕。导出图像的像素尺寸还受显示缩放和保存设置影响。不要把 {x: 100, y: 100, width: 640, height: 480} 直接传入需要矩形的接口,它不会按这些字段生成截图区域。
接口返回 true 通常表示请求被接受,不表示用户已经完成交互;不同接口的返回语义见后面的表格。没有返回值的接口不能用于判断保存是否成功。
可以直接改用的示例
截取活动窗口并复制
先把要截取的程序切到前台,再用全局快捷键触发此动作。它立即取图,不出现手动框选流程。
pixpin.directScreenShotSpRect(
PixConst.SpRectActiveWindow,
ShotAction.Copy
);在编辑窗口点击「测试脚本」时,活动窗口可能正是配置窗口;判断效果时,应应用动作后从目标程序触发。
固定选区,再手动微调
先开始普通截图,再把选区设为屏幕坐标 (100, 100)、大小 640 × 480。你仍可在工具栏标注或调整选区。
(function () {
if (pixpin.screenShotAndEdit()) {
pixpin.setScreenShotRect(100, 100, 640, 480);
pixpin.setScreenShotRectRadius(4 / 3);
}
})();setScreenShotRectRadius 的名字容易误解:这里设置的是宽高比,不是圆角半径。无需固定比例时,删除最后一行。
直接截图,按时间命名保存
此例直接截取鼠标所在屏幕。运行前把路径换成自己的保存目录;macOS 可使用 /Users/yourname/Pictures/... 形式的路径。
(function () {
var rect = pixpin.getSpRect(PixConst.SpRectScreenUnderMouse);
pixpin.directScreenShotAndSaveTo(
rect,
"D:/Captures/PixPin_$yyyy-MM-dd_HH-mm-ss$.png"
);
})();时间占位符由保存功能展开,写法见路径与文件名变量。该接口遇到同名文件会自动添加数字后缀,且不显示保存通知;它没有返回保存路径或成功标志。
一次贴出多个参考文件
把数组里的路径替换成已存在的文件。可以按相同格式继续添加条目。
(function () {
var files = [
"D:/Reference/layout.png",
"D:/Reference/colors.png"
];
if (!pixpin.pinFromFiles(files)) {
throw new Error("没有找到可贴出的文件,请检查路径。");
}
})();接口会跳过不存在的文件;空数组或所有路径都不存在时返回 false。返回 true 表示已有文件交给贴图功能处理,不保证每一种文件格式都能显示为图片。
延时三秒,再开始截图
有倒计时提示、可取消的写法最简洁:
pixpin.delayScreenShotWithTips(3);需要指定位置和尺寸时,使用下面的接口。参数从左到右是:秒数、是否指定位置、横坐标、纵坐标、是否指定尺寸、宽、高、保留参数、宽高比。
pixpin.delayScreenShot(3, true, 100, 100, true, 640, 480, 0, 4 / 3);用同一个动作切换状态
下面把当前禁用状态取反:启用时暂停其他全局快捷键,再按一次恢复。
pixpin.disableShortcuts(!pixpin.isDisableShortcuts());该动作的按键可用于解除这种主动禁用;它仍受忽略程序名单和 Windows 全屏游戏状态限制。
自定义接口速查
以下列出可用于普通动作脚本的用户操作接口。表中的 rect 必须来自区域生成接口,action 使用 ShotAction,方括号表示可省略的参数,实际代码不写方括号。
截图与区域
| 接口 | 参数与用途 |
|---|---|
screenShot(action) | 开始框选,选区确定后执行 action。返回布尔值;截图已打开、长截图正在使用或权限不足等情况可返回 false |
screenShotAndEdit() | 等同于 screenShot(ShotAction.Edit),框选后显示截图工具栏 |
screenShotAndCopy() | 等同于 screenShot(ShotAction.Copy) |
screenShotAndPin() | 等同于 screenShot(ShotAction.Pin) |
screenShotAndCopyOcr() | 等同于 screenShot(ShotAction.CopyOcrText),识别后复制文字 |
openCustomScreenShot() | 打开自定义/延时截图窗口,供你手动设参数 |
setScreenShotRect(x, y, width, height) | 设置已创建截图窗口的选区;建议在 screenShotAndEdit() 成功后调用。没有截图窗口时返回 false |
setScreenShotRectRadius(ratio) | 设置矩形选区宽高比,例如 16 / 9;不是圆角。路径选区不应用此比例 |
switchScreenshotMode() | 截图窗口可见时切换到下一个截图模式;没有可用截图窗口时返回 false |
directScreenShot(rect, action) | 直接捕获已知区域并执行动作,无返回值。适合复制、贴图、保存等输出操作 |
directScreenShotSpRect(type, action) | 按 PixConst 指定区域直接截图,相当于先 getSpRect(type) 再直接截图 |
directScreenShotAndSaveTo(rect, filePath) | 直接截图保存到指定完整文件路径;支持保存变量,同名添加数字后缀,无返回值 |
本表省略重复的 pixpin. 前缀;例如实际调用应写 pixpin.screenShotAndCopy()。直接截图不会因传入 Edit、ImageEdit、LongShot 或 GifShot 而进入对应编辑或录制界面;需要这些交互流程时使用 screenShot(action) 或下面的专用接口。
延时、长截图与录屏
| 接口 | 参数与用途 |
|---|---|
delayScreenShot(seconds, hasPos, x, y, hasSize, width, height, radius, ratio) | 延时后进入截图编辑。最短按 0.2 秒处理,新调用替换尚未触发的此类延时任务;返回 true 表示定时任务已设置 |
delayScreenShotWithTips(seconds[, rect]) | 显示可取消倒计时,秒数取整且至少 1 秒;可传入区域,也可省略区域后手动框选。无返回值 |
longScreenShot(rect) | 打开指定区域的长截图窗口;已经有长截图窗口时调整其区域 |
openLongScreenShot(x, y, width, height) | 用四个数值指定长截图区域,省去先生成矩形 |
gifScreenShot(rect) | 打开指定区域的录屏窗口;已有录屏窗口时调整区域。名字保留了 GIF,但最终格式由录屏界面决定 |
openGifScreenShot(x, y, width, height) | 用四个数值指定录屏区域 |
gifShotPause() | 切换暂停/继续;没有录屏窗口时返回 false |
hasLongShotWidget() | 返回是否已有长截图窗口 |
delayScreenShot 的 hasPos 与 hasSize 都为 true 时使用指定矩形;只有 hasSize 为 true 时按鼠标位置生成指定大小;未指定尺寸时保留手动框选。radius 当前未参与处理,填 0;ratio 为正数时设置宽高比,不需要时填 -1。
这些接口负责打开或控制相关窗口,不表示自动滚动已经完成、视频已经导出。长截图和录屏的后续操作仍按各自界面执行。
贴图与批量管理
| 接口 | 参数与用途 |
|---|---|
pinFromClipBoard() | 从剪贴板创建贴图;正在截图或长截图时,会尝试把当前结果贴出。返回值不能用于判断剪贴板贴图是否成功 |
pinFromFiles(files) | files 为文件路径数组,处理现有文件;空数组或没有现有文件时返回 false |
pinSelectedFile() | 读取文件管理器当前选中文件并贴图;未选中或读取失败时返回 false。macOS 涉及自动化权限 |
restoreLastClosedPin() | 按现有恢复规则找回贴图,返回是否成功 |
closeAllPin() | 关闭当前贴图窗口,使用正常关闭流程 |
hideOrShowAllPin() / isAllPinHide() | 切换全部贴图显隐 / 查询全部隐藏状态 |
hideOrShowPinsExceptSelected() | 隐藏当前选中以外的贴图,再次调用恢复。没有选中项时尝试使用活动贴图;仍没有时提示先选中 |
switchPinGroup() | 触发切换贴图组 |
trigMousePenetration() | 切换鼠标下方贴图的穿透状态;鼠标不在贴图上时取消全部贴图的穿透 |
setAllPinToRoiMode() / unsetAllPinToRoiMode() | 将贴图切换到缩略图显示 / 恢复正常显示;这里的 ROI 不是创建窗口贴图 |
saveAllPinImageTo(folder) | 将贴图的可导出图像批量保存到指定目录,文件名带序号,同名添加后缀;参数是文件夹,不是完整文件名 |
saveAllPinImageWithDialog() | 先弹出文件夹选择,再批量保存 |
destoryAllPin() | 销毁全部贴图,按现有确认设置处理,不能按普通关闭恢复。接口名确实拼作 destory,不要改写为 destroy |
系统命令与其他操作
| 接口 | 参数与用途 |
|---|---|
translateClipboard() | 将剪贴板内容送入翻译流程,返回是否启动成功 |
disableShortcuts(disabled) / isDisableShortcuts() | true 暂停、false 恢复其他全局快捷键 / 查询此主动禁用状态;查询结果不代表忽略名单或游戏状态 |
moveCursorBy(dx, dy) | 按偏移移动鼠标,可用于精细调整;快速连续调用存在加速,不保证累计位移简单等于参数相加 |
toggleWindowTopmostUnderMouse() | 切换鼠标下方窗口置顶。Windows 可作用于其他程序窗口;macOS 实现仅操作 PixPin 自己的窗口 |
openConfigurationWindow() / openDoc() | 打开配置窗口 / 使用文档 |
runSystem(command) | 启动外部程序并立即返回,无返回值;字符串包含程序及参数 |
runSystemSync(command) | 启动外部程序并同步等待;返回对象含 code、output、error,分别为进程退出码、标准输出、标准错误 |
quit() | 退出 PixPin |
runSystem 和 runSystemSync 直接启动程序,不自动经过终端解释器。管道、重定向和 shell 内置命令不会自动生效;有这类需求时,显式指定对应平台的解释器。命令字符串不能为空。
例如启动计算器,Windows 可用 pixpin.runSystem("calc");macOS 可用 pixpin.runSystem("/usr/bin/open -a Calculator")。下面演示如何读取同步命令结果,命令请换成当前系统中实际存在的程序:
(function () {
var result = pixpin.runSystemSync("cmd /c ver"); // Windows 示例
console.log(result.code, result.output, result.error);
})();同步等待会暂时占用 PixPin 界面;当前实现使用约 30 秒的默认等待上限,没有单独返回“超时”字段,也不能仅凭 code 判断进程是否正常启动。需要立即返回时使用 runSystem。
区域与动作常量
PixConst:要截哪里
| 常量 | 区域 |
|---|---|
PixConst.SpRectScreenUnderMouse | 鼠标所在的显示器 |
PixConst.SpRectAllScreen | 全部屏幕组成的矩形范围 |
PixConst.SpRectWindowUnderMouse | 鼠标下方窗口 |
PixConst.SpRectActiveWindow | 当前活动窗口 |
PixConst.SpRectLastShotRect | 上次截图选区;使用前先完成一次有效截图 |
区域取决于执行时的窗口、鼠标和历史状态。没有有效窗口或历史时,不要假定仍能获得可用区域。
ShotAction:选区之后做什么
以下写法都带 ShotAction. 前缀,例如 ShotAction.QuickSave。
| 常量 | 操作 |
|---|---|
Edit | 在截图工具栏继续标注与操作 |
Copy / Pin | 复制图片 / 贴图 |
Save / QuickSave | 打开保存窗口 / 使用快速保存配置 |
CopyOcrText | 识别并复制文字 |
Translate | 翻译截图内容 |
OcrTable / OcrDocument | 表格识别 / 文档识别 |
LatexRecognition | 公式识别 |
LongShot / GifShot | 进入长截图 / 录屏 |
WinRoi | 创建窗口贴图,仅 Windows |
Print | 打印 |
CopyQRCodeText | 识别并复制二维码内容 |
AirDrop | 隔空投送,仅 macOS |
ImageEdit | 打开独立图像编辑窗口 |
Close | 关闭本次截图 |
常量只是选择已有功能,不改变它的运行条件;复制、保存、识别仍可能受现有设置或交互窗口影响。
出错时从哪里检查
| 现象 | 检查方法 |
|---|---|
SyntaxError | 检查引号、括号和逗号,删除 Markdown 代码块标记;确认没有使用 ?.、async/await 或 import |
ReferenceError | 检查变量是否已声明、名称大小写及作用域 |
| 找不到方法或调用无效 | 核对大小写和接口拼写;矩形通过专用接口生成,文件列表用数组 |
| 截到了配置窗口 | 「测试脚本」时配置窗口正在前台;应用动作后,切到目标程序用快捷键试用 |
| 开始了截图却没有最终图片 | screenShot(...) 仍要你完成框选;直接取图应使用 directScreenShot... |
| 没有保存提示 | directScreenShotAndSaveTo 本来就不显示通知;检查路径、文件后缀和输出目录 |
| 快捷键没有触发脚本 | 检查按键注册状态、禁用开关及忽略程序名单,见快捷键状态 |
| macOS 命令行截图未响应 | 先在 PixPin 内确认屏幕录制与辅助功能权限,并确保系统已解锁 |
脚本错误可以用 try / catch 捕获,但返回 false 与“没有返回值”都不是自动抛出的异常。调试时先运行一项操作,再逐步加上参数和组合步骤;不要把“没有报错”当成每个结果都已完成。