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

本文介绍了如何使用C#结合API在不同应用程序之间发送消息。通过FindWindow和FindWindowEx获取目标窗口及控件的句柄,再利用PostMessage发送BM_CLICK消息模拟点击事件。总结指出,C#底层依然基于Windows的消息处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

实例1:

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

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

实例2:

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

1:添加using System.Runtime.InteropServices;

2: 添加对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);

3:添加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);

  }

 

总结:

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值