首先解釋一下目前的報告環境及工作流程。目前配有三個螢幕,左方是報告輸入區,右方兩顆是影像區,通常打 plain film 時,閱片程式 (SmartIris) 會把該份報告的影像放在中間的螢幕,用來比較的舊片放在右方的螢幕:
最晚讀出來的影像會被設為 active window,因為讀取影像順序的緣故(先新後舊),也就是說,在預設的狀態下,舊片會是 active 的狀態。這時如果把報告發出去,系統會偵測到報告和影像的序號不 match 而跳出警告視窗:
這個設計的立意雖好(double check 以免看錯片、發錯報告),但會增加一些小小的困擾,影響報告的流暢度。另外,系統有一個設計是,當滑鼠移動到某個影像上時,該影像會自動被 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,之後再把滑鼠移回原本的位置,送出報告。
但在測試的過程中發現,如果以程式預設的 delay time (20 ms),似乎無法觸發 active,簡單的測試一下,大概會需要 250 ms 左右的 delay 才行,但如果全程的滑鼠移動都用 250 ms 的 delay 下去跑,要等上好一段時間才能完成動作,最後採用偷吃步方法,先用最快的速度移到邊界後再用 250 ms delay time 去觸發 active,再以最快速度回復原本的坐標即可。
因為這個 script 是以我的作業環境來設定的,並不是每個人都可以適用,只要螢幕的排列方式不同大概就失效了,另外解析度設定不同也會有問題,有興趣的人可以自己 tune 看看。
話說 AutoHotKey 還真是個好物,應該會有一些有趣的自動化串接功能可以開發,歐耶~
洪任諭
2013/12/12直接用 Windows API 硬幹效果應該更好,而且更可靠
FindWindow() 或是 WindowFromPoint() 都是找視窗的好方法
蔡 依達
2013/12/12的確是,但是我不會寫 Windows 的程式啊~
不過這只是個小小的附加功能,AutoHotKey 主要提供了我打報告的簡碼 template,方便設定和維護。
陳為忠
2013/12/26SmartIris掛片之”報告模式” advance patient link將調整判斷機制為該序號是否正於iris畫面上(非判斷active view port是否為該筆序號)。
蔡 依達
2013/12/26不過調整之後,我的 script 就沒有用武之地啦~ XD
陳為忠
2013/12/27依達,改好應該還需一段時間且應該還有很多地方需要改進。記得10年前DR剛出來時曾經用過類似的工具應用於攝影室console複雜且重複的操作上,case量大時這類巨集輔助工具有時真的可以幫很大的忙且節省很多時間….謝謝你的分享!!
蔡 依達
2013/12/27如果有機會的話,讓我看看 source code, 說不定我可以幫忙改喲~