對外網路連線能力監控程式 NetCheckMonitor（Windows 可攜版）
========================================

版本 0.9.21

介面語言
- 程式第一次執行時會要求選擇「繁體中文」或「English」，選擇後會記住設定，日後不再重複詢問。
- 可在主畫面的「設定」中手動變更介面語言；新語言會在下次啟動程式時套用。
- 程式不再依照 Windows 系統語言自動判斷。

使用方式
1. 執行 NetCheckMonitor.exe。
2. 預設每 60 秒檢查一次；需要時可在開始前修改間隔。
3. 如需改用自己的網站或 IP，先按主畫面下方「設定」，選擇自訂並輸入一至三組目標。
4. 按「開始監控」。開始後按鈕會反白停用，避免誤觸中止長時間監控；最小化視窗後，程式仍會在系統匣持續執行。
   首次失敗會在 5 秒後快速複查，連續失敗才確認斷線；長時間斷線會自動降低複查頻率，但檢查間隔不會超過主畫面設定的週期。
   監控期間系統匣圖示會保持顯示：綠色代表連線正常、紅色代表確認斷線、橘色代表檢查中、灰色代表暫停。
   主畫面會顯示目前網卡、連線類型（有線／Wi-Fi／VPN）及 Wi-Fi 訊號百分比；網卡切換會寫入 CSV、HTML 與 PDF 報表。
5. 臨時不想納入測試時按「暫停」；恢復後按「繼續」。暫停區段會記錄，但不計入連線率。
6. 監控期間可隨時按「查看報表」，程式會更新並開啟累積圖形化 HTML 報表，連線檢查不會停止。
7. 監控期間可隨時按「查看報表」；需要結束測試時，使用右下角「關閉程式並停止監控」。
8. 按「下載報表 PDF 文件」可選擇全部資料或指定起訖日期，下載 A4 橫式 PDF 報表。
9. 開啟「設定」→「Google Drive 備份設定」，可登入並設定每日雲端備份時間；清除全部資料也移至設定頁。
10. 開啟「設定」→「Gmail 報表與通知設定」，可將每日 PDF／CSV 與網路恢復通知寄給登入的同一個 Gmail 帳戶，並可寄送測試郵件。
   若已啟用定時測速且當日有紀錄，Google Drive 與 Gmail 日報也會包含當日測速 HTML 報表及測速原始 CSV；沒有測速紀錄時仍照常處理網路監控報表。
11. 要離開程式時按主畫面右下角「關閉程式並停止監控」；確認後會先停止監控、強制儲存 CSV 與備援資料、建立最終報表，再安全結束程式。

網路測速
- 測速功能目前為 Beta，僅提供可選用的定時測速，首頁不提供手動測速按鈕。可在「設定」→「定時測速設定（Beta）」啟用並選擇等級：快速最多約 25 MB、標準最多約 130 MB、完整最多約 400 MB；實際流量會因連線狀況而有差異。
- 定時測速預設關閉，預設間隔 24 小時，可設 1～168 小時；只在監控進行中且未暫停時執行，重新啟動後不會一次補跑多筆錯過的測速。
- Windows 計量付費、漫遊或超過流量上限的網路預設不執行定時測速。若使用者另外允許，每一次排程執行前仍會連續兩次警告及確認。
- 測速設定頁中的「開啟速度趨勢報表」可查看獨立 HTML，包含下載／上傳趨勢、每日統計、延遲、Jitter、測試流量、網卡與 Wi-Fi 訊號；同頁並提供 Speedtest 與中華電信 HiNet 官方測速連結。測速資料不影響斷線判定、有效監控時間、斷線次數或百分比。
- 本程式使用 Cloudflare 測速服務，因伺服器、路由與量測方式不同，結果可能與 Speedtest／中華電信測速有差異，僅供趨勢及叫修佐證參考。
- 測速會暫時占用頻寬，結果亦可能受 Wi-Fi、其他裝置流量、Cloudflare 路由與電腦效能影響，只供趨勢及叫修佐證參考。
- 標準與完整模式會以最多八條資料流改善高速光纖被單一連線低估的問題。Cloudflare 與 Speedtest 使用的伺服器、路由及計算方式不同，兩者結果仍可能存在合理差異。
- 每次實際開始測速後至少間隔 15 分鐘，限制會儲存在設定檔，重開程式也不會清除。Cloudflare 未公布測速端點的固定限制；若收到 HTTP 403／429，程式至少冷卻 60 分鐘，並遵守較長的 Retry-After。連續遭拒時會逐次延長，最長 24 小時。
12. 按主畫面下方「關於」可查看版本、程式用途與作者聯絡資訊。

