# 用 Claude Code 打造專屬截圖工具:說「我截圖給你看」就能讓 AI 看到畫面 > 原本需要:截圖 → 另存新檔 → 告訴 Claude 路徑 → 才能看到 > 現在只需要:說「我截圖給你看」→ 切換視窗 → 框選 → 標記重點 → Claude 立刻看到並理解 --- ## 背景與動機 在用 Claude Code 開發專案時,常常遇到「文字說不清楚,需要截圖說明」的情況。但把截圖分享給 Claude 的流程很繁瑣,大大降低了開發效率。 這篇文章會帶你從零開始,用 **Claude Code 輔助開發**一個截圖工具,建置完成後只要一句話就能讓 Claude 看到你的畫面。 --- ## 先搞懂:Command 和 Skill 的差別 在開始建置之前,需要了解 Claude Code 兩種擴充機制的差異,這是本工具選用 Skill 的原因: | | Command(指令) | Skill(技能) | |---|---|---| | 存放位置 | `~/.claude/commands/名稱.md` | `~/.claude/skills/名稱/SKILL.md` | | 觸發方式 | 使用者手動輸入 `/名稱` | Claude 根據 description **自動判斷**觸發 | | 適用場景 | 明確的操作指令(如 `/commit`、`/紀錄`) | 需要 AI 自動辨識意圖的場景 | 截圖工具的使用情境是「使用者說一句話,Claude 自動觸發」,所以應該做成 **Skill**,而不是 Command。 --- ## 環境需求 - Windows 10 / 11 - [Python 3.x](https://www.python.org/downloads/)(安裝時勾選「Add to PATH」) - [Claude Code](https://claude.ai/download)(Anthropic 官方 CLI 工具) - Pillow 套件(安裝指令:`pip install Pillow`) --- ## 整體架構邏輯 這個工具由**三個部分**組成: ``` ┌─────────────────────────────────────────────┐ │ 使用者說「我截圖給你看」 │ └───────────────────┬─────────────────────────┘ │ Claude 自動比對 Skill description ▼ ┌─────────────────────────────────────────────┐ │ SKILL.md(Claude Code Skill) │ │ → description 觸發詞匹配 │ │ → 內容指示 Claude 如何執行 │ └───────────────────┬─────────────────────────┘ │ Bash 執行(傳入當前專案路徑) ▼ ┌─────────────────────────────────────────────┐ │ screenshot_tool.py(核心程式) │ │ ① 倒數 10 秒視窗 → 使用者切換到目標頁面 │ │ ② 全螢幕暗化 → 拖曳框選 │ │ ③ 標記編輯器 → 畫筆/箭頭/文字標註重點 │ │ ④ 按「完成」→ 儲存截圖 │ │ 檔名:專案名稱_時間戳.png │ │ → 輸出檔案路徑給 Claude │ └───────────────────┬─────────────────────────┘ │ Read 工具讀取圖片 ▼ ┌─────────────────────────────────────────────┐ │ Claude 看到截圖,智慧判讀: │ │ → 圖上有文字標記?優先讀取並回應 │ │ → 有箭頭/圈選?結合上下文判斷意圖 │ │ → 無標記或意圖不明?詢問使用者 │ └─────────────────────────────────────────────┘ ``` **關鍵差異**:不需要在 CLAUDE.md 寫觸發規則。Skill 的 YAML frontmatter 中的 `description` 欄位本身就告訴 Claude 何時該觸發,Claude 會自動比對使用者的語句。 --- ## 建置步驟 ### 步驟一:建立專案資料夾 在你的電腦上建立一個資料夾,例如: ``` C:\Projects\claude截圖工具\ ``` ### 步驟二:把提示語貼給 Claude Code 剩下的所有事情,都交給 Claude Code 完成。把下面整段提示語複製,貼到 Claude Code 的對話中: ``` 請幫我建置一個「截圖工具」,讓我在開發時可以方便截圖給你看。 【開始建置前,請先按順序做這兩件事】 第一步:執行 Bash 指令取得我的使用者資料夾路徑: echo $USERPROFILE 第二步:用 AskUserQuestion 工具問我這一個問題: 「請問你想把截圖工具的程式檔案安裝在哪個資料夾? (範例:C:\Projects\claude截圖工具) 截圖會自動存到這個資料夾下的『截圖』子資料夾。」 確認我的回答後,才開始建置所有檔案。 【工具功能需求】 - 我說「我截圖給你看」,你就自動觸發截圖工具 - 程式先出現倒數視窗(10秒),讓我有時間切換到要截圖的頁面,可點按鈕立即開始 - 倒數結束後畫面變暗,我拖曳滑鼠框選要說明的範圍 - 框選完進入標記模式:可以用畫筆畫圈、拉箭頭、打文字標註重點(6 色可選、支援撤銷) - 標記完按「完成」存檔,或按「跳過」存原圖 - 截圖檔名格式:當前專案名稱_時間戳.png(專案名稱由執行時自動帶入) - 不需要安裝額外套件(Python 內建 tkinter + 只需要 Pillow) 【需要建立的三個檔案,所有路徑都依照上面確認的結果填入】 檔案一:[安裝資料夾]\screenshot_tool.py(核心截圖程式) - 在檔案最上方加入:sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8'),避免 Windows 中文路徑亂碼 - 從 sys.argv[1] 取得專案路徑,用 os.path.basename() 取出資料夾名稱當檔名前綴 - 第一步:CountdownDialog 類別,tkinter 小視窗顯示倒數 10 秒,含「立即開始截圖」按鈕,Enter/Space 也可觸發 - 第二步:ScreenSelector 類別,PIL.ImageGrab.grab() 擷取全螢幕,ImageEnhance.Brightness 暗化至 0.5,tkinter 全螢幕視窗(fullscreen、topmost、overrideredirect),Canvas 顯示截圖,滑鼠拖曳即時顯示紅色(#FF4444)選取框 - 第三步:AnnotationEditor 類別,框選完的裁切圖進入標記模式: - 工具列:畫筆(自由畫線/圈)、箭頭(拖曳起→終,PIL ImageDraw 繪製含三角形箭頭)、文字(點擊位置彈出輸入框,Enter 提交,PIL ImageFont 描邊繪製) - 6 色可選(紅/黃/綠/藍/白/黑),當前工具和顏色高亮顯示 - 撤銷(Ctrl+Z):每步操作存 PIL Image 快照,撤銷時回到上一張 - 完成按鈕 + 跳過按鈕(存原圖)+ ESC 取消 - 文字輸入框開啟時,全域快捷鍵(Ctrl+Z/Escape/Ctrl+Enter)必須停用,避免衝突 - Enter 鍵不綁定「完成」(避免打字時誤觸),完成用 Ctrl+Enter 或按鈕 - 大圖自動縮放顯示(不超過螢幕 85%),標記座標需轉換回原圖尺寸 - print(完整檔案路徑) 輸出供 Claude 捕捉,ESC 或取消倒數則 exit(1) 檔案二:[USERPROFILE]\.claude\skills\截圖\SKILL.md(Claude Code Skill) YAML frontmatter 格式: --- name: 截圖 description: 使用者想要截圖給你看,以便更清楚說明問題或畫面狀態。觸發條件:使用者說「截圖給你看」、「我截一下」、「截個圖說明」、「讓我截圖」、「我截圖」,或任何表示要用截圖說明問題的語句。 --- 內容:指示 Claude 的執行步驟(pwd 取路徑 → Bash 執行 Python → Read 讀圖 → 智慧判讀回應) 判讀規則:圖上有文字→優先讀取回應,有箭頭/圈選→結合上下文判斷,無標記→問使用者 檔案三:在 [USERPROFILE]\.claude\CLAUDE.md 加入路徑參考段落(不需寫觸發規則,Skill 的 description 已處理觸發): ## 截圖工具 - Skill 位置:`~/.claude/skills/截圖/SKILL.md`(description 自動觸發,不需手動 `/截圖`) - Python 程式:[安裝資料夾]\screenshot_tool.py - 截圖存放:[安裝資料夾]\截圖\ 【建置完成後】 請執行以下指令做一次快速測試,確認程式能正常啟動: python -X utf8 "[安裝資料夾]\screenshot_tool.py" ``` Claude Code 會先問你安裝路徑,然後自動建立所有檔案、設定 Skill、跑測試。你只需要回答問題和核准檔案寫入。 --- ## 使用方式 建置完成後,在 **任何 Claude Code 對話**中: 1. 說「我截圖給你看」 2. 小視窗出現倒數,趁這時切換到你要截圖的頁面(或點「立即開始截圖」) 3. 畫面變暗後,用滑鼠拖曳框選要說明的區域 4. 進入標記模式——用畫筆圈重點、拉箭頭指位置、打字說明問題 5. 按「完成」存檔(或「跳過」直接存原圖),Claude 立刻看到截圖 6. 如果你在圖上寫了文字說明,Claude 會直接讀取並回應;沒標記才會問你 **標記操作快捷鍵:** | 按鍵 | 功能 | |------|------| | Ctrl+Z | 撤銷上一步標記 | | Ctrl+Enter | 完成並存檔 | | ESC | 取消截圖 | 截圖自動存到 `截圖/` 資料夾,檔名格式:`專案名稱_20260302_143524.png` --- ## 常見問題 **Q:倒數時間不夠,來不及切換視窗?** A:修改 `screenshot_tool.py` 中 `CountdownDialog.SECONDS = 10` 這行,改成你需要的秒數。 **Q:畫面變暗後點擊沒有反應?** A:確認 Python 視窗有取得焦點,點一下畫面再試。 **Q:路徑出現亂碼?** A:確認執行指令有加 `-X utf8` 參數,且程式開頭有 `sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')`。 **Q:提示「找不到 PIL」?** A:執行 `pip install Pillow` 安裝套件。 **Q:可以用在多螢幕嗎?** A:目前只截取主螢幕,多螢幕支援可後續擴充。 **Q:標記模式可以不用嗎?** A:可以,按「跳過」會直接存原圖,不加任何標記。 **Q:標記的文字太小/太大?** A:修改 `AnnotationEditor.FONT_SIZE = 20` 這行,數字越大文字越大。畫筆粗細改 `PEN_WIDTH`,箭頭改 `ARROW_WIDTH`。 **Q:Skill 和 Command 我搞混了,怎麼判斷?** A:看觸發方式——需要使用者打 `/指令` 才觸發的用 Command,想讓 Claude 自動判斷觸發的用 Skill。截圖工具是後者。 --- ## 技術原理簡介 | 技術 | 用途 | |------|------| | `PIL.ImageGrab.grab()` | 擷取全螢幕畫面 | | `PIL.ImageEnhance.Brightness` | 暗化圖片產生遮罩視覺效果 | | `PIL.ImageDraw` + `PIL.ImageFont` | 在圖片上繪製標記(畫筆、箭頭、文字描邊) | | `tkinter` | 全螢幕 GUI、倒數視窗、標記編輯器、滑鼠事件處理 | | `PIL.ImageTk.PhotoImage` | 將 PIL 圖片顯示在 tkinter Canvas | | `math.atan2` | 計算箭頭三角形角度 | | `sys.argv[1]` + `$(pwd)` | 取得當前專案名稱,自動套用到截圖檔名 | | Claude Code Skill(`SKILL.md`) | YAML description 自動觸發,內容指示 Claude 執行流程 | | `CLAUDE.md` 路徑參考 | 方便維護時快速定位相關檔案(非觸發規則) | --- *文章分享自 Claude Code 實際開發經驗,2026 年 3 月(更新:加入標記功能)*