自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#在應(yīng)用程序間發(fā)送消息實(shí)現(xiàn)淺析

開發(fā) 后端
本文向您介紹使用C#發(fā)送消息機(jī)制在C#應(yīng)用程序間傳送對象;實(shí)C#幕后還是采用的C#發(fā)送消息的處理機(jī)制,本創(chuàng)許也充分利用了Windows的消息處理機(jī)之。

說來說去,還是覺得API的功能是最強(qiáng)大的,但是.NET FCL,MFC等對API的封裝之后也使得程序的開發(fā)變得更加容易。本模塊的主要原理還是使用API,查找指定類型,窗口文本的窗口對象,使用C#發(fā)送消息,獲取該對象的指針。然后實(shí)現(xiàn)C#應(yīng)用程序間使用C#發(fā)送消息操作該對象。

C#發(fā)送消息實(shí)例1

創(chuàng)建一個(gè)C#Windows Form應(yīng)用程序,向窗口中添加一個(gè)按鈕button1,添加事件相應(yīng)函數(shù):

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

C#發(fā)送消息實(shí)例2

創(chuàng)建一個(gè)C# Windows Form應(yīng)用程序,添加一個(gè)按鈕控件button1

1:C#在應(yīng)用程序添加using System.Runtime.InteropServices;

2:C#在應(yīng)用程序添加對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#在應(yīng)用程序添加button1的相應(yīng)函數(shù):

  1. private void button1_Click(object sender, System.EventArgs e)  
  2.   {  
  3.       IntPtr hwnd_win ;          // 存放實(shí)例1中的Form1窗口的窗口句柄  
  4.       IntPtr hwnd_button ;     // 存放實(shí)例1中的Form1中的button1控件的窗口句柄  
  5.  
  6.     // 參數(shù)1:窗口類型,參數(shù)2:窗口名稱  
  7.  
  8.      hwnd_win = FindWindow("WindowsForms10.Window.8.app3""Form1"); // 得到Form1窗口的句柄。  
  9.     
  10.  
  11.    // 參數(shù)1:父窗口句柄,   參數(shù)2:子窗口指針;參數(shù)3:窗口類型;參數(shù)4:窗口文本   
  12.  
  13.   hwnd_button = FindWindowEx(hwnd_win ,new IntPtr(0) ,"WindowsForms10.BUTTON.app3","button1");    
  14.  
  15.   // 定義待發(fā)送的消息    
  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控件發(fā)送BM_CLICK消息     
  22.  
  23. PostMessage(msg.HWnd ,msg.Msg ,msg.WParam ,msg.LParam);   
  24.  
  25.   }  

總結(jié)

其實(shí)C#幕后還是采用的C#發(fā)送消息的處理機(jī)制,本創(chuàng)許也充分利用了Windows的消息處理機(jī)之。

附帶一個(gè)獲取窗口類型的技巧:使用SPY ++就可以獲取任何窗口的窗口類型。

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

 

【編輯推薦】

  1. C#接口和抽象類技術(shù)特點(diǎn)淺析
  2. C#繼承知識詳解
  3. 一個(gè)C#時(shí)間計(jì)算的實(shí)例
  4. C#日期格式化的幾種處理方法
  5. 代碼詳解C#比較時(shí)間的三種方法
責(zé)任編輯:佚名 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2009-08-25 09:39:21

創(chuàng)建C# Window

2009-08-21 14:03:04

C#網(wǎng)絡(luò)編程

2010-01-22 13:59:34

Visual C++應(yīng)

2009-09-03 17:31:34

C#發(fā)送郵件

2009-08-06 10:27:08

C#應(yīng)用程序域

2009-08-24 09:25:18

Visual C# ..NET應(yīng)用程序

2009-08-24 14:19:27

C# Windows應(yīng)

2009-08-28 16:03:15

C#程序?qū)崿F(xiàn)鼠標(biāo)移動

2010-12-27 17:04:07

應(yīng)用程序版本升級

2009-08-24 13:40:58

C# Windows

2009-08-24 16:02:10

C# Windows應(yīng)

2009-01-19 11:07:42

C#Web.NET

2009-08-28 16:43:08

AutoCAD托管C#

2009-08-24 13:30:50

C# Windows

2009-09-07 14:00:57

C#抓取網(wǎng)頁

2018-10-25 15:13:23

APP脫殼工具

2009-09-03 17:40:25

C#發(fā)送短信

2011-07-20 16:59:07

2022-12-25 18:03:13

Debug原理軟件

2009-07-10 17:24:07

Swing應(yīng)用程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號