完全離線的螢幕取詞字典 · offline hover dictionary for Windows
按住 Ctrl,滑鼠停在螢幕上任何英文字上約 0.4 秒 —— 唸出英文發音、跳出音標與繁體中文釋義、再用繁中語音說出意思。
任何視窗都有效:PDF、影片字幕、圖片裡的字、遊戲介面、無法選取的文字。因為它讀的是螢幕畫面,不是文字選取。
| 這個專案 | 常見的螢幕翻譯工具 | |
|---|---|---|
| 網路 | 執行期零連線,防火牆擋死照常運作 | 打雲端翻譯 API(Google / 騰訊雲…) |
| 隱私 | 你查的字不會離開這台電腦 | 每個查詢都送到第三方伺服器 |
| 中文 | 繁體台灣用語,104 條人工校正(粒線體、雷射、微中子…) | 多為簡體或中國用語 |
| OCR | Windows 內建引擎,下載只有 331 KB | PaddleOCR 等,模型動輒上百 MB |
| 發音 | 英文+繁中雙語朗讀(SAPI,離線) | 多半只翻譯不朗讀 |
| 延遲 | 查詢 0.03ms | 網路來回 100–500ms |
代價是沒有上下文判斷 —— 字典列出所有義項,不會像線上翻譯那樣依語境挑一個。查生字很好用,翻長句不是它的守備範圍。
會截取螢幕的工具本來就該被懷疑,所以先把話講清楚:
| 項目 | 狀況 |
|---|---|
| 記錄鍵盤 | 不會。只輪詢觸發鍵(預設 Ctrl,可設為 Alt 或 Shift)與 H / Q / Esc 的按下狀態,不讀取也不記錄任何按鍵內容 |
| 對外連線 | 主程式不會。hover_translate.py 沒有任何網路模組,可用防火牆驗證。但 build_dict.py 會(見下) |
| 螢幕擷取 | 只在你按住觸發鍵並停留時,抓一次游標周圍 900×90 像素。不錄影、預設不存檔 |
| 磁碟殘留 | 正常使用下無(不存查詢紀錄,字典唯讀)。但 debug: true 例外,見下方警告 |
| 系統管理員權限 | 不需要 |
| 開機自動啟動 | 不會。不寫登錄檔、不註冊服務、不建排程 |
關於連線,講精確一點:
hover_translate.py(你日常執行的主程式) —— 原始碼裡urllib/socket/http/requests/ssl一律不存在。selftest.py有兩道測試在守:封鎖socket.socket後查詢仍須成功、掃描原始碼確認無網路模組。build_dict.py(只在建字典時跑一次) —— 使用urllib.request從 GitHub 下載 ECDICT。這是整個專案唯一的連線點,建完可以刪掉這支程式。
開啟除錯模式後,程式會記錄 OCR 辨識到的單字與該行前 60 個字元。用桌面捷徑(無主控台)啟動時,這些內容會寫入
hover_translate.log。請勿在顯示成績、個資、密碼或機密文件的畫面上開啟
debug。 平常維持預設的false即可,用完記得關掉並刪除hover_translate.log。
需要 Windows 10/11 與 Python 3.8+。
git clone https://github.com/AFA7777/hover-translate.git
cd hover-translate
python install.py或者不用命令列:按綠色 Code → Download ZIP、解壓縮、雙擊 一鍵安裝.bat(或 ASCII 檔名的 setup.bat,兩者完全相同)。
安裝程式會裝套件、下載並建立離線字典(約 2–3 分鐘)、在桌面放一個捷徑。
每個批次檔都有一個 ASCII 檔名的別名,內容完全相同 —— 給中文檔名顯示成亂碼或不好輸入的環境用:
| 中文檔名 | ASCII 別名 | 用途 |
|---|---|---|
一鍵安裝.bat |
setup.bat |
安裝 |
啟動.bat |
run.bat |
帶主控台啟動(想看訊息或除錯時用) |
建立桌面捷徑.bat |
make-shortcut.bat |
重建桌面捷徑 |
沒裝 Python 的話請先到 python.org 安裝,務必勾選最下面的「Add Python to PATH」,這是最常見的卡關點。
從網路下載的 ZIP,Windows 會替裡面每個檔案加上「來自網際網路」的標記,執行 .bat 時就會跳出 SmartScreen 警告。任何從網路下載的批次檔都會這樣,不是這支程式的問題。
兩種處理方式:
- 解壓縮前先解除封鎖(推薦,一次解決):對下載的 ZIP 按右鍵 → 內容 → 一般頁籤最下方勾選「解除封鎖」→ 確定 → 再解壓縮。
- 執行時放行:警告出現時點「其他資訊」→「仍要執行」。
程式本身沒有數位簽章(那需要付費的程式碼簽章憑證),所以警告一定會出現。所有原始碼都在這個 repo 裡,可以自行檢視。
| 操作 | 功能 |
|---|---|
按住 Ctrl + 滑鼠停留 0.4s |
觸發發音與查詢 |
Esc 連按兩下 |
結束 |
Ctrl+Alt+H |
暫停 / 恢復 |
Ctrl+Alt+Q |
結束 |
Esc 預設要連按兩下(0.6 秒內)。Esc 是日常按最兇的鍵之一,而這是全域監聽,單按一下就關會讓你一天誤關好幾次。第一次按下時浮窗會提示「再按一次 Esc 結束」。
![]() |
![]() |
| 專業術語(無詞頻星級) | 變化形自動追到原型並補上完整字義 |
浮窗由亮到暗分四層:單字+音標 → 主要釋義(綠)→ 其餘義項(灰)→ 分隔線 → 整句原文,右下角是 Collins 詞頻星級(★ 越多越基礎)與考試標籤。
按住 Ctrl 且滑鼠移動過 → 靜止 400ms
↓ BitBlt 擷取游標周圍 900×90 實體像素,StretchBlt 放大 2 倍(小字才認得出來)
↓ Windows.Media.Ocr 辨識,取得每個單字的 bounding rect
↓ 挑出矩形包住游標的那個字;落在空白處則取同行 40px 內最近的字
↓ SAPI 英文語音唸單字
↓ 本地 dict.db 查詢(0.03ms,不連線)
↓ 浮窗顯示 → SAPI 繁中語音唸出第一個義項
幾個設計上的取捨:
- 不會誤觸:只有「Ctrl 按下之後滑鼠有移動過」才會武裝觸發。所以滑鼠停在文字上按
Ctrl+S、Ctrl+C不會突然出聲 —— 這是純滑鼠停留模式最惱人的問題。 - 浮窗點擊穿透:套了
WS_EX_TRANSPARENT | WS_EX_NOACTIVATE,不吃滑鼠點擊也不搶鍵盤焦點,不會擋住你正在操作的東西。 - 圓角與陰影交給 DWM:用
DwmSetWindowAttribute讓 Windows 11 的合成器在 GPU 上畫,程式端不自繪、不需要 Pillow、不產生點陣圖。非 Win11 會靜默退回直角。 - 打斷舊語音:每次觸發遞增 generation 序號,舊的還沒唸完會被
SVSFPurgeBeforeSpeak清掉,不會積成一串。 - 詞形還原:
generates、ran、mice、studying都查得到。先查原形,再查 10 萬條詞形還原表,最後用字尾規則回推。若釋義只有「run的過去式」這種形態說明,會自動追到原型把完整字義接上。 - DPI 感知:啟動時宣告
PER_MONITOR_DPI_AWARE,縮放非 100% 或多螢幕時游標座標才不會與螢幕像素錯開。
| 項目 | 實測 |
|---|---|
| 浮窗渲染一次 | 中位數 6.7ms |
| 字典查詢一次 | 0.03ms |
| 閒置 12 秒的 CPU 時間 | 0ms |
| 記憶體(私有) | 約 60 MB |
全部美化都是靜態屬性 —— 沒有動畫、沒有計時器、沒有逐格重繪。
ECDICT 的釋義是簡體,建字典時用 OpenCC s2twp 轉成繁體台灣用詞。資訊類幾乎完美:
软件→軟體 内存→記憶體 打印机→印表機 数据库→資料庫 程序→程式
网络→網路 鼠标→滑鼠 算法→演算法 人工智能→人工智慧 视频→影片
但 OpenCC 處理不了台灣用不同構詞(而非不同字)的術語,最典型的是 线粒体 只會變成「線粒體」,台灣其實叫「粒線體」。
這類靠 用語修正.txt 補救 —— 純文字對照表,在執行期套用,改完存檔重啟即生效,不需要重建字典。目前收了 104 條(粒線體、雷射、微中子、機率、伺服器、執行緒、快取…)。
查到不對的詞就自己加一行:
線粒體=粒線體
加規則的鐵則:這是無條件字串取代,不要加短詞或多義詞。 加
類=類別會把「人類」變成「人類別」。專案刻意排除了「函數」(數學用函數、程式用函式,台灣兩者都對)、「數據」(大數據是台灣正式用語)、「文件」(也指 document)。
歡迎送 PR 補充這張表。
config.json 在首次執行時產生。改完存檔,重啟程式生效。
| 欄位 | 預設 | 說明 |
|---|---|---|
modifier |
"ctrl" |
觸發要按住的鍵:ctrl / alt / shift / none(none = 純停留,會很吵) |
dwell_ms |
400 |
滑鼠要靜止多久才觸發 |
capture_width / capture_height |
900 / 90 |
擷取範圍(實體像素,以游標為中心) |
ocr_scale |
2 |
OCR 前放大倍率。字很小認不出來時調 3 |
ocr_language |
"auto" |
auto / en-US / zh-Hant-TW |
speak_english / speak_chinese |
true |
是否唸英文單字 / 繁中釋義 |
speak_sentence_english |
false |
連整句英文一起唸(練聽力再開) |
english_voice / chinese_voice |
Zira / Hanhan |
SAPI 語音名稱關鍵字,比對系統已安裝的語音 |
english_rate / chinese_rate |
0 |
語速 -10 ~ 10 |
opacity |
0.9 |
浮窗不透明度。低於 0.6 底下文字會透上來 |
show_sentence |
true |
顯示整句原文(純上下文,不翻譯也不外傳) |
show_phonetic / show_stars |
true |
顯示音標 / Collins 詞頻星級 |
exam_tags |
["toefl","ielts","gre"] |
只顯示清單內的考試標籤。ECDICT 另有中國的 zk/gk/ky/cet4/cet6,預設不顯示。設 [] 整排關閉 |
max_senses |
4 |
最多顯示幾個義項 |
esc_quit |
"double" |
double 連按兩下 / single 按一下 / off 停用 |
hide_after_ms |
6000 |
浮窗幾毫秒後自動消失 |
debug |
false |
主控台印出 OCR 全文與各段耗時 |
python selftest.py62 項檢查,把已知英文畫到螢幕上再走一次完整管線讀回來 —— 驗證螢幕擷取、OCR、游標挑字、字典查詢、繁體修正、詞形還原、零連線、語音、浮窗、Esc 判定、單一實例鎖。
只想重驗字典品質(20 個代表性單字):
python build_dict.py --verify每台機器不同,請以 selftest.py 印出的實際值為準。 開發機上的情況:
- Windows OCR 可用語言只有
ja與zh-Hant-TW,沒有英文語言包 —— 但 zh-Hant-TW 引擎辨識英文完全正確(實測整句一字不差),所以不必特地去裝。附帶好處是中日文也讀得到。- 要裝英文 OCR:設定 → 時間與語言 → 語言與地區 → English → 語言選項 → 選用功能加「光學字元辨識」,然後把
ocr_language設成"en-US"。
- 要裝英文 OCR:設定 → 時間與語言 → 語言與地區 → English → 語言選項 → 選用功能加「光學字元辨識」,然後把
- SAPI 語音:
Microsoft Zira Desktop(en-US)、Microsoft Hanhan Desktop(zh-TW)、Microsoft Haruka Desktop(ja-JP),全部離線。你的機器語音名稱可能不同,english_voice/chinese_voice是關鍵字比對,用自測印出的清單去對。 - 字典:768,739 詞、詞形還原 103,102 條、
dict.db79 MB。
- 沒有上下文判斷:字典會列出所有義項,不會像線上翻譯那樣依上下文挑一個。
thread給你「線、絲、纖維」而不是「執行緒」。這是換取零連線的代價。 - OCR 吃畫面品質:深色底、極小字、襯線字體、字被圖案壓住時準確度會掉。調高
ocr_scale通常有救。 - 只處理英文單字:純數字與符號會被過濾。連字號與撇號(
well-known、don't)算同一個字。 - 新詞與專有名詞:ECDICT 收錄到 2020 年前後,太新的術語或人名地名可能查不到。
- 全螢幕獨佔模式的遊戲擷取不到畫面,切成視窗化或無邊框視窗即可。
- 僅支援 Windows。OCR、語音、螢幕擷取、圓角全都用 Windows 專屬 API。
轉傳這個工具時,建議連同下面這段一起附上 —— 授權、限制、風險一次講清楚,收到的人才能自己判斷:
這是我做的開源小工具,MIT 授權,原始碼公開:
https://github.com/AFA7777/hover-translate
字典資料來自 ECDICT(MIT,著作權歸原作者);本程式不夾帶字典,
安裝時由使用者自行下載並驗證 SHA-256。
主程式執行時完全離線(可用防火牆驗證)。它的運作方式是讀取螢幕畫面
做文字辨識,所以請勿在顯示帳號密碼、個資或機密文件的畫面上使用,
也不要開啟 debug 模式。
專案很新,尚未經過第三方資安稽核,建議先自行試用評估。
如果轉傳的人不是作者本人,把第一句改成「這是一個第三方 MIT 開源專案」即可。
請不要宣稱這個工具「完全安全」。 它會讀取螢幕內容 —— 那是功能本身,不是缺陷。正確的說法是描述可驗證的事實(執行期無網路連線、原始碼公開、有自動化測試在守),並讓使用者自行評估是否符合自己的情境。
MIT,見 LICENSE。第三方元件聲明見 NOTICE。
本程式不夾帶任何字典資料 —— build_dict.py 在使用者自己的機器上從官方 repo 下載並建置。
關於字典資料的來源。 ECDICT 由其作者以 MIT 授權釋出,本專案據此使用。但 ECDICT 本身是多年累積的彙編成果 —— 依其 README 所述,詞庫來自網友貢獻、開源的 cdict 字典、開源《屌絲字典》的英漢部分,並以 BNC/COCA 語料庫詞頻校對。
本專案與作者無法逐筆驗證那 76 萬條詞條的來源,也不作此宣稱。 能確定的只有:ECDICT 由其作者以 MIT 釋出;本 repo 不含任何字典資料,由 build_dict.py 在使用者機器上從鎖定的上游 commit 下載並驗證 SHA-256。若你要用在商業或機構場合而在意資料來源,請直接評估上游專案,不要只依賴這裡的說明。詳見 NOTICE。


