今天花了一個早上的功夫, 終於把公司跳板機連線 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 用在投資理財自動化的範例, 值得好好參學一番.
11 則留言 :
跳板機是甚麼?
跳板機就是從終端連線到目標主機前要先連線的中間伺服器, 是資安要求避免目標主機被攻擊.
請教您
我目前遇到一個怪問題。欲將設備數多按鈕用AUTOIT編輯成鍵盤熱鍵。
辦公室測試沒有問題Hot key 鍵盤: 英文 數字 F1~12 都可以當熱鍵動作
無塵室放進設備電腦Hot key 鍵盤: 英文 數字 都無法作動。F1~212 可以動作
舉例如下
HotKeySet("{1}", "_2x");2倍顯微鏡
Func _2x();2倍顯微鏡
ControlClick ( "title", "text", controlID)
EndFunc
會是怎樣影響呢?
AUTOIT 版本問題(辦公室與無塵室版本不同)?
辦公室 中文WIN7 無塵室XP?
鍵盤輸入日文版?
有請大打指點方向? 謝謝。
狐狸大大您好
小弟找到原因,
AutoIt3 - v3.5.4 辦公室版本
HotKeySet("{1}", "_2x");2倍顯微鏡
HotKeySet( "1" , "_2x");2倍顯微鏡
HotKeySet("{e}", "_Lapping");研磨
HotKeySet( "e" , "_Lapping");研磨
有無{}均可正常動作
AutoIt -v3.2.8.1 無塵室版本
HotKeySet( "1" , "_2x");2倍顯微鏡
HotKeySet( "e" , "_Lapping");研磨
數字鍵,英文鍵 不能{},不然會沒動作
所以是版本問題嗎? AutoIt 我已很久一段時間沒使用了 (都在用 Python)
狐狸大大
確認結果是,版本的問題。
請教您,
我設備有個視窗 Title 是 '基板判定',WinInfo 讀取確實是 '基板判定',複製貼上程式編輯器,變成 ??? 問號
讓我這是窗內作業所有按鈕,"title" 無法辨識,成為有效控制
ControlClick ( "title", "text", controlID [, button = "left" [, clicks = 1 [, x [, y]]]] )
請問您還有其它方式替代 "title" 嗎?
感謝。
可能是編碼問題, 試試程式以 utf-8 存檔看看
老師您好
感謝指導
無塵作業系統 Win2000
安裝的 AutoIt
;AutoIt - v3.2.8.1
;SciTE - v1.71
;Win 2000
該版有 File=>Encoding
8Bit
UCS-2 Big Endian
UCS-2 Little Endian
UTF-8
UTF-8 Cookie
明天,我再選擇 UTF-8 存檔試看看。
關於:
WinInfo 讀取日文漢字(設備稼動主程式為日文介面) '基板判定',複製貼上程式編輯器,變成???亂碼
以致 "title" 無法辨識,成為有效控制。
可以解決(1)~(5),打從一開始寫程式就不想使用座標系(1)~(4)。
(1)MouseClick
(2)MouseClick + WinGetPos
(3)PixelSearch + MouseClick(按鈕有顏色可辨識)
(4)PixelSearch + WinGetPos(按鈕有顏色可辨識)
(5)ControlClick
所以,我另外準備對應 "title" 亂碼。(我在座位是可以動作,實際上機才是真正稼動主程式日文介面)
ControlClick("[Class:#32770]","ALL","[CLASS:Button; INSTANCE:22]")
ControlClick("[Class:#32770]","ALL",4463)
ControlClick("[Class:#32770]","ALL","Button22")
ControlClick("[Class:#32770]","ALL","[CLASS:Button;INSTANCE:22]","Left",4,60,20)
ControlClick("[Class:#32770]","ALL",4463,"Left",1,60,20)
ControlClick("[Class:#32770]","ALL","Button22","Left",1,60,20)
日文漢字編碼也是要用 unicode 才行, 最好不要用座標, 程式移到其他解析度螢幕時會跑掉.
有兩種設備,設備的傢動程式均是中文漢字+英文
(1)無塵作業系統 Win2000
安裝的 AutoIt
;AutoIt - v3.2.8.1
;SciTE - v1.71
UTF-8 取得中文漢字當作title會呈現亂碼
(2)無塵作業系統 Win7
安裝的 AutoIt
;AutoIt - v3.2.8.1
;SciTE - v1.71
UTF-8 取得中文漢字當作title,呈現類似全型字體放大的漢字
若真使用座標(表示投降)
那就每使用一行座標前加行
Opt(“MouseCoordMode”,2)
下週一,
ControlFouse("[Class:#32770]",OK,"Button2");Fous 住中文漢字室窗屬性資訊
ControlClick("[Class:#32770]","OK","Button2“);ControlClick,OK button按扭
如果,我在辦公室模擬沒問題,在現場設備應該也是吧!
這樣方法,就不用座標方法。
張貼留言