`
aijuans8
  • 浏览: 187150 次
社区版块
存档分类
最新评论

使用C#在应用程序间发送消息

 
阅读更多

使用C#在应用程序间发送消息

作者:kongxx

首先建立两个C#应用程序项目。

第一个项目包含一个Windows Form(Form1),Form1上有一个Button和一个TextBox

第二个项目包含一个Windows Form(Form1),Form1上有两个Button,分别用来测试第一个应用程序中ButtonClick事件和修改第一个应用程序中TextBox的值。

第一个应用程序中Form的代码如下:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;

private System.ComponentModel.Container components = null;

[STAThread]
static void Main() {
Application.Run(new Form1());
}

public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(32, 24);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(32, 64);
this.textBox1.Name = "textBox1";
this.textBox1.TabIndex = 1;
this.textBox1.Text = "textBox1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

private void button1_Click(object sender, System.EventArgs e) {
MessageBox.Show("This is button1 click!");
}
}

第二个应用程序中Form的代码如下:

using System;
using System.Text;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public class TestForm1 : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;

private System.ComponentModel.Container components = null;

[STAThread]
static void Main() {
Application.Run(new TestForm1());
}

public TestForm1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(32, 24);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(32, 64);
this.button2.Name = "button2";
this.button2.TabIndex = 0;
this.button2.Text = "button2";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// TestForm1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.button1);
this.Controls.Add(this.button2);
this.Name = "TestForm1";
this.Text = "TestForm1";
this.ResumeLayout(false);

}
#endregion

private void button1_Click(object sender, System.EventArgs e) {
IntPtr hwnd_win ;
IntPtr hwnd_button ;

hwnd_win = FindWindow("WindowsForms10.Window.8.app3","Form1");
hwnd_button = FindWindowEx(hwnd_win ,new IntPtr(0) ,"WindowsForms10.BUTTON.app3","button1");

const int BM_CLICK = 0x00F5;
Message msg = Message.Create(hwnd_button ,BM_CLICK ,new IntPtr(0),new IntPtr(0));
PostMessage(msg.HWnd ,msg.Msg ,msg.WParam ,msg.LParam);
}
private void button2_Click(object sender, System.EventArgs e) {
const int WM_CHAR = 0x0102;
IntPtr hwnd_win ;
IntPtr hwnd_textbox ;

hwnd_win = FindWindow("WindowsForms10.Window.8.app3","Form1");
hwnd_textbox = FindWindowEx(hwnd_win ,new IntPtr(0) ,"WindowsForms10.EDIT.app3","textBox1");

string strtext = "测试aaa";
UnicodeEncoding encode = new UnicodeEncoding();
char[] chars = encode.GetChars(encode.GetBytes(strtext));
Message msg ;
foreach (char c in chars ) {
msg = Message.Create(hwnd_textbox ,WM_CHAR ,new IntPtr(c),new IntPtr(0));
PostMessage(msg.HWnd ,msg.Msg ,msg.WParam ,msg.LParam);
}
}

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);

[DllImport("user32.dll",CharSet=CharSet.Unicode)]
public static extern IntPtr PostMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);
}

以上代码可以在VS.NET中编译运行,也可以使用csc.exe编译,如使用一下命令行:

F:>csc.exe Form1.cs

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

F:>csc.exe TestForm1.cs

编译后生成两个.exe文件。

首先运行第一个程序,显示Form1窗体,然后运行第二个程序,显示TestForm1窗体。

TestForm1窗体上点击button1按钮(向Form1窗体上的button1发送消息)此时显示对话框提示“This is button1 click!”。

TestForm1窗体上点击button2按钮(向Form1窗体上的textBox1发送消息)此时在Form1上的textBox1上显示“测试aaa”。

分享到:
评论

相关推荐

    C#微信企业号接收和发送消息

    在本文中,我们将深入探讨如何使用C#编程语言与微信企业号进行交互,实现消息的接收和发送。微信企业号是一种为企业用户提供内部通讯和管理工具的服务,它允许开发者通过API接口进行定制化开发,实现自动化的工作...

    使用c#的一个应用程序MyQQ

    【标题】"使用C#开发的MyQQ应用程序" 在编程领域,C#是一种广泛使用的面向对象的编程语言,尤其在Windows应用开发中占有重要地位。本项目“MyQQ”就是一个利用C#语言编写的聊天工具,它展示了如何利用C#的强大功能...

    C#最精简的微信企业号发送消息

    在本文中,我们将深入探讨如何使用C#语言实现微信企业号的消息发送功能,以及相关的技术要点。 首先,"C#最精简的微信企业号发送消息"这个标题暗示我们关注的是一个简单的C#程序,该程序可以向微信企业号发送消息。...

    C# 程序间通信(SendMessage方式)

    在IT领域,程序间通信(IPC,Inter-Process Communication)是一项关键的技术,它允许不同的进程或应用程序之间交换数据和信息。本示例聚焦于C#中的一个特定IPC方法:`SendMessage`,这是一个Windows API函数,常...

    C#消息队列发送及接收

    在IT行业中,消息队列(Message Queue,MQ)是一种常用于分布式系统中解耦组件、提高系统可扩展性和...通过理解和掌握消息队列的概念及其在C#中的实现,可以极大地优化你的应用程序架构,提升系统的稳定性和可扩展性。

    C#开发WINDOWS应用程序时消息的处理 .zip

    在C#中开发Windows应用程序时,消息处理是一个关键部分,它涉及到用户界面的响应性和交互性。本资源包“C#开发WINDOWS应用程序时消息的处理.zip”提供了几个关键文件,帮助开发者理解并实现消息处理机制。 首先,...

    消息队列发送消息的C#代码实现

    消息队列允许应用程序将消息放入队列,然后由接收方从队列中取出并处理。这种异步通信方式降低了发送方和接收方之间的依赖性,使得发送方无需等待接收方的响应,提高了系统的整体性能。 在C#中,我们主要使用`...

    C#中使用SendMessage在进程间传递数据的实例

    在IT行业中,进程间通信(IPC,Inter-Process Communication)是一项关键的技术,它允许不同的应用程序或者同一应用程序的不同进程之间交换数据。本实例聚焦于在C#中如何利用`SendMessage`函数进行进程间通信,这...

    C#多线程消息处理例子

    在C#编程中,多线程消息处理是一个关键的领域,尤其在开发高效、响应迅速的应用程序时。本文将深入探讨“C#多线程消息处理例子”中的核心概念,...理解并掌握这些概念对于编写高性能、响应迅速的C#应用程序至关重要。

    c#接收发送can数据

    在CAN(Controller Area Network)通信协议中,C#作为一种常用的语言,被广泛应用于开发与CAN总线相关的应用程序。本文将详细讲解如何使用C#...掌握这些知识点,你就能创建出能够有效利用CAN总线进行通信的C#应用程序。

    C# Winform中使用SendMessage消息发送拦截

    在C# Winform应用开发中,`SendMessage`函数是一个非常重要的API调用,它允许我们向其他窗口发送消息。此技术常用于实现跨线程通信、控件操作以及消息拦截等高级功能。`WndProc`消息处理程序是Windows窗体(Winform...

    C#发送邮件小程序源码

    在IT领域,C#是一种广泛使用的编程语言,尤其在开发Windows应用程序、Web应用程序以及游戏等方面。本主题聚焦于使用C#实现发送邮件的功能,这对于许多应用程序来说是一个常见且实用的需求,比如用户注册验证、系统...

    C#实现在应用程序间发送消息的方法示例

    本文实例讲述了C#实现在应用程序间发送消息的方法。分享给大家供大家参考,具体如下: 首先建立两个C#应用程序项目。 第一个项目包含一个Windows Form(Form1),在Form1上有一个Button和一个TextBox。 第二个项目包含...

    Windows系统中使用C#编写蓝牙通信程序的简单实例

    在确保蓝牙设备(例如手机)已经与PC配对的前提下,我们可以创建一个窗体应用程序,包含用于发送和接收文件的功能。这里的关键类是`ObexListener`,它允许我们创建一个监听器来接收来自其他蓝牙设备的文件。同时,...

    C# 发送邮件 控制台程序

    在C#编程环境中,开发一个控制台应用程序来发送邮件是一个常见的任务,特别是在自动化或系统集成的场景中。本文将深入探讨如何使用C#通过SMTP(Simple Mail Transfer Protocol)服务发送邮件,结合控制台应用程序...

    C#基于局域网消息发送

    本文将详细探讨如何使用C#编程语言实现基于局域网的消息发送功能,包括对单个IP地址的发送以及对多个IP地址的群发。 首先,要实现局域网内的消息发送,我们需要理解TCP/IP协议族,它是互联网通信的基础。局域网通信...

    c# 控制外部程序方法总结

    在控制外部的 Win32 程序时,我们可以使用两种方法:.NET 平台自带的 SendKeys 和 Process 结合的方式和完全利用 Windows API 的消息机制的方式。 使用 SendKeys 和 Process 结合的方式,我们可以使用 SendKeys....

    C# Socket_服务端向指定的客户端发送消息(包含服务器)

    在本文中,我们将深入探讨如何使用C#的Socket编程来实现一个简单的聊天应用程序,其中包含服务器和客户端的交互。Socket编程是网络通信的基础,它允许应用程序通过网络进行数据传输。在C#中,System.Net命名空间下的...

    C#与C++进程间通信

    在IT领域,进程间通信(IPC,Inter-Process Communication)是一项...掌握这些知识点对于开发跨语言的多进程应用程序至关重要。通过实践和理解提供的`IPCDemo`示例,开发者可以更好地运用命名管道这一强大的通信工具。

    C#局域网聊天发送文件

    在本文中,我们将深入探讨如何使用C#编程语言开发一个局域网聊天应用程序,特别是侧重于文件发送功能。C#是一种强大的、面向对象的编程语言,由微软公司开发,广泛应用于Windows桌面应用、游戏开发以及服务器端编程...

Global site tag (gtag.js) - Google Analytics