vb.net SendMessage
时间: 2023-09-19 21:06:27 浏览: 107
在 VB.NET 中,您可以使用 SendMessage 函数来发送消息给其他窗口。该函数位于 user32.dll 动态链接库中,因此您首先需要导入该库。
下面是一个示例代码,演示如何使用 SendMessage 函数:
```vb
Imports System.Runtime.InteropServices
Public Class Form1
' 导入 SendMessage 函数
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function
' 定义常量
Private Const WM_COPYDATA As Integer = &H4A
Private Const WM_CLOSE As Integer = &H10
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' 找到目标窗口的句柄
Dim targetWindowHandle As IntPtr = FindWindow(Nothing, "目标窗口标题")
' 创建要发送的字符串
Dim messageText As String = "Hello, world!"
' 将字符串转换为字符数组
Dim messageBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(messageText)
' 分配内存并复制字符数组
Dim messageData As IntPtr = Marshal.AllocHGlobal(messageBytes.Length)
Marshal.Copy(messageBytes, 0, messageData, messageBytes.Length)
' 准备 COPYDATASTRUCT 结构体
Dim copyData As New COPYDATASTRUCT()
copyData.dwData = IntPtr.Zero
copyData.cbData = messageBytes.Length
copyData.lpData = messageData
' 将 COPYDATASTRUCT 结构体封装为指针
Dim copyDataPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(copyData))
Marshal.StructureToPtr(copyData, copyDataPtr, False)
' 发送消息
SendMessage(targetWindowHandle, WM_COPYDATA, Me.Handle, copyDataPtr)
' 释放内存
Marshal.FreeHGlobal(messageData)
Marshal.FreeHGlobal(copyDataPtr)
End Sub
' COPYDATASTRUCT 结构体定义
<StructLayout(LayoutKind.Sequential)> _
Private Structure COPYDATASTRUCT
Public dwData As IntPtr
Public cbData As Integer
Public lpData As IntPtr
End Structure
End Class
```
在上面的示例中,您需要将 "目标窗口标题" 替换为您要发送消息的窗口的标题。您还可以根据您的需求调整消息的内容和格式。