热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#【必备技能篇】两个程序(进程间)通信,传递消息给其它窗口

文章目录一、在两个进程之间建立一个共同区域二、利用API函数去找到进程窗口的句柄,然后用API去控制这个窗口三、方式选择四、示例【使用Process类和API实现两个




文章目录


  • 一、在两个进程之间建立一个共同区域
  • 二、利用API函数去找到进程窗口的句柄,然后用API去控制这个窗口
  • 三、方式选择
  • 四、示例【使用Process类和API实现两个进程之间的数据传输】
    • 程序结构如下:
    • WindowsFormsApp1的代码
    • WindowsFormsApp2的代码
    • 操作步骤:
    • 运行结果:



目前,网上关于C#进程间通信的方法有很多种,但是总结起来它们不外乎从以下两个方面进行考虑:


一、在两个进程之间建立一个共同区域

其中一个进程改变这个区域的内容,而另一个进程则去读取它,反之亦然。
比如,可以让两个进程共享同一块内存,通过改变和读取内存中的内容进行通信;或者,创建一个文件,两个进程同时占用,甚至可以利用注册表或者剪贴板充当这个“共同区域”。

疑问】???
如何两个进程共享一块内存?
如何利用注册表或者剪贴板充当这个“共同区域”?


二、利用API函数去找到进程窗口的句柄,然后用API去控制这个窗口

例如,导入“User32.dll”中的FindWindow、FindWindowEx函数查找窗口,并获取窗口句柄。也可直接利用C#中的Process类来启动程序,并获取这个进程的主窗口的句柄,等等。

疑问】???
如何通过“User32.dll”中的FindWindow、FindWindowEx函数查找窗口,并获取窗口句柄?


三、方式选择

在编程时,我们往往需要选择一种既方便编写,效率又高的程序。
第一种类型相对比较复杂,而且效率不高。
相比来讲,第二种类型在不降低程序运行效率的情况下编写更简单


四、示例【使用Process类和API实现两个进程之间的数据传输】

新建一个程序,其中有两个项目,分别为WindowsFormsApp1和WindowsFormsApp2,
生成的程序分别为:Form1Form2
在这里插入图片描述在这里插入图片描述


程序结构如下:

在这里插入图片描述在这里插入图片描述


WindowsFormsApp1的代码

WindowsFormsApp1中Form1窗体如下:
在这里插入图片描述

Form1代码如下:

using System;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
this.label1.Text = Convert.ToString(e.KeyValue);
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}

WindowsFormsApp2的代码

WindowsFormsApp1中Form1窗体如下:
在这里插入图片描述
Form1的代码:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage1(IntPtr wnd, int msg, IntPtr wP, IntPtr lP);
ProcessStartInfo psInfo = new ProcessStartInfo(@"..\..\..\WindowsFormsApp1\bin\Debug\Form1.exe");//Form1.exe的启动路径
Process pro = new Process();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
pro.StartInfo = psInfo;
}
private void button1_Click(object sender, EventArgs e)
{
pro.Start();
}
private void button2_Click(object sender, EventArgs e)
{
pro.Kill();
}
private void button3_Click(object sender, EventArgs e)
{
IntPtr hWnd = pro.MainWindowHandle; //获取Form1.exe主窗口句柄
int data = Convert.ToInt32(this.textBox1.Text); //获取文本框数据
SendMessage1(hWnd, 0x0100, (IntPtr)data, (IntPtr)0); //发送WM_KEYDOWN消息
}
}
}

操作步骤:


  1. 打开Form2.exe
  2. 点击打开程序,Form1.exe被打开
  3. 点击“发送消息”,Form1.exe接收到Form2.exe传输过来的值,并显示。

运行结果:

在这里插入图片描述







推荐阅读
  • 本文介绍了如何在C#应用程序中有效隐藏SQLCMD命令行窗口,确保程序运行时不会弹出黑色命令提示符窗口。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • PHP中去除换行符的多种方法及应用场景
    本文将详细介绍在PHP中去除换行符的各种方法,并结合实际应用场景进行说明。通过本文,您将了解如何根据不同操作系统的特点,选择最合适的换行符处理方式。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文深入探讨了Python中的高阶函数和Lambda表达式的使用方法,结合实际案例解析其应用场景,帮助开发者更好地理解和运用这些强大的工具。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 在进行Revit插件开发时,经常会遇到窗口被其他应用程序遮挡的问题。本文将介绍如何通过简单的代码调整,确保插件窗口始终保持在Revit主界面的最前端,提升用户体验。 ... [详细]
  • 开发笔记:2020 BJDCTF Re encode
    开发笔记:2020 BJDCTF Re encode ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ... [详细]
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
author-avatar
Xl小飞2502901391
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有