- ベストアンサー
VB.NETでメッセージボックスが隠れてしまう問題の解決方法
- VB.NETでIEを起動して、フォームの操作と連携してIEのページを自動で操作するプログラムを作成しています。
- IEでWEBページのリンクをクリックしてページを移動するごとにURLをチェックして、設定に該当した場合はメッセージボックスを表示して、確認を行いたいですが、メッセージボックスがアクティブにならずにタスクバーを押さないと表示されません。
- IEのウィンドウのタスクバーが押された状態のままでメッセージボックスがアクティブな状態で最前面に出てくれないため、メッセージボックスを最前面に表示する方法を教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
TopMostプロパティだけでは VB.NETのアプリケーションがフォアグランドアプリケーションに成らない為 メッセージボックスが裏に隠れてしまいます WM_ACTIVATEメッセージとSetForegroundWindowを使えば出来そうです モジュールを追加して Public gHandle as IntPtr を記述 Form_Loadイベントで gHandle = Me.Handle フォームの宣言句に Declare Auto Function PostMessage Lib "User32.dll" (byBal hWnd as IntPtr, _ ByVal uMsg as integer, ByVal wParam as Integer, _ ByVal lParam as Integer) as Integer Declare auto Function SetForegroundWindow(Byval hWnd as intPtr) as integer const WM_ACTIVATE as integer = 6 const WA_ACTIVE as Integer = 0 dim bFlag as Boolean を追加 現在のチェックロジックで条件が成立したら bFlag = False ' フォームをアクティブにするようにWindowsに依頼する PostMessage( gHandle, WM_ACTIVATE, WA_ACTIVE, IE.HWND ) Form_Activatedイベントで if bFlag = false then SetForegroundWindow( Me.Handle ) ' 複数回MsgBoxが表示されないように制御 bFlag = True MsgBox("メッセージ") end if といった具合で