• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#使用SendMessage实现进程间通信的方法

C#使用SendMessage实现进程间通信的方法

作者:heishui 字体:[增加 减小] 来源:互联网 时间:2017-05-28

heishui 通过本文主要向大家介绍了c#进程间通信,进程间通信的方法,进程间的通信方式,进程间通信,linux进程间通信等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C#使用SendMessage实现进程间通信的方法。分享给大家供大家参考。具体分析如下:

为了深入理解消息机制,先来做一个测试项目

在新建项目的Form1的代码中,加入方法:

protected override void DefWndProc(ref Message m)
{ 
  if (m.Msg == 0x200)
  { 
   MessageBox.Show("捕捉到消息");
  } 
  else 
  { 
  } 
  base.DefWndProc(ref m);
}
</div>

此方法重写了窗体的消息截获代码,运行后会发现,鼠标一移向窗体就会弹窗

对于一个可视控件来说,是不断的在接受系统发送的消息的。比如鼠标悬停在某某控件上,就是一个消息,移出这个控件又是一个消息。如示例所示,其实鼠标移入窗体,窗体就获得了一个消息,无论你写没写过代码,它都获得了这个消息,一个消息对应触发一个事件,编写了事件代码,就会执行相应的代码操作。

事件里编写的代码,和方法里写的代码,最主要的不同就在于前者是不知道何时触发,而后者是自己调用运行到那里就执行的。

那谁来决定某个事件何时触发呢?那就是消息

示例中的0x200是一个消息类型,代表了鼠标移入窗体这个消息

现在讨论一下如何利用这种消息机制来在进程之间传递值

需求:

程序A的主窗体里有一个全局变量

程序B的主窗体里有一个按钮,点击这个按钮,获取到程序A的这个变量

实现:

1. 新建一个解决方案,是程序A,窗体后台代码重写DefWndProc

public partial class Form1 : Form 
{ 
  public Form1() 
  { 
   InitializeComponent(); 
  } 
  private void Form1_Load(object sender, EventArgs e)
  { 
  } 
  protected override void DefWndProc(ref Message m)
  { 
   if (m.Msg == 0x104) 
   { 
    m.Result = (IntPtr)333; 
    return; 
       } 
   else 
   {     
   } 
   base.DefWndProc(ref m); 
  } 
}
</div>

2. 新建一个解决方案,程序B,

public Form1() 
{
 InitializeComponent();
}
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern IntPtr SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

private void button2_Click(object sender, EventArgs e)
{
 Process[] arrPro = Process.GetProcessesByName("WindowsFormsApplication1.vshost");
 IntPtr ip = SendMessage(arrPro[0].MainWindowHandle, 0x104, 1, 2);
}
</div>

这样,在按钮点击的时候,会向A发送一个消息,消息类型是104,两个参数1和2,A能捕获到,设置结果为333,那最后在B中的ip的值就是333

希望本文所述对大家的C#程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#简单读取主机上所有进程的方法
  • C#实现关闭其他程序窗口或进程代码分享
  • C#实现强制关闭当前程序进程
  • C#关闭指定名字进程的方法
  • C#遍历系统进程的方法
  • C#使用SendMessage实现进程间通信的方法
  • C#操作windows系统进程的方法
  • C#实现查杀本地与远程进程的方法
  • C#网络编程基础之进程和线程详解
  • C#控制IE进程关闭和缓存清理的实现代码

相关文章

  • 2017-05-28C# 4.0 大数的运算--BigInteger的应用详解
  • 2017-05-28C#图像重新着色的方法
  • 2017-05-28c#中使用自动属性减少代码输入量
  • 2017-05-28适合初学者开发的C#在线英汉词典小程序
  • 2017-05-28C# 读写XML(代码分享)
  • 2017-05-28C#下实现创建和删除目录的实例代码
  • 2017-05-28c# 实现窗体拖到屏幕边缘自动隐藏
  • 2017-05-28c# 可疑文件扫描代码(找到木马)(简)
  • 2017-05-28c#目录操作示例(获取目录名称 获取子目录)
  • 2017-05-28C#基础语法:可空类型详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 浅谈Visual C#进行图像处理(读取、保存以及对像素的访问)
    • c# Invoke和BeginInvoke 区别分析
    • C#开发教程之ftp操作方法整理
    • C#修改IIS站点framework版本号的方法
    • C#异步执行任务的方法
    • C#微信开发之微信公众号标签管理功能
    • C#中方法的直接调用、反射调用与Lambda表达式调用对比
    • C#实现的序列化通用类实例
    • C#实现利用Windows API读写INI文件的方法
    • c#读取xml文件到datagridview实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有