非プログラマーですが、必要に駆られ、Windows環境(Win7とWin10)で
Excel VBAを用いて外部アプリを操作するマクロを作成し、使用しています。
【従来の手順】
1.CreateObject("Wscript.Shell")で外部アプリを立ち上げ
2.Win32APIのFindWindowで外部アプリのウィンドウハンドルを取得
3.Win32APIのSetForegroundWindowで外部アプリをアクティベート
4.SendKeysでキー入力をシミュレートして外部アプリを操作
ところがどうしてもマウスクリックが必要な(キーでの操作ができない)状況になりました。
そこでWin32APIのSendInputを使うことにしたのですが、
関数に渡すスクリーン座標を一意に決めるために
外部アプリのウィンドウをWin32APIのSetWindowPosで
スクリーン左上に移動することにして、手順を以下のように変更しました。
【新規の手順】
3.Win32APIのSetWindowPosで外部アプリのウィンドウをスクリーン左上に移動し、アクティベート
4.SendKeysでキー入力を、SendInputでマウス入力をシミュレートして外部アプリを操作
と、手順を変更したところ、従来は外部アプリ操作の過程で表示される
プリントダイアログなどに自動でフォーカスが移り、SendKeysが使えていたのに、
できなくなりました(アクティブにならないためSendKeysが利かなくなりました)。
【SetWindowPosのソース】
Call SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOZORDER)
・HWND_TOPMOSTの引数は、HWND_BOTTOM、HWND_NOTOPMOST、HWND_TOPも試しましたがだめでした
【やりたいこと】
・これまで同様、プリントダイアログなどにフォーカスが自動で移るようにしたいのですが、
SetWindowPosの適正な引数をご教示いただけませんでしょうか
・上記のやり方で解決しない場合、どのような解決法があるでしょうか
(例:別のAPIを使う/プリントダイアログのウィンドウハンドルを毎回取得するなど)
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。