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 ...
随机推荐
- [LeetCode] 179. Largest Number 解题思路
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- Bozo排序
Bogo的变种,继续卖萌... Bogo每次都随机打乱数组,而Bozo每次随机选择两个位置,然后交换这两个位置的值.相同的是不断靠概率不断查看有序了没... public static void bo ...
- Java语言实现简单FTP软件------>上传下载队列窗口的实现(七)
1.首先看一下队列窗口的界面 2.看一下上传队列窗口的界面 3.看一下下载队列窗口的界面 4.队列窗口的实现 package com.oyp.ftp.panel.queue; import stati ...
- V$、GV$、X$、V_$、GV_$之间的关系
V$.GV$.X$.V_$.GV_$之间的关系 GV$:全局视图,针对多个实例环境. V$:针对某个实例的视图. X$:是GV$视图的数据来源,oracle内部表. GV_$:是GV$的同义词. V_ ...
- iOS- UITableView could not hold the selected row after reload
I like stackoverflow.. Answer : http://stackoverflow.com/questions/6649202/uitableview-doesnt-keep-r ...
- mysql中的unique
distinct可以把重复的行去掉,查询时候用select distinct * from ...; unique在MySQL中是完整性约束里的一种,如果某列的值需要是唯一的那么就添加UNIQUE约束 ...
- Welcome to Apache™ Hadoop®!
What Is Apache Hadoop? Getting Started Download Hadoop Who Uses Hadoop? News 15 October, 2013: relea ...
- linux一键安装vncserver脚本
title: linux一键安装vncserver脚本 date: 2016-04-11 14:32:04 tags: --- linux多数情况下是作为服务器使用的,管理员一般也喜欢使用命令行来管理 ...
- .net程序开发人员必看的变量的命名规则
(1)类名.属性名.方法名采用Pascal命名,如 class User { } interface IEditable { } bool ValidateInput() public int Age ...
- getParameter百科
获取数据库中的参数数据 getParameter(). request.getParameter("username");其中的这个username 是接受前台的参数 比如in ...