腳本
從自動化場景入手,學習建立和執行 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 與「沒有返回值」都不是自動丟擲的異常。除錯時先執行一項操作,再逐步加上參數和組合步驟;不要把「沒有報錯」當成每個結果都已完成。