メッセージボックスのハンドルを得るにはどうしたらいいでしょうか?
下記のプログラムを実行すると、
テキストボックスに0と表示されます。
よろしくお願いいたします。
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" _
(ByVal hwnd As Long, ByVal lpText As String, _
ByVal lpCaption As String, ByVal wType As Long) As Long
Private Const MB_OK = &H0&
Private Const MB_SYSTEMMODAL = &H1000&
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Sub Form_Load()
Timer1.Interval = 3000
Timer2.Interval = 6000
End Sub
Private Sub Timer1_Timer()
Timer1.Interval = 0
ret = MessageBox(Form1.hwnd, "aaa", "エラー", MB_SYSTEMMODAL Or MB_OK)
End Sub
Private Sub Timer2_Timer()
Timer2.Interval = 0
Text1.Text = FindWindowEx(Form1.hwnd, 0, vbNullString, "エラー")
End Sub
環境を書くのを忘れていました。
WindowsXP、VB6です。
失礼しました。
CBTフックについて調べてみましょう。
http://support.microsoft.com/kb/180936/en-us
早速のご回答ありがとうございます。
ご紹介頂いたサイトのサンプル早速試してみました。
みごと、ハンドルを取得できました。
しかし、不思議ですね。
なぜFindWindowExでは見つからないのでしょうね。
メッセージボックスのハンドルをWindowFromPointで調べて、GetParentで親ウインドウを調べてみると、メッセージボックスの親ウインドウはForm1になっていました。
しかし、Form1の子ウインドウを調べるとメッセージボックスはありませんでした。
こんなこともあるんですね。
結局、CBTフックを使わなくても、FindWindowExではなくFindWindowで見つけることが出来ました。
Text1.Text = FindWindow(vbNullString, "エラー")
ありがとうございました。
ツイート | ![]() |