利用 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 還真是個好物,應該會有一些有趣的自動化串接功能可以開發,歐耶~


6 Comments

  • 洪任諭

    2013/12/12

    直接用 Windows API 硬幹效果應該更好,而且更可靠
    FindWindow() 或是 WindowFromPoint() 都是找視窗的好方法

    Reply
    • 蔡 依達

      2013/12/12

      的確是,但是我不會寫 Windows 的程式啊~

      不過這只是個小小的附加功能,AutoHotKey 主要提供了我打報告的簡碼 template,方便設定和維護。

      Reply
  • 陳為忠

    2013/12/26

    SmartIris掛片之”報告模式” advance patient link將調整判斷機制為該序號是否正於iris畫面上(非判斷active view port是否為該筆序號)。

    Reply
    • 蔡 依達

      2013/12/26

      不過調整之後,我的 script 就沒有用武之地啦~ XD

      Reply
      • 陳為忠

        2013/12/27

        依達,改好應該還需一段時間且應該還有很多地方需要改進。記得10年前DR剛出來時曾經用過類似的工具應用於攝影室console複雜且重複的操作上,case量大時這類巨集輔助工具有時真的可以幫很大的忙且節省很多時間….謝謝你的分享!!

        Reply
        • 蔡 依達

          2013/12/27

          如果有機會的話,讓我看看 source code, 說不定我可以幫忙改喲~

          Reply

Leave a Reply