質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Q&A

1回答

6608閲覧

SetWindowPosで操作したアプリのダイアログをアクティブにしたい

nunclenicer.com

総合スコア6

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

0グッド

1クリップ

投稿2018/07/24 23:45

非プログラマーですが、必要に駆られ、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を使う/プリントダイアログのウィンドウハンドルを毎回取得するなど)

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

実際に試してないので外しているかもしれませんが、MSDNに書いてあるように、

ウィンドウを最前面ウィンドウにするには、hWndInsertAfter パラメータで、HWND_TOPMOST フラグをセットしたうえで SWP_NOZORDER フラグをクリアするか、または存在するすべての最前面ウィンドウより Z オーダーが上になるように指定します。非最前面ウィンドウが最前面になると、そのウィンドウが所有するウィンドウも最前面ウィンドウになります。逆に、そのオーナーウィンドウの状態は変わりません。

SWP_NOZORDERは指定してはいけないんじゃないでしょうか。

投稿2018/07/26 07:28

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問