プロが教える店舗&オフィスのセキュリティ対策術

VB.NETでIEを起動して、フォームの操作と連携して
IEのページを自動で操作するプログラムを作っています。

IEでWEBページのリンクをクリックしてページを移動する
ごとにURLをチェックして、設定に該当した場合は
メッセージボックスを表示して、このページで良いですか?
という確認をしたいのですが、メッセージボックスが
アクティブにならずにタスクバーを押さないと表示されません。
リンクをクリックした後は
SetWindowPos(IE.HWND, 1, 0, 0, 0, 0, &H1 Or &H2 Or &H10)
を実行して、IEを後ろに消してフォームを出すことは出来たのですが、
IEのウィンドウのタスクバーが押された状態のままで
メッセージボックスがアクティブな状態で最前面に出てくれません。
Me.Topmost = True でもフォームは出るのですが、
メッセージボックスはその後ろに隠れてしまいます。
メッセージボックスを最前面に出す方法があったら教えて頂きたいです。
よろしくお願い致します。

A 回答 (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
といった具合で
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています