C#在应用程序间发送消息实现浅析

开发 后端
本文向您介绍使用C#发送消息机制在C#应用程序间传送对象;实C#幕后还是采用的C#发送消息的处理机制,本创许也充分利用了Windows的消息处理机之。

说来说去,还是觉得API的功能是最强大的,但是.NET FCL,MFC等对API的封装之后也使得程序的开发变得更加容易。本模块的主要原理还是使用API,查找指定类型,窗口文本的窗口对象,使用C#发送消息,获取该对象的指针。然后实现C#应用程序间使用C#发送消息操作该对象。

C#发送消息实例1

创建一个C#Windows Form应用程序,向窗口中添加一个按钮button1,添加事件相应函数:

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

C#发送消息实例2

创建一个C# Windows Form应用程序,添加一个按钮控件button1

1:C#在应用程序添加using System.Runtime.InteropServices;

2:C#在应用程序添加对API的引用:

[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);  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

3:C#在应用程序添加button1的相应函数:

private void button1_Click(object sender, System.EventArgs e)  
  {  
      IntPtr hwnd_win ;          // 存放实例1中的Form1窗口的窗口句柄  
      IntPtr hwnd_button ;     // 存放实例1中的Form1中的button1控件的窗口句柄  
 
    // 参数1:窗口类型,参数2:窗口名称  
 
     hwnd_win = FindWindow("WindowsForms10.Window.8.app3""Form1"); // 得到Form1窗口的句柄。  
    
 
   // 参数1:父窗口句柄,   参数2:子窗口指针;参数3:窗口类型;参数4:窗口文本   
 
  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));  
 
 
  // 向Form1窗口的button1控件发送BM_CLICK消息     
 
PostMessage(msg.HWnd ,msg.Msg ,msg.WParam ,msg.LParam);   
 
  }  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

总结

其实C#幕后还是采用的C#发送消息的处理机制,本创许也充分利用了Windows的消息处理机之。

附带一个获取窗口类型的技巧:使用SPY ++就可以获取任何窗口的窗口类型。

所有的类似于WM_CHAR,WM_COMMAND等消息的值,可以在.Net目录下的WinUser.h文件中查询到。

 

【编辑推荐】

  1. C#接口和抽象类技术特点浅析
  2. C#继承知识详解
  3. 一个C#时间计算的实例
  4. C#日期格式化的几种处理方法
  5. 代码详解C#比较时间的三种方法
责任编辑:佚名 来源: 网络转载
相关推荐

2009-08-25 09:39:21

创建C# Window

2009-08-21 14:03:04

C#网络编程

2010-01-22 13:59:34

Visual C++应

2009-09-03 17:31:34

C#发送邮件

2009-08-24 14:19:27

C# Windows应

2009-08-24 09:25:18

Visual C# ..NET应用程序

2009-08-06 10:27:08

C#应用程序域

2009-08-28 16:03:15

C#程序实现鼠标移动

2010-12-27 17:04:07

应用程序版本升级

2009-01-19 11:07:42

C#Web.NET

2009-08-24 13:40:58

C# Windows

2009-08-24 16:02:10

C# Windows应

2009-08-28 16:43:08

AutoCAD托管C#

2009-08-24 13:30:50

C# Windows

2009-09-07 14:00:57

C#抓取网页

2018-10-25 15:13:23

APP脱壳工具

2009-09-03 17:40:25

C#发送短信

2009-07-10 17:24:07

Swing应用程序

2011-07-20 16:59:07

2022-12-25 18:03:13

Debug原理软件
点赞
收藏

51CTO技术栈公众号