利用 AutoHotKey 來避免報告序號無對應之檢查錯誤

三螢幕

首先解釋一下目前的報告環境及工作流程。目前配有三個螢幕,左方是報告輸入區,右方兩顆是影像區,通常打 plain film 時,閱片程式 (SmartIris) 會把該份報告的影像放在中間的螢幕,用來比較的舊片放在右方的螢幕:

三螢幕-x-ray

最晚讀出來的影像會被設為 active window,因為讀取影像順序的緣故(先新後舊),也就是說,在預設的狀態下,舊片會是 active 的狀態。這時如果把報告發出去,系統會偵測到報告和影像的序號不 match 而跳出警告視窗:

SmartWonder Warning

這個設計的立意雖好(double check 以免看錯片、發錯報告),但會增加一些小小的困擾,影響報告的流暢度。另外,系統有一個設計是,當滑鼠移動到某個影像上時,該影像會自動被 active:

三螢幕-mouse-active

所以如果要避免這樣的檢查,每次要確認報告前,可以把滑鼠移過去晃兩下,等報告影像被 active 後再發出。當然,這樣還是稍嫌麻煩。

最近在試用 AutoHotKey 時發現它也能針對滑鼠的動作做自動化,所以寫了一個小 script bind 到送出報告的快速鍵 (Ctrl + k) 上:

#IfWinActive, tedpc-
;;; Move mouse to SmartIris to activate current image, and then confirm the report (^k).
$^k::
    MouseGetPos, xpos,ypos
    MouseMove, 1919, 0
    SetMouseDelay, 250
    MouseMove, 1921, 0
    SetMouseDelay, 0
    MouseMove, %xpos%, %ypos%
    Send ^k
return

其運作原理在於:確認報告前把滑鼠的坐標移至中央的視窗,觸發該影像成為 active,之後再把滑鼠移回原本的位置,送出報告。

三螢幕-autohotkey-2

但在測試的過程中發現,如果以程式預設的 delay time (20 ms),似乎無法觸發 active,簡單的測試一下,大概會需要 250 ms 左右的 delay 才行,但如果全程的滑鼠移動都用 250 ms 的 delay 下去跑,要等上好一段時間才能完成動作,最後採用偷吃步方法,先用最快的速度移到邊界後再用 250 ms delay time 去觸發 active,再以最快速度回復原本的坐標即可。

因為這個 script 是以我的作業環境來設定的,並不是每個人都可以適用,只要螢幕的排列方式不同大概就失效了,另外解析度設定不同也會有問題,有興趣的人可以自己 tune 看看。

話說 AutoHotKey 還真是個好物,應該會有一些有趣的自動化串接功能可以開發,歐耶~