在C#中使用SendMessage

本文详细介绍了在C#中如何使用SendMessage API,特别是参数lParam的数据类型转换方法。包括通过函数重载适应不同数据类型,利用StringBuilder处理返回字符串,以及使用Marshal和GCHandle进行IntPtr类型的转换操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C#中使用SendMessage

日期:2005-02-04
作者:floodzhu
备注:主要描述在调用API函数SendMessage时数据类型的转换。

SendMessage是一个在user32.dll中声明的API函数,在C#中导入如下:

using System.Runtime.InteropServices;
[DllImport("user32.dll", EntryPoint="SendMessageA")]
public static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);

本文描述其参数 lParam 的用法,主要是数据类型之间的转化

● 一种最简单的处理方式是声明多个SendMessage函数(overload),用所需的数据类型直接替换IntPtr。例如:

//声明:
[DllImport("user32.dll", EntryPoint="SendMessageA")]
private static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam,  string lParam);
[DllImport("user32.dll", EntryPoint="SendMessageA")]
private static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam,  ref Rectangle lParam);
//调用:
string s = "hello, floodzhu";
SendMessage(this.textBox1.Handle, WM_SETTEXT<
C#中,你可以使用`System.Net.Sockets`命名空间下的`TcpClient`类以及`JsonConvert`库来发送和接收JSON格式的数据。首先,你需要安装Json.NET库(也称为Newtonsoft.Json),可以通过NuGet包管理器添加。 以下是一个简单的示例,展示了如何创建TCP客户端和服务器,进行数据交换: ### 发送JSON数据 (客户端) ```csharp using System; using Newtonsoft.Json; using System.IO.Pipes; using System.Text; public class Client { private TcpClient client; private NetworkStream stream; public void SendMessage(string jsonData) { try { // 连接服务器 var ip = "127.0.0.1"; // 本地主机地址 var port = 9000; // 服务器端口 client = new TcpClient(ip, port); stream = client.GetStream(); // 序列化JSON byte[] jsonBytes = Encoding.UTF8.GetBytes(jsonData); // 发送数据 stream.Write(jsonBytes, 0, jsonBytes.Length); Console.WriteLine($"Sent JSON data: {jsonData}"); } catch (Exception ex) { Console.WriteLine($"Error sending message: {ex.Message}"); } } public void Close() { if (client != null) { client.Close(); } } } ``` ### 接收JSON数据 (服务器) ```csharp using System; using Newtonsoft.Json; using System.IO.Pipes; using System.Text; public class Server { private TcpListener server; private StreamReader reader; public void StartListening() { try { // 创建监听器 server = new TcpListener(IPAddress.Any, 9000); server.Start(); // 等待连接 Console.WriteLine("Server started, waiting for connection..."); client = server.AcceptTcpClient(); // 获取网络流 reader = new StreamReader(client.GetStream(), Encoding.UTF8); string receivedJson = reader.ReadLine(); // 反序列化JSON并处理 dynamic data = JsonConvert.DeserializeObject(receivedJson); Console.WriteLine($"Received JSON data: {data}"); // 关闭连接 client.Close(); } catch (Exception ex) { Console.WriteLine($"Error receiving message: {ex.Message}"); } } public void Stop() { if (server != null) { server.Stop(); } } } // 使用示例 public static void Main() { var server = new Server(); server.StartListening(); } ``` 在这个例子中,客户端创建一个JSON字符串,然后序列化成字节发送到服务器;服务器等待连接,在接受到数据后反序列化回JSON对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值