事件註記
- 監控開始後可按主操作列中「暫停」右側的「事件註記」，暫停期間也可使用。
- 可自行輸入最多 500 個字元，或快速填入「重開數據機」、「重開無線路由」、「電腦重新開機」、「下雨」、「打雷」。
- 註記會連同按下儲存時的時間立即寫入主要 CSV 與本機備援，並整合顯示於報表的「斷線事件與事件註記」表格；24 小時時間軸會以紫色標線呈現。
- 在 HTML 報表中將滑鼠靠近連線狀態或紫色註記標線，可查看對應時間、狀態與註記內容。
- 事件註記只作為障礙排查的時間標記，不會增加斷線次數，也不影響斷線時間或百分比。

監控目標設定
- 內建模式依序測試 Microsoft、Google、Cloudflare 公開連線端點。
- 自訂模式最多輸入三組網站或 IP，依畫面順序測試，任一成功即判定本次連線正常。
- 可輸入 https://example.com/status、example.com 或 1.1.1.1。省略通訊協定時，網站使用 HTTPS，IP 使用 HTTP。
- 僅支援 HTTP / HTTPS；空白、錯誤、重複或包含帳號密碼的目標無法儲存。
- 設定保存在執行檔旁的 NetCheckMonitor.settings.json，方便攜帶；舊版 AppData 設定會自動移轉一次。
- 可分別勾選「登入 Windows 後自動啟動程式」及「程式啟動後自動開始監控」。兩項同時啟用且由 Windows 登入自動啟動時，未完成工作階段會免確認直接接續並開始監控；手動啟動程式時仍會詢問是否接續。
- 可分別設定「監控期間防止電腦進入休眠」與「監控期間阻止 Windows 關機或重新啟動」。休眠保護預設開啟，關機保護預設關閉；啟用關機保護後請按「關閉程式並停止監控」再關機。Windows 強制更新、斷電或硬體重置仍可能中斷程式。
- 啟動時會檢查是否已有 NetCheckMonitor 執行中；重複啟動只會顯示既有視窗，不會建立第二份監控。
- 監控期間仍可開啟設定。若測試目標有變更，程式會先保存原工作階段與報表，再以新目標自動開始新的監控；只修改自動啟動選項不會中斷目前監控。
- 可選擇「HTTPS 失敗時執行進階分層連線診斷」。正常成功時不增加測試；失敗時才檢查網卡、預設閘道、DNS、IPv4、IPv6、HTTPS 目標與 Wi-Fi 訊號。監控中切換會立即生效，不需重新開始。

輸出檔案
- Gmail 寄送與 Google Drive 備份結果會寫入 NetCheck_Delivery_電腦名稱-識別碼.csv，狀態包含 SUCCESS、FAILED、SKIPPED，Detail 欄會記錄動作、資料日期及安全的單行錯誤摘要。
- Delivery 紀錄不會寫入 OAuth 權杖或郵件內文，且會隨「匯出全部紀錄備份 ZIP」一併匯出。
- 紀錄與報表放在程式旁的 NetCheck_Data 資料夾。
- CSV 是逐次檢查的原始資料，可交給網路業者查修。
- HTML 是離線圖形化報表，可用瀏覽器開啟或列印成 PDF。
- 報表會顯示測試電腦名稱、每日斷線統計、最長／平均／最短斷線、第 95 百分位與最高延遲，以及平均延遲變動。
- 報表另有「進階分層連線診斷」表格，直接標示網卡中斷、Wi-Fi 訊號過弱、閘道無回應、DNS 失敗、IPv4／IPv6 單獨失敗、ISP 可能中斷或只有測試網站失敗。未啟用時會標示「未執行進階診斷」。
- 監控進行時會每 10 分鐘更新一次檔名結尾為 `_Cumulative_Live.html` 的累積即時報表。
- 即時與結束 HTML 報表會讀取所有尚未清除的 CSV，而不是只統計本次執行。
- 每個實際監控工作階段分開累加；程式未執行、電腦關機、工作階段之間的空白時間，以及完全沒有 CHECK 紀錄的工作階段都不計入有效監控時間與斷線百分比。
- 如果程式所在位置不可寫入，資料會改存到「文件\NetCheck_Data」。

