メッセージボックスのハンドルを得るには

解決


tonny  2007-02-18 02:34:43  No: 98056

メッセージボックスのハンドルを得るにはどうしたらいいでしょうか?
下記のプログラムを実行すると、
テキストボックスに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


tonny  2007-02-18 02:44:37  No: 98057

環境を書くのを忘れていました。
WindowsXP、VB6です。
失礼しました。


魔界の仮面弁士  2007-02-18 03:42:22  No: 98058

CBTフックについて調べてみましょう。
http://support.microsoft.com/kb/180936/en-us


tonny  2007-02-18 05:18:44  No: 98059

早速のご回答ありがとうございます。
ご紹介頂いたサイトのサンプル早速試してみました。
みごと、ハンドルを取得できました。
しかし、不思議ですね。
なぜFindWindowExでは見つからないのでしょうね。
メッセージボックスのハンドルをWindowFromPointで調べて、GetParentで親ウインドウを調べてみると、メッセージボックスの親ウインドウはForm1になっていました。
しかし、Form1の子ウインドウを調べるとメッセージボックスはありませんでした。
こんなこともあるんですね。
結局、CBTフックを使わなくても、FindWindowExではなくFindWindowで見つけることが出来ました。

Text1.Text = FindWindow(vbNullString, "エラー")

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加