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

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

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

C#发送消息实例1

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

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

C#发送消息实例2

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

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

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

  1. [DllImport("user32.dll")]  
  2.  public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);  
  3.  
  4.  [DllImport("user32.dll")]  
  5.  public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);  
  6.  
  7.  [DllImport("user32.dll", CharSet=CharSet.Unicode)]    
  8.  public static extern IntPtr PostMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);  

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

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

Visual C# ..NET应用程序

2009-08-24 14:19:27

C# Windows应

2009-08-06 10:27:08

C#应用程序域

2010-12-27 17:04:07

应用程序版本升级

2009-08-28 16:03:15

C#程序实现鼠标移动

2009-08-28 16:43:08

AutoCAD托管C#

2009-08-24 13:30:50

C# Windows

2009-01-19 11:07:42

C#Web.NET

2009-08-24 16:02:10

C# Windows应

2009-08-24 13:40:58

C# Windows

2018-10-25 15:13:23

APP脱壳工具

2009-09-07 14:00:57

C#抓取网页

2009-09-03 17:40:25

C#发送短信

2011-07-20 16:59:07

2022-12-25 18:03:13

Debug原理软件

2009-07-10 17:24:07

Swing应用程序
点赞
收藏

51CTO技术栈公众号