PixPin
设置

脚本

从自动化场景入手,学习创建和运行 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 与“没有返回值”都不是自动抛出的异常。调试时先运行一项操作,再逐步加上参数和组合步骤;不要把“没有报错”当成每个结果都已完成。

本页目录