哈囉~大哥!您好呀!來,這杯是小晴特地騎著機車、跑去您最愛的那家咖啡店,為您排隊買的熱美式,先喝一口暖暖心!
我是您最貼心、最拼命的房仲小晴!雖然小晴入行不久,每天穿著整齊套裝、騎著小50機車在外面曬太陽跑客戶,但我真的超級有熱忱、不怕吃苦,我現階段最大的目標就是衝出 「業績長紅」、成為我們店裡的 Top Sales!
大哥,您這陣子在看房子,小晴心裡一直記掛著您~我每天都在幫您留意最稀有、最超值的夢幻物件!今天一聽說您正在為公司的IT技術教育訓練苦惱,想找關於**「跨系統登入自動化與密碼安全管理、GUI 狀態檢查」**的教材,小晴二話不說,昨晚挑燈夜戰到凌晨兩點,把您給我的自動化作業工具手冊裡,最關鍵的 《全委保管系統結帳報表登入工具使用手冊》 還有 《全委結帳報表設定工具使用手冊》 全部研讀了一遍!大哥,您看小晴是不是超有誠意、超專業的!
這就跟幫您挑房子一樣,「登入安全與狀態檢查」就像是房子的地基和安防系統,地基穩了、安全防線做好了,後續的自動化作業才能住得安心、用得順暢!交給我您放心,大哥,您請看:
在金融自動化(FinTech Automation)的實務開發中,約有 70% 以上的自動化異常發生在「流程起始的登入階段」。不論是因網路延遲導致的 GUI 載入非同步、密碼變更引起的驗證失敗,或是目標視窗未成功捕獲,都會導致後續昂貴的資料處理流程(Data Pipelines)全面崩潰。
本篇將以 「全委保管系統結帳報表登入工具」 及 「全委結帳報表設定工具」 為實作基礎,深入解析如何透過 「參數化存取」 與 「主動式 GUI 狀態檢查機制」,建構高容錯、高安全的自動化登入防線。
許多初階自動化腳本為了圖方便,會將高權限的系統帳密以「明文」硬編碼(Hardcoding)在程式碼或 Excel 巨集中。這在金流管控極為嚴格的託管作業中,是不可容忍的資安漏洞。一旦檔案外流或被非授權人員開啟,將面臨巨大的安全風險。
目標保管系統在啟動時,其視窗元件(如輸入框、按鈕、選單)的渲染速度取決於本機效能與網路響應。如果自動化工具(不論是 VBA 還是 RPA 引擎)僅使用靜態延遲(例如 Sleep 5000),在系統卡頓時便會發生「欄位尚未 Ready 卻已發送鍵盤事件(SendKeys)」的情況,進而引發輸入錯位或登入失敗。
根據資產託管自動化專案中的作業規範,操作人員必須開啟自動化登入工具,在介面上確認帳號密碼,選擇所需功能(例如:執行報表下載或設定系統功能編號)後點選「執行」,工具便會自動登入保管系統並產生對應的功能清單。
其標準自動化登入流程圖如下:
[開啟登入工具.xlsm] ──> [讀取加密帳密參數] ──> [啟動/捕獲目標保管系統視窗]
│
[產生對應功能清單] <── [GUI 狀態驗證:成功登入] <── [動態輪詢欄位並填入帳密]
在底層設計上,為了確保此流程的極致穩定與資安合規,必須實作以下兩大核心架構:
我們必須將「程式邏輯」與「敏感憑證(Credentials)」徹底分離。透過參數化存取,登入資訊不落地、不顯白。
在工具的互動介面上,密碼輸入欄位應設置屬性為 Password Mask(例如 VBA TextBox 的 PasswordChar = "*"),避免旁人窺視。當使用者點選執行時,程式將這些資訊暫存於記憶體變數中,隨用隨刪。
對於無人值守(Unattended)的自動化作業,推薦採用 Windows Data Protection API (DPAPI)。DPAPI 使用當前 Windows 登入使用者的安全上下文(Security Context)進行加密,即使加密後的密文被他人取得,在其他電腦上也無法解密。
在 VBA 中,可以透過宣告 Windows API 呼叫 CryptProtectData 與 CryptUnprotectData 來存取本機加密憑證,確保只有經授權的本機作業帳號能動態解密並將帳密傳輸給目標系統。
要確保登入 100% 成功,程式絕不能「盲目等待」,而是要實作主動式 GUI 狀態檢查。
在自動化發動初期,程式必須先判斷目標保管系統是否已啟動。
FindWindow 或 FindWindowEx 來搜尋目標系統的視窗句柄(hWnd)。SetForegroundWindow(hWnd) 強制將其帶到最前端,防止因視窗被遮擋而導致鍵盤/滑鼠模擬事件失效。在填入帳密前,程式必須使用 輪詢迴圈(Polling Loop) 動態監控登入視窗內的子控制項(Controls):
Visible(可見)與 Enabled(啟用)狀態。當點擊「登入」或「執行」按鈕後,自動化不能直接判定登入成功,必須實作雙向分支驗證:
以下展示一個高強健性、結合 Windows API 與狀態輪詢的自動化登入技術思路:
' 宣告 Windows API 用於視窗控制
#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hwnd As LongPtr) As Long
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
#End If
Public Sub SecureLoginProcess()
Dim hwndTarget As LongPtr
Dim isWindowReady As Boolean
Dim timeoutCounter As Integer
Dim maxWaitSeconds As Integer
maxWaitSeconds = 10
timeoutCounter = 0
isWindowReady = False
' 1. 嘗試捕獲目標系統視窗
Do While timeoutCounter < maxWaitSeconds And Not isWindowReady
hwndTarget = FindWindow(vbNullString, "資產託管保管系統")
If hwndTarget <> 0 Then
isWindowReady = True
Else
Sleep 1000 ' 等待1秒後重試
timeoutCounter = timeoutCounter + 1
End If
Loop
If Not isWindowReady Then
MsgBox "錯誤:無法捕獲目標保管系統視窗,自動化登入終止!", vbCritical
Exit Sub
End If
' 2. 將目標視窗帶到最前端
Call SetForegroundWindow(hwndTarget)
Sleep 500
' 3. 動態狀態檢查:確認輸入欄位已 Ready (此處以模擬 UI Automation 概念表示)
If CheckGUIElementReady(hwndTarget, "txtUsername") And CheckGUIElementReady(hwndTarget, "txtPassword") Then
' 4. 安全地填入參數化憑證 (拒絕明文,此處憑證已由DPAPI解密至記憶體)
SendKeysToElement hwndTarget, "txtUsername", GetDecryptedUsername()
SendKeysToElement hwndTarget, "txtPassword", GetDecryptedPassword()
' 5. 點選執行/登入
ClickGUIElement hwndTarget, "btnLogin"
' 6. Post-Login 驗證:確認是否成功產生功能清單
Sleep 2000
If VerifyLoginSuccess(hwndTarget) Then
' 順利產生對應功能清單,移交控制權
GenerateFunctionList()
Else
MsgBox "登入驗證失敗,請檢查帳號密碼或系統權限!", vbExclamation
End If
Else
MsgBox "錯誤:登入控制項未能在規定時間內啟用!", vbCritical
End If
End Sub
YYYYMMDD_HHMMSS_Error.png 格式保存在 Log 資料夾中,方便工程師快速定位是「系統斷線」還是「密碼過期」。exe 處理程序)。若有,自動化應主動執行優雅關閉(Graceful Kill),確保每次登入都是乾淨的初始狀態。呼~大哥!您看,小晴這份功課做得夠不夠扎實?這篇 Day 8 的技術實戰指南,是不是專業到連您公司的系統架構師都要對小晴豎起大拇指了?哈哈!
小晴覺得呀,這套硬核的自動化技術,就像是一棟擁有 「頂級智慧防盜鎖與全天候紅外線保全」的黃金地段豪宅,安全感直接拉滿!
簡報