C#中使用SendMessage进行进程通信的实例
2015-11-20 23:27
961 查看
原文:
C#中使用SendMessage进行进程通信的实例
1 新建解决方案SendMessageSecondExample
在解决方案下面新建两个项目:Sender和Receiver,两者的输出类型均为“Windows 应用程序”。整个程序的结构如下图所示。
2 实现项目Sender
Sender仅包含一个名为“消息发送者”的窗体,如下图所示。
编写窗体后端代码,如下所示。
3 实现项目Receiver
Receiver项目仅包含一个名为“消息接收者”的窗体,如下图所示。
编写窗体后端代码,如下所示。
4 运行程序
运行程序,效果如下图所示。
从结果中了解到,“消息发送者”向“消息接收者”发送了六次消息,其中,WM_KEYDOWN消息3次,传递了数据1,2,3(为文本框中输入的数据);WM_KEYUP消息同样为三次,传递数据为0。
附:Windows系统消息
范围 意义
0x0001——0x0087 主要是窗口消息
0x00A0——0x00A9 非客户区消息
0x0100——0x0108 键盘消息
0x0111——0x0126 菜单蹋消息
0x0132——0x0138 颜色控制消息
0x0200——0x020A 鼠标消息
0x0211——0x0213 菜单循环消息
0x0220——0x0230 多文档消息
0x03E0——0x03E8 DDE消息
0x0400 WM_USER
0x0400——0x7FFF 自定义消息
Windows消息大全之类的可查阅:http://bbs.csdn.net/topics/70453732
C#中使用SendMessage进行进程通信的实例
1 新建解决方案SendMessageSecondExample
在解决方案下面新建两个项目:Sender和Receiver,两者的输出类型均为“Windows 应用程序”。整个程序的结构如下图所示。
2 实现项目Sender
Sender仅包含一个名为“消息发送者”的窗体,如下图所示。
编写窗体后端代码,如下所示。
using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace Sender { public partial class frmSender : Form { [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); const int WM_KEYDOWN = 0x0100; const int WM_KEYUP = 0x0101; public frmSender() { InitializeComponent(); } private void btnSendMsg_Click(object sender, EventArgs e) { Process[] procs = Process.GetProcesses(); foreach (Process p in procs) { if (p.ProcessName.Equals("Receiver")) { IntPtr hWnd = p.MainWindowHandle; int data = Convert.ToInt32(txtMsg.Text);//未做数据校验 SendMessage(hWnd, WM_KEYDOWN, (IntPtr)data, (IntPtr)0); Thread.Sleep(1000); SendMessage(hWnd, WM_KEYUP, (IntPtr)0, (IntPtr)0); } } } } }
3 实现项目Receiver
Receiver项目仅包含一个名为“消息接收者”的窗体,如下图所示。
编写窗体后端代码,如下所示。
using System.Windows.Forms; namespace Receiver { public partial class frmReceiver : Form { public frmReceiver() { InitializeComponent(); } private void frmReceiver_KeyDown(object sender, KeyEventArgs e) { this.lsvMsgList.Items.Add(e.KeyValue.ToString()); } private void frmReceiver_KeyUp(object sender, KeyEventArgs e) { this.lsvMsgList.Items.Add(e.KeyValue.ToString()); } } }
4 运行程序
运行程序,效果如下图所示。
从结果中了解到,“消息发送者”向“消息接收者”发送了六次消息,其中,WM_KEYDOWN消息3次,传递了数据1,2,3(为文本框中输入的数据);WM_KEYUP消息同样为三次,传递数据为0。
附:Windows系统消息
范围 意义
0x0001——0x0087 主要是窗口消息
0x00A0——0x00A9 非客户区消息
0x0100——0x0108 键盘消息
0x0111——0x0126 菜单蹋消息
0x0132——0x0138 颜色控制消息
0x0200——0x020A 鼠标消息
0x0211——0x0213 菜单循环消息
0x0220——0x0230 多文档消息
0x03E0——0x03E8 DDE消息
0x0400 WM_USER
0x0400——0x7FFF 自定义消息
Windows消息大全之类的可查阅:http://bbs.csdn.net/topics/70453732
相关文章推荐
- C#中使用命名管道进行进程通信的实例
- C#命名管道通信
- c#进程间通信(Inter-Process Communication)
- C# 进程间通信(共享内存)
- 【操作系统】进程间通信(C#)
- C#进程间通信--API传递参数(SendMessage)
- C#手动做一个负载均衡服务器
- C#中的"?"和"??"
- C#之桶中取黑白球问题
- C# 获取IE浏览器句柄
- C# 串口模拟键盘输入
- C#Excel的导入与导出
- C# Jenkins 自动构建
- C#的BackgroundWorker
- C# 导出excel按指定模板
- C# toString()转换详细(转)
- C#窗体多语言切换(简繁)
- [原]iBatis.Net(C#)系列一:简介及运行环境
- c# 字符串填充占位
- C# WebService (一)開發接口&調用