您的位置:首页 > 编程语言 > C#

C#中使用SendMessage进行进程通信的实例

2015-11-20 23:27 961 查看
原文:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: