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

本頁目錄