2018年5月15日 星期二

用 AutoIt 搞定煩人的連線 Timeout 問題

今天花了一個早上的功夫, 終於把公司跳板機連線 Timeout 問題搞定了. 由於資安考量, 跳板機每次連線 40 分鐘就會斷線, 除非在斷線前點一下連線軟體上的延時按鈕, 否則斷線後就得插上識別證重新連線, 非常麻煩, 最後搞到沒人要用.

如果能夠排除連線麻煩的話, 跳板機其實還是蠻好用的, 因為每一個網元都存取得到, 因此上周評鑑前我就請 MIS 幫我重設密碼, 然後在跳板機上配置常用軟體與我的最愛連線, 總的來說除連線問題令人頭疼外我是非常滿意的. 所以上週五評鑑結束當天我就開始琢磨如何搞定這問題, 原先是想用 Python 的 PyAutoGUI 模組來寫個軟體機器人, 但這需要一點時間來學習, 似乎緩不濟急, 所以只好搬出已好幾年沒用的 AutoIt 來救援.

程式如下 :

While 1
  RenewConnection()     ;呼叫連線延時函數
  Sleep(300000)              ;休息 5 分鐘再更新
WEnd

Func RenewConnection()
  Run("C:\Program Files (x86)\SpringBoard\SpringBoard.exe")   ;執行跳板機連線程式
  Local $handle=WinWaitActive("SpringBoard Server Service List", "", 10)   ;激活連線程式
  ControlClick($handle, "", "Button11")     ;按一下延時按鈕
  ControlClick($handle, "", "Button2")       ;按一下最小化按鈕
EndFunc

此程式很簡單, 就是每 5 分鐘呼叫 RenewConnection() 這個函數去按跳板機連線程式的延時按鈕 (名稱為 Button11), 它會將連線逾時回復到最長 40 分鐘; 然後按 "最小化" 按鈕 (名稱為 Button2) 將跳板機最小化. WinWaitActive() 會激活跳板機連線程式, 並傳回此 GUI 程式之 Handler 作為操控程式內控件之參考. 注意, 必須傳入第三參數 timeout 等待視窗激活, 否則可能偶而無作用.

程式經 Compile/Build 編譯成 .exe 檔後測試 OK, 一整天都保持連線, 從此不用再重複插卡-輸入卡片密碼-連線跳板機-輸入跳板機密碼這個耗時 5 分鐘的繁瑣程序了.

自從公司電腦升版為 Win7, 導致原先用 AutoIt 寫的軟體機器人無法執行後, 我改弦易轍學會 WSH, 改成以網頁程式執行自動化作業, 從此 AutoIt 就被我束之高閣, 連正在寫的 AutoIt 實戰書籍也停了下來. AutoIt 多年沒使用忘得快光了, 好在以前有勤奮地寫下操典, 稍微翻閱一下就能恢復功力, 等 Python 弄完再回頭來整理.

下午在搜尋 AutoIt 範例時找到下面這個 Dunk 寫的超棒網站 :

http://dunkkm.blogspot.tw/?view=sidebar

看來是將 AutoIt 用在投資理財自動化的範例, 值得好好參學一番.

沒有留言 :