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#中使用SendMessage进行进程通信的实例的更多相关文章
- C#中使用SendMessage在进程间传递数据的实例
原文:C#中使用SendMessage在进程间传递数据的实例 1 新建解决方案SendMessageExample 在解决方案下面新建三个项目:CopyDataStruct,Receiver和Send ...
- C#中使用命名管道进行进程通信的实例
原文:C#中使用命名管道进行进程通信的实例 1 新建解决方案NamedPipeExample 在解决方案下面新建两个项目:Client和Server,两者的输出类型均为"Windows 应用 ...
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content P ...
- Android中的跨进程通信方法实例及特点分析(一):AIDL Service
转载请注明出处:http://blog.csdn.net/bettarwang/article/details/40947481 近期有一个需求就是往程序中增加大数据的採集点,可是由于我们的Andro ...
- winows 进程通信的实例详解
发送端: 新建一个基本对话框工程,添加6个文本框控件,并且关联控件变量(CString类型): m_strCopyData, m_strFileMap, m_strMem, m_strRegMsg, ...
- 进程通信-SendMessage使用方法
进程通信-SendMessage的使用方法 用过SendMessage进行进程通信的同学都知道,这个函数一般都搭配FindWindow使用.通过FindWindow查找进程句柄,然后使用SendMes ...
- android92 aidl远程进程通信
05项目RemoteService.java package com.itheima.remoteservice; //05项目 import com.itheima.remoteservice.Pu ...
- 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇
前言 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一.Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Andro ...
- Android 进阶8:进程通信之 Binder 机制浅析
读完本文你将了解: IBinder Binder Binder 通信机制 Binder 驱动 Service Manager Binder 机制跨进程通信流程 Binder 机制的优点 总结 Than ...
随机推荐
- Makefile如何通过宏开关进行条件编译
在开发中经常会遇到需要条件编译一段代码,即: #ifdef DEBUG { 如果定义了DUBUG,则执行此段代码!} #else {否则执行此段代码!} 这就需要通过宏开关来进行条件编译,也就是常说的 ...
- log.sh
#!/bin/echo Warnning, this library must only be sourced! # vim: set expandtab smarttab shiftwidth=4 ...
- MyEclipse中用Maven创建Web项目(亲测有效)
new --> other 1.Wizards: mvaen 2.Maven Project 3.Next Use Default Workspace Location 1.weba ...
- (原)Apache添加完限速模块后的文件
点我下载 解压后得到apache2文件夹和readme.txt文本 按照readme.txt修改apache2文件夹.
- javascript实现限制上传文件的大小
目录 基本思路 示例 [一].基本思路 在FireFox.Chrome浏览器中可以根据document.getElementById(“id_file”).files[0].size 获取上传文件的大 ...
- wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验
wxWidgets刚開始学习的人导引全文件夹 PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wx ...
- Spring注解的使用和区别:@Component、@Service、@Repository、@Controller
Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...
- Swift2.0下UICollectionViews拖拽效果的实现
文/过客又见过客(简书作者)原文链接:http://www.jianshu.com/p/569c65b12c8b著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文UICollecti ...
- LDAP索引及缓存优化
一.设置索引 索引将查找信息和 Directory Server 条目关联起来. Directory Server支持以下几种索引: 1出现索引 (pres) - 列出了具有特定属性的条目,与属性的值 ...
- Node.js开发环境介绍-调试工具
1)WebStorm 断点调试,单步执行 2)nodemon 监听文件变更,自动重启 3)node-inspector 基于浏览器调试nodejs 4)Chrome Developer Tools 基 ...