アプリケーションをバックグラウンド制御する
こんな方法もあるのか、ということ。
クリックしたりキーボード入力したりは、MouseOrgの第二引数を2にすると、いろいろできますが、それでも前面に来ることもある。
仮想デスクトップにして、メッセージを飛ばして制御してしまえば、見ないで済む。
仮想デスクトップにしなくても、見ないで済むことが多いけど。
例えば、Acrobat Readerでバックグラウンド印刷するなら
DEF_DLL PostMessageA(Hwnd,Long,Long,Dword):Long:user32 hnd = IDTOHND(GETID("Adobe Reader")) PostMessageA(hnd, $111, 6028, 0) // WM_COMMAND 印刷 wid = GETID("印刷","#32770") res = GETALLWIN(wid) - 1 FOR i = 0 TO res PRINT ALL_WIN_ID[i] + ": " + STATUS(ALL_WIN_ID[i], ST_TITLE) IFB STATUS(ALL_WIN_ID[i], ST_TITLE) = "OK" THEN PostMessageA(IDTOHND(wid), $111, 1, IDTOHND(ALL_WIN_ID[i])) BREAK ENDIF NEXT
説明不要と思いますが、
- 印刷のメッセージを送って
- 印刷ダイアログから「OK」ボタン探して
- 印刷ダイアログに「OK」が押されたと通知
という流れです。
OKボタンの位置はハードコードでも良い気がするけど。
Virtual PCを使わずに、アプリケーションの制御ができる気がしてきた。
IDTOHNDが想像以上に便利。
最難関は、コマンドIDを調べる方法。
使える人は、Spy++やWinspectorか。
いや、「ChkCtlID.zip」が一番良さそうです。
http://siromasa.xxxxxxxx.jp/Sample/index.html
、、、でもOKボタンは、厳しい。
なにか、修正が必要な気がする。DLLに。