怎么获取弹出对话框的文本及点击确定按钮

如何获取弹出对话框的文本及点击确定按钮?
我在项目上先声明API函数:
VB.NET code
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer '发送窗口消息
Private Declare Auto Function FindWindow Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer '根据标题查找窗口句柄


再添加一个时间控件timer1:
VB.NET code
Public Sub timer_gbtcw_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles timer_gbtcw.Tick
     Dim hWnd As Integer
     Const WM_CLOSE = &H10
     hWnd = FindWindow(vbNullString, "Microsoft Internet Explorer")
     If hWnd Then
         SendMessage(hWnd, WM_CLOSE, 0, 0)
     End If
End Sub


可以实现发现标题为Microsoft Internet Explorer的弹出窗口即关闭,但如何能获得弹出窗口上的文字及如何才能通过发送消息点击弹出窗口的“是”按钮呢?


------解决方案--------------------
从别的地方抄的,具体地址你根据内容能搜到。希望对你有用,另外,如果是网页弹出的“文件下载”对话框,对其中的“取消”发送消息有效,但对“打开”和“保存”发送点击消息却不好用,我使用了其他方法。

'缓存子窗体控件句柄
Public ChildHwnd As String

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'发送消息
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'主要用来遍历子窗体和子控件句柄
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
'控件类型
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long


'开始遍历
EnumChildWindows me.hWnd, AddressOf EnumChildProc, ByVal 0&

'遍历子窗体控件句柄,这个函数必须用在模块中

Public Function EnumChildProc(ByVal hWnd As Long, ByVal lParam As Long) As Long

ChildHwnd = ChildHwnd & "," & hWnd
EnumChildProc = 1
End Function

'由于上面这个函数每次调用都会得到下一个子窗体(控件)的句柄,并赋值给hWnd,实际使用中,我把所有子句柄存放在ChildHwnd字符串中,遍历完毕,再

'Dim AllHwnd() As String

'去除多余的无效字符
'ChildHwnd = Mid(ChildHwnd, 2)
'转换成数组
'AllHwnd = Split(ChildHwnd, ",")

'获得所有子句柄后,需要获取其控件类型

'查看窗体/控件类型
Public Function FGetClassName(hWnd As Long) As String
Dim ClassName As String
Dim Ret As Long
'为类名设置缓存区大小
ClassName = Space(256)
'得到GETCLASSNAME返回值
Ret = GetClassName(hWnd, ClassName, 256)
FGetClassName = Left(ClassName, Ret)
End Function

' 直接sendmessage 就可以得到控件中的内容了,对于某些可能有passwordchar属性的控件,需要先sendmessage查看其passwordchar属性,再  postmessage取消该属性,一定时间延迟后(一定要),再sendmessage读取内容,再sendmessage恢复 passwordchar属性

Public Function GetText(WindowHandle As Long) As String
Dim strBuffer As String, Char As String, lngTextLength As Long
strBuffer = Space(255)
'得到password掩码
Char = SendMessage(WindowHandle, &HD2, 0, 0)
'去除edit控件的passwordchar属性
PostMessage WindowHandle, &HCC, 0, 0
'如果是edit控件则等待消息发送成功
If InStr("Edit", FGetClassName(WindowHandle)) And Char <> "0" Then Sleep (10)
'得到edit控件的text
SendMessage WindowHandle, &HD, 255, ByVal strBuffer
'恢复edit控件的passwordchar属性
PostMessage WindowHandle, &HCC, ByVal Char, 0
GetText = Trim(strBuffer)