【发布时间】:2012-04-28 17:19:07
【问题描述】:
我需要一个简单的 c#/vb.net 中的 win api,从消息框中读取文本。我有一个阅读消息框标题的功能,但我不知道如何获取内容文本。 消息框标题功能为:
' Function to retrieve the popup window associated with the form, as well as to
' find the child windows of the popup...
Private Declare Auto Function GetWindow Lib "user32.dll" ( _
ByVal hWnd As IntPtr, ByVal uCmd As Long) As IntPtr
' Sendmessage overload that is used to send messages to the button on the
' dialog window...
Private Declare Auto Function SendMessage Lib "user32.dll" Alias "SendMessage" _
(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, _
ByRef lParam As IntPtr) As IntPtr
' Sendmessage overloads used to retrieve the window text...
Private Declare Auto Function SendMessageA Lib "user32.dll" _
Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal Msg As Integer, _
ByVal wParam As IntPtr, ByRef lParam As IntPtr) As IntPtr
...
' This function returns the text of the window, used so that we can confirm that
' we have the right dialog window...
Private Function GetWindowText(ByVal WindowHandle As IntPtr) As String
Dim ptrRet As IntPtr
Dim ptrLength As IntPtr
' Get length for buffer...
ptrLength = SendMessageA( _
WindowHandle, WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero)
' Create buffer for return value...
Dim sb As New System.Text.StringBuilder(ptrLength.ToInt32 + 1)
' Get window text...
ptrRet = SendMessageString( _
WindowHandle, WM_GETTEXT, ptrLength.ToInt32 + 1, sb)
' Get return value...
Return sb.ToString
End If
【问题讨论】:
-
为什么不使用自动化界面呢?它为您完成所有 p/invoking。
-
+1 for UI Automation - 这应该让你更“放心”
标签: c# .net vb.net winapi messagebox