vb.net 使用WebBrowser 对弹出的对话框自动点确定的有关问题

vb.net 使用WebBrowser 对弹出的对话框自动点确定的问题

我使用WebBrowser时,有时会遇到对话框,如何识别它并自动点击确定按钮?

我用vb.net 编程

谢谢各位大侠!

------解决方案--------------------
你可以使用API取到弹出的对话框的文本用于判断是否是服务器提交信息后返回的,如果不是则立刻关闭它.
代码写起来不难,但是比较烦琐.
以下是一些建议:

查找窗口用API FindWindow
查找窗口中的控件用API FindWindowEx
在找到了目标对话框后使用SendMessage发送WM_GETTEXT消息从对话框中得到提示文本用于判断,
程序关闭对话框可以用API PostMessage发送BM_CLICK消息.

基本上这4 个API可以完成你的工作了.不知对你是否有帮助.
------解决方案--------------------
4楼能否再详细点??我WM_GETTEXT不会用~~获取不到对话框内容~~~thanks
------解决方案--------------------
具体代码:亲测

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
------解决方案--------------------
WM_GETTEXT 获取不到你的提示信息,是因为你没有找到提示信息所在的句柄,要首先获取句柄,然后在sendmessage给他才可以获取
遍历你获取的窗口中的所有dlg窗口的句柄进行判断就可以了