这可以通过使用 NamedPipeServer(高复杂度)或
否则使用 WinApi(我会推荐这个)。
看看这个:
Public Class NotepadSendAndReceive
Public Const VK_RETURN As UInteger = &HD
Public Const WM_SETFOCUS As UInteger = &H7
Public Const WM_KILLFOCUS As UInteger = &H8
Public Const WM_CHAR As UInteger = &H102
Public Const WM_SETTEXT As UInteger = &HC
Public Const WM_KEYDOWN As UInteger = &H100
Public Const WM_KEYUP As UInteger = &H101
Public Const cap As Integer = 1048576
Public Const WM_CLICK As UInteger = &HF5
Public Const WM_GETTEXT As UInteger = &HD
Public Const WM_GETTEXTLENGTH As UInteger = &HE
<DllImport("User32.Dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function GetWindowTextLength(hWnd As IntPtr) As Integer
End Function
<DllImport("User32.Dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function GetWindowText(hWnd As IntPtr, lpString As StringBuilder, nMaxCount As Integer) As Integer
End Function
<DllImport("User32.Dll")> Private Shared Function SendMessage(hWnd As IntPtr, Msg As UInt32, wParam As IntPtr, lParam As String) As IntPtr
End Function
<DllImport("User32.Dll")> Private Shared Function SendMessage(hWnd As IntPtr, Msg As Integer, wParam As Integer, lParam As StringBuilder) As Integer
End Function
<DllImport("User32.Dll")> Public Shared Function PostMessage(hWnd As Integer, msg As UInteger, wParam As UInteger, lParam As Integer) As IntPtr
End Function
<DllImport("User32.Dll")> Public Shared Function PostMessage(hWnd As Integer, msg As UInteger, wParam As UInteger, lParam As UInteger) As IntPtr
End Function
<DllImport("User32.Dll")> Private Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr
End Function
<DllImport("User32.Dll")> Private Shared Function FindWindowEx(parentHandle As IntPtr, childAfter As IntPtr, className As String, windowTitle As IntPtr) As IntPtr
End Function
Private Shared Function GetStringOfEditor() As String
Return GetText(GetProcNumber("Editor"))
End Function
Public Shared Sub SendStringToEditor(T As String)
SendMessage(GetProcNumber("Editor"), &HC, CType(cap, IntPtr), T)
End Sub
Public Shared Sub SendEnter(Hwndd As IntPtr)
SendMessage(Hwndd, WM_SETFOCUS, CType(cap, IntPtr), String.Empty)
Threading.Thread.Sleep(10)
PostMessage(Hwndd.ToInt32(), WM_KEYDOWN, &HD, &H1C0001)
PostMessage(Hwndd.ToInt32(), WM_CHAR, &HD, &H1C0001)
Threading.Thread.Sleep(10)
PostMessage(Hwndd.ToInt32(), WM_KEYUP, &HD, &HC01C0001UI)
SendMessage(Hwndd, WM_KILLFOCUS, CType(cap, IntPtr), String.Empty)
End Sub
Private Shared Function GetProcNumber(pTitle As String) As IntPtr
Dim Pzs As New List(Of String)
For Each p As Process In Process.GetProcesses
If p.MainWindowTitle.Contains(pTitle) Then Pzs.Add(p.MainWindowTitle)
Next
If Pzs.Count > 0 Then Return FindWindowEx(FindWindow("Notepad", Pzs(0)), IntPtr.Zero, "Edit", IntPtr.Zero)
End Function
Private Shared Function GetText(hWnd As IntPtr) As String
Dim nLen As Integer = CInt(SendMessage(hWnd, WM_GETTEXTLENGTH, IntPtr.Zero, String.Empty))
Dim pText As New StringBuilder(nLen + 1)
SendMessage(hWnd, WM_GETTEXT, nLen + 1, pText)
Return pText.ToString()
End Function
End Class
调用示例(必须打开记事本)
NotepadSendAndReceive.SendStringToEditor("This is a test")
你只需要稍微定制一下,你就可以
找出文本框的当前句柄。
看看:
If Pzs.Count > 0 Then Return FindWindowEx(FindWindow("Notepad", Pzs(0)), IntPtr.Zero, "Edit", IntPtr.Zero)
程序使用“FindWindowEx”查找“记事本”的当前句柄,然后查找“编辑”元素的子句柄。
然后,您就有了记事本编辑区域的正确当前句柄,例如,您可以向它发送文本。
在您的情况下,它将是“Form2”,然后您必须知道您的文本框是如何命名的(这可以通过使用 WinSpy++ 找到)。
最好的问候。