檔名與電腦識別
- 格式：NetCheck_電腦名稱-8碼識別碼_日期時間.csv（HTML 報表使用相同名稱）。
- 電腦名稱最多取 16 個字元，識別碼固定 8 碼，避免檔名過長。
- 識別碼優先由 Windows MachineGuid 做單向雜湊；讀不到時才以 MAC 位址雜湊備援。
- 原始 MachineGuid、MAC 位址或硬體序號不會寫入檔名、CSV 或報表。
- 同一台電腦重複測試通常會維持相同識別碼，方便將多台電腦的資料分開歸檔。

PDF 下載與資料清除
- 「全部已儲存資料」會彙整 NetCheck 管理資料夾內的所有 CSV；主要紀錄和同名備援紀錄只計算一次。
- 「指定日期範圍」包含開始及結束日期當天，並依每日資料製作報表。
- PDF 產生期間不會暫停網路監控，內容以按下下載時已寫入磁碟的資料為準。
- PDF 使用 Windows 內建 Microsoft Edge 的無介面列印功能，Windows 必須保留可正常執行的 Edge。
- 設定頁的「清除全部資料」按鈕會刪除 NetCheck 管理的 CSV、HTML、即時報表及本機備援；下載到其他資料夾的 PDF 不會被刪除。
- 只有執行「清除儲存資料」後，後續累積報表才會從空白資料重新開始統計。
- 監控進行中或其他 NetCheck 程式仍占用紀錄時，清除功能會取消，避免破壞正在收集的資料。

Google Drive 每日雲端備份
1. 在 NetCheck 開啟「設定」→「Google Drive 備份設定」→「登入 Google Drive」。
2. 在系統瀏覽器登入自己的 Google 帳號，確認並同意 NetCheck 要求的權限。
3. 回到 NetCheck 設定每日備份時間即可；不需要下載或匯入任何憑證檔案。
5. 預設備份時間為每天 23:55，可在設定視窗修改並儲存。
- 程式只要求 drive.file 權限，僅能管理由這個 OAuth 應用程式建立或開啟的 Drive 檔案，不會取得整個雲端硬碟的廣泛讀寫權。
- 第一次成功連接時會建立或沿用 Google Drive 根目錄的 Net_Check 資料夾，並在其中建立以電腦名稱命名的子資料夾；新備份會存入該子資料夾。
- 每日檔名：NetCheck_電腦名稱-8碼識別碼_yyyyMMdd_Report.pdf 與 NetCheck_電腦名稱-8碼識別碼_yyyyMMdd_Raw.csv。
- PDF 和 CSV 會以同名檔案更新，重試不會一直製造重複檔案。
- Google 登入權杖、備份時間及最後成功日期會用 Windows DPAPI 加密儲存在目前 Windows 帳號內。
- NetCheck 必須保持執行才能在指定時間備份；若錯過時間，下次啟動會嘗試補傳最近一天，有資料才會上傳。
- 雲端備份進行時，程式會阻止清除資料及一般關閉，避免產生不完整備份。
NetCheck Viewer 遠端設定
- 連接 Drive 後，監控程式會在這台電腦的備份子資料夾建立 NetCheck_Control.json。
- Google Drive 電腦版同步後，Viewer 可修改監控間隔（10～3600 秒）與每日備份時間（00:00～23:59）。
- 監控程式每 5 分鐘檢查一次，並把套用值、時間、成功或拒絕原因寫回控制檔及 Delivery CSV。
- 控制檔不能傳送命令、程式、路徑或任意網址。

