产科医生演员表耿老:MOX.cc [VB.net:使用WebBrowser时,有时会遇到对话框,如何识别它并自...

来源:百度文库 编辑:中财网 时间:2024/05/10 11:52:49

「VB.net:使用WebBrowser时,有时会遇到对话框,如何识别它并自动点击确定按钮」

日期:2010-5-6

如题,怎样处理呢?
答案一:
你可以使用API取到弹出的对话框的文本用于判断是否是服务器提交信息后返回的,如果不是则立刻关闭它.
代码写起来不难,但是比较烦琐.
以下是一些建议:
查找窗口用API FindWindow
查找窗口中的控件用API FindWindowEx
在找到了目标对话框后使用SendMessage发送WM_GETTEXT消息从对话框中得到提示文本用于判断,
程序关闭对话框可以用API PostMessage发送BM_CLICK消息.

具体代码:亲测

API定义:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Boolean
Private Const WM_GETTEXT = &HD
Private Const BM_CLICK = &HF5 '鼠标单击
Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal Hwnd As Integer, ByVal wFlag As Integer) As Integer

查找过程:
Sub GetMsgBox()
Dim MsgH As Integer = FindWindow(Nothing, "Windows Internet Explorer")
If MsgH Then
Dim StaticH As Integer = FindWindowEx(MsgH, Nothing, "Static", Nothing)
Dim Str As String
While StaticH
Str = New String("", 256)
SendMessage(StaticH, WM_GETTEXT, 256, Str)
Str = Str.Trim(String.Empty)
If Str = "" Then
StaticH = GetNextWindow(StaticH, 2)
Else
If MsgBox("找到对话框,对话框的内容是:" & Str & "是否要关闭它?", MsgBoxStyle.YesNo, "是否关闭?") = MsgBoxResult.Yes Then
Dim EnterH As Integer = FindWindowEx(MsgH, Nothing, "Button", Nothing)
If EnterH Then
PostMessage(EnterH, BM_CLICK, 0, 0)
MsgH = FindWindow(Nothing, "Windows Internet Explorer")
If MsgH Then '里只是为了确认一下框口是否已经关闭成功
PostMessage(EnterH, BM_CLICK, 0, 0)
End If
End If
End If
Exit Sub
End If
End While
End If
MsgBox("没有你要找的弹出对话框")
End Sub


但是,有没有更好的答案呢?