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 ...
随机推荐
- SDL2.0 学习笔记-1 windows下的第一个测试程序
SDL全称是Simple DirectMedia Layer,是一个开源的.跨平台(win32,linux,mac)的多媒体开发c语言库. 官方网站 http://www.libsdl.org/ 第一 ...
- bzoj1827 [Sdoi2010]星际竞速
Description 10 年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一, 夺得这个项目的冠军无疑是很多人的梦想,来自杰森座 α星的悠悠也是其中之一. 赛车大赛的赛场由 N 颗行星和 ...
- 测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)
Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了.到底选择那种,当然还有访 ...
- sicily 4379 bicoloring
题意:输入一个简单(无多重边和自环)的连通无向图,判断该图是否能用黑白两种颜色对顶点染色,使得每条边的两个端点为不同颜色. 解法:由于无自连通节点存在,所以只需进行一次宽搜,遍历所有的点和所有的边,判 ...
- linux mysql默认安装在哪个目录
MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件.配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比 ...
- mysql导入数据大小设置方法
MySQL导入数据库文件最大限制2048KB和phpmyadmin导入数据最大限制2048KB的解决方法 解决办法: 1.打开php.ini.找到 upload_max_filesize . memo ...
- css文本样式
1. body{ color:aqua; /*可继承的颜色*/ text-align: center; /*文本对齐方式*/ } 2.缩进: index.html <!DOCTYPE html& ...
- 大到可以小说的Y组合子(一)
问:上回乱扯淡了一通,这回该讲正题了吧. 答:OK. 先来列举一些我参考过,并从中受到启发的文章. (1.)老赵的一篇文章:使用Lambda表达式编写递归函数 (2.)装配脑袋的两篇文章:VS2008 ...
- css布局&初始化&基准样式
学习css布局比较好的网站 学习css布局 1.css设置模块 typography(字体) colour(颜色) link(链接) forms(表单) layout(布局) navigation(导 ...
- 闭包中的 this 对象
关于this对象 在闭包中使用this对象也可能会导致一些问题.this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window, function createFunction ...