Gmail 每日報表與恢復通知
1. 開啟「設定」→「Gmail 報表與通知設定」→「登入 Gmail」。
2. 在系統瀏覽器登入自己的 Google 帳戶並同意寄信權限。
3. 選擇每日 PDF／CSV 報表、網路恢復通知與每日寄送時間，再按「儲存寄送設定」。
4. 可按「寄送測試郵件」立即確認。
- 寄件者與收件者固定為登入的同一帳戶，不能輸入其他收件地址。
- 程式只要求寄信權限，不會讀取 Gmail 信箱。
- 完全斷網時無法立即寄信；恢復通知會加密保存在本機，連線恢復後自動寄出，暫時失敗時會稍後重試。
- Gmail 與 Google Drive 為獨立授權；中斷 Gmail 不會影響 Drive 備份。

長時間執行與資料保護
- 每筆結果會使用強制寫入模式立即落盤，不會等到程式結束才儲存。
- 同一份資料另存備援紀錄到 %LOCALAPPDATA%\NetCheck\Recovery，程式或隨身碟異常時仍可找回已完成的檢查。
- 按視窗右上角 X 或 Alt+F4 只會縮到系統匣，不會結束程式。第一次操作時會提醒使用右下角「關閉程式並停止監控」安全結束；提醒只顯示一次。
- 若一定要從系統匣結束，程式會再次顯示確認訊息。
- 工作狀態會保存在 %LOCALAPPDATA%\NetCheck\Monitor\active-session.json。手動開啟程式時會詢問是否接續原 CSV；若兩項自動啟動設定都已開啟並由 Windows 登入自動啟動，則免確認直接接續。
- 接續前程式未執行的區段會標示為中斷並排除統計；正常結束時會清除接續狀態。

檢測方式
- 預設依序測試 Microsoft、Google、Cloudflare 的 HTTPS 公開連線端點，也可在「設定」改用最多三組自訂網站或 IP。
- 任一端點成功即判定可對外連線，降低單一服務暫時異常造成誤判的機率。
- 斷線發生與恢復時間的精度受檢查間隔影響；預設約為 1 分鐘。
- 每日斷線百分比＝該日確認斷線時間 ÷ 該日有效監控時間，暫停、程式中斷與關機時段會從兩者排除。
- 進階診斷的開啟或關閉只影響失敗後是否收集分層證據，不影響斷線判定及所有統計，因此不同設定產生的連線率、斷線時間與百分比仍可直接比較。

長時間測試注意事項
- 監控進行時，程式會要求 Windows 不要自動進入睡眠；螢幕仍可依系統設定關閉。
- 筆記型電腦請接上電源。闔上螢幕若設定為睡眠，Windows 仍可能強制進入睡眠。
- 請不要在監控期間直接拔除存放程式的 USB 隨身碟。
- 建議保留整個 NetCheck_Data 資料夾，交給網路業者時同時提供 CSV 與 HTML。

官網與版本檢查
- 「關於」頁提供官網、GitHub 專案連結及「線上更新」按鈕；按下後會從 NetCheck 官網下載、驗證、替換並重新啟動最新正式版本。
- 若程式位於 Program Files 等受保護目錄，更新檔完成驗證後 Windows 會顯示一次 UAC 系統管理員權限確認；允許後會自動完成替換與重新啟動。
- 若正在監控，更新前會安全保存狀態，新版啟動後自動接續；`NetCheck_Data` 不會被更新器修改。
- 只有按下按鈕時才會查詢一次官網，不會背景定時檢查；短時間重複檢查會被冷卻機制阻擋。
- 更新器只接受 HTTPS 官網網域與固定下載路徑，並驗證更新清單大小、ZIP 大小、SHA-256、ZIP 安全路徑、內部檔案雜湊、程式名稱及版本；任一項不符即停止更新。
- 更新結果記錄於 `NetCheck_Data\NetCheck_Update.csv`；下載或驗證失敗時原版本會繼續運作。

系統需求
- Windows 10 / 11，內建 .NET Framework 4.8。
- 不需要安裝 Python、瀏覽器擴充功能或額外套件。
- Google Drive 雲端備份需要網路連線與可用的預設系統瀏覽器。
