加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – 从外部应用程序中获取特定文本框中的文本 – Visual B

发布时间:2020-12-17 07:27:31 所属栏目:百科 来源:网络整理
导读:我可以从外部应用程序文本框中获取文本,但现在我想从外部应用程序中获取所需文本框中的文本. 我的英语不太好,这就是为什么看下面的图像. 以下代码仅返回第一个文本框值. Imports System.Runtime.InteropServicesPublic Class Form1Private Const WM_GETTEXT
我可以从外部应用程序文本框中获取文本,但现在我想从外部应用程序中获取所需文本框中的文本.
我的英语不太好,这就是为什么看下面的图像.

以下代码仅返回第一个文本框值.

Imports System.Runtime.InteropServices


Public Class Form1

Private Const WM_GETTEXT As Integer = &HD
Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr,ByVal msg As Integer,_
ByVal wParam As IntPtr,ByVal lParam As IntPtr) As IntPtr
<DllImport("user32.dll",SetLastError:=True,CharSet:=CharSet.Auto)> _
Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr,_
                                 ByVal childAfter As IntPtr,_
                                 ByVal lclassName As String,_
                                 ByVal windowTitle As String) As IntPtr
End Function

Declare Auto Function FindWindow Lib "user32.dll" (ByVal lpClassName As String,ByVal lpWindowName As String) As IntPtr


Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
    'Find the running notepad window
    Dim Hwnd As IntPtr = FindWindow(Nothing,TextBox1.Text)

    'Alloc memory for the buffer that recieves the text
    Dim Handle As IntPtr = Marshal.AllocHGlobal(100)

    'send WM_GWTTEXT message to the notepad window
    Dim NumText As Integer = SendMessage(Hwnd,WM_GETTEXT,50,Handle)

    'copy the characters from the unmanaged memory to a managed string
    Dim Text As String = Marshal.PtrToStringUni(Handle)

    'Display the string using a label
    Label1.Text = Text

    'Find the Edit control of the Running Notepad
    Dim ChildHandle As IntPtr = FindWindowEx(Hwnd,IntPtr.Zero,"Edit",Nothing)

    'Alloc memory for the buffer that recieves the text
    Dim Hndl As IntPtr = Marshal.AllocHGlobal(200)

    'Send The WM_GETTEXT Message
    NumText = SendMessage(ChildHandle,200,Hndl)

    'copy the characters from the unmanaged memory to a managed string
    Text = Marshal.PtrToStringUni(Hndl)

    'Display the string using a label
    Label2.Text = Text


End Sub

End Class

解决方法

您必须循环浏览主窗口(外部应用程序)的子项并获取其属性.
您将使用以下内容:

<DllImport("User32.dll")> _
    Public Function EnumChildWindows _
        (ByVal WindowHandle As IntPtr,ByVal Callback As EnumWindowProcess,_
        ByVal lParam As IntPtr) As Boolean
    End Function

    Public Delegate Function EnumWindowProcess(ByVal Handle As IntPtr,ByVal Parameter As IntPtr) As Boolean

Public Function GetChildWindows(ByVal ParentHandle As IntPtr) As IntPtr()
    Dim ChildrenList As New List(Of IntPtr)
    Dim ListHandle As GCHandle = GCHandle.Alloc(ChildrenList)
    Try
        EnumChildWindows(ParentHandle,AddressOf EnumWindow,GCHandle.ToIntPtr(ListHandle))
    Finally
        If ListHandle.IsAllocated Then ListHandle.Free()
    End Try
    Return ChildrenList.ToArray
End Function

有关详细信息,请查看此How can I get properties of controls contained in a popup message box using VB.Net

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读