VB.NETでメッセージボックスが隠れてしまう問題の解決方法

このQ&Aのポイント
  • VB.NETでIEを起動して、フォームの操作と連携してIEのページを自動で操作するプログラムを作成しています。
  • IEでWEBページのリンクをクリックしてページを移動するごとにURLをチェックして、設定に該当した場合はメッセージボックスを表示して、確認を行いたいですが、メッセージボックスがアクティブにならずにタスクバーを押さないと表示されません。
  • IEのウィンドウのタスクバーが押された状態のままでメッセージボックスがアクティブな状態で最前面に出てくれないため、メッセージボックスを最前面に表示する方法を教えていただきたいです。
回答を見る
  • ベストアンサー

VB.NET メッセージボックスが隠れてしまいます。

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 でもフォームは出るのですが、 メッセージボックスはその後ろに隠れてしまいます。 メッセージボックスを最前面に出す方法があったら教えて頂きたいです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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 といった具合で

関連するQ&A

  • Formをアクティブにする

    バックグラウンド(フォームは非表示にしている)で実行しているプログラムでエラーが発生した場合にサブフォームを表示しています。 このサブフォームを最前面に表示しフォームをアクティブにしたいのですがどのようにすればよろしいでしょうか?(このフォームにはテキストボックス等はなくラベルのみです。) 現在、SetWindowPosにてこのサブフォームのhwndを渡し、HWND_TOPMOSTにしサブフォームにSetFocusさせています。 しかし、実行されると最前面には来るのですがタイトルバーが点滅(?)した状態になりアクティブになりません。このフォームをクリックするとアクティブとなります。 よろしくお願いします。

  • VBAにてメッセージボックスを最前面に表示させる

    エクセルVBAにて、指定時刻になったらメッセージボックスを、最前面に表示させるプログラムを作成中です。 時刻の指定は、ontimeメソッドの使用でできました。 しかし、最前面(他のアプリケーションを開いていても、メッセージボックスが手前に表示される)がどうしてもできません。。 VBだとAPI関数を使って、フォームを常に最前面表示はできました。 メッセージボックスで、このような表示方法は実現可能なのでしょうか? どなたか教えて下さい。よろしくお願いします。

  • メッセージボックスの背景色

    いつもお世話になってます。 VB6.0でメッセージボックスの背景を任意の色に変更する事は可能ですか? フォームの背景をデフォルトの色(&H8000000F&)と違う色(&H00FFC0C0&)にしているので、メッセージボックスも同じ色に合わせたいのです。 どうすればメッセージボックスの背景色を変更する事ができるのでしょう? 御存知の方、回答よろしくお願いします。

  • SetWindowPosについて

    こんにちは。以前のスレッドを何件か拝見して、私の事象がないようなので、投稿します。背面フォーム内の処理をタイマ割込みやループなどで処理しつつ、その前面でフォームを表示する場合、SetWindowPosのAPIが有効というところまでは分かっているのですが、私の場合、割り込みによるビットのON/OFFをしたいと思ってロジックを組んでいるのですが・・・ どうしてもモーダルフォームを前面表示したときと同じように、背面での処理が走ってくれません・・・ ロジックですが、前面フォームのイベントを sub Form_Load() SetWindowPos(frm_ctrl.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) end sub のように行っています。アンロード時にハンドルの設定は解除してあります。 タイマ割込みの処理が他者作成のため、目下処理が不明なのですが、こちらの方もAPIを使用しているかもしれません。 情報が少なくて恐縮ですが、この内容で解決の手掛かりとなる事をご教授頂けると幸いです。

  • 条件を満たした場合に、メッセージボックス

     マクロを組んでいます。    次のようなマクロについて、アドバイスをお願いできませんでしょうか。  「もしも、ユーザーが 1行目から9行目の、いずれかのセルをアクティブにしていた場合、     ”顧客情報、データ内のどこかをクリックして下さい”      というメッセージボックスが出てくるようにする。」  そして、その後の操作は実行しないで、マクロ操作の中止。  どうぞ、よろしくお願いいたします。   

  • メッセージボックスを表示させない方法

    IE で、オートコンプリート機能を無効に設定しています。 が、フォーム入力の際に、『オートコンプリートをオンにしますか?』と、オートコンプリート機能を使うことを促すメッセージボックスが、度々現れます。 このメッセージボックスが出てこないようにする方法がありましたら、是非、教えてください。 【環境】 Internet Explorer 6.0 Windows XP Home Edition

  • MsgBoxの最前面表示

    MsgBox関数を使用してエラーメッセージを表示させているのですが メッセージボックスが表示された後、フォームをクリックすると メッセージボックスがフォームの裏に隠れてしまいます。 リファレンスを見て MsgBoxSetForegroundを指定すれば表示時は最前面に表示されますが フォームをクリックするとやはり裏に隠れてしまいます。 MsgBox関数を使用してメッセージを表示する場合 常にメッセージボックスを最前面に表示させる方法はあるのでしょうか? 環境は Windows2000 + VS.NET2003(VB.NET) です。

  • 次のWindowsアプリで

    メッセージボックスは他のアプリのWindowの下に隠れることはないのですが他のアプリのウィンドウをクリックするとメッセージボックスの焦点がぼけアクティブでなくなります メッセージボックスを常にアクティブにする方法を終えてください #include <windows.h> using namespace std; WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int) { HWND hW; hW=CreateWindow("STATIC","",WS_OVERLAPPED, 0,0,9,9,NULL,NULL,hI,NULL); SetWindowPos(hW,HWND_TOPMOST,0,0,9,9,NULL); MessageBox(hW,"OK?","",MB_OK); return 0; }

  • Windowsプログラミングのメッセージ表示

    WindowsXPでC言語を用いてプログラミングしています。 MessageBOXを使ってエラーメッセージを画面に 表示させているのですが、 最初の1回はタスクバー(タスクトレイ?)上に メッセージがあり(ウィンドウが最小化された状態)、 前面へでてきません。 タスクバー上のウィンドウをクリックして 前面に出た以降は意図通りメッセージが前面に出てくるのですが・・・ どういった対処が考えられるでしょうか?

  • 8秒後にメッセージボックス(orポップアップ)だけを自動消滅させたい

    windows-xp、Access2003を使っています。 こんなことをしたいのです。 1)主になるフォームが画面の真ん中で開きます。 2)それと同時に、メッセージボックスでも、ポップアップにしたフォームでもよいのですが「続けて入力できます。」というメッセージを表示させます。 3)そして、8秒後にメッセージボックス(orポップアップしたフォーム)だけが自動に消える。 というかんじです。2)まではできそうですが、3)のやり方が全く見当がつきません!!というか、できるのでしょうか?! すみませんが、宜しくお願い致します。

専門家に質問してみよう