zoukankan      html  css  js  c++  java
  • C#实现在应用程序间发送消息的方法示例

    本文实例讲述了C#实现在应用程序间发送消息的方法。分享给大家供大家参考,具体如下:

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

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

    第二个项目包含一个Windows Form(Form1),在Form1上有两个Button,分别用来测试第一个应用程序中Button的Click事件和修改第一个应用程序中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

    F:>csc.exe TestForm1.cs

    复制代码

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

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

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

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

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

    (编辑:雷林鹏 来源:网络)

  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9272396.html
Copyright © 2011-2022 走看看