最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用SendMessage實現(xiàn)進程間通信的方法

 更新時間:2015年04月28日 14:44:38   作者:heishui  
這篇文章主要介紹了C#使用SendMessage實現(xiàn)進程間通信的方法,涉及C#中SendMessage方法的使用技巧,非常具有實用價值,需要的朋友可以參考下

本文實例講述了C#使用SendMessage實現(xiàn)進程間通信的方法。分享給大家供大家參考。具體分析如下:

為了深入理解消息機制,先來做一個測試項目

在新建項目的Form1的代碼中,加入方法:

protected override void DefWndProc(ref Message m)
{ 
  if (m.Msg == 0x200)
  { 
   MessageBox.Show("捕捉到消息");
  } 
  else 
  { 
  } 
  base.DefWndProc(ref m);
}

此方法重寫了窗體的消息截獲代碼,運行后會發(fā)現(xiàn),鼠標一移向窗體就會彈窗

對于一個可視控件來說,是不斷的在接受系統(tǒng)發(fā)送的消息的。比如鼠標懸停在某某控件上,就是一個消息,移出這個控件又是一個消息。如示例所示,其實鼠標移入窗體,窗體就獲得了一個消息,無論你寫沒寫過代碼,它都獲得了這個消息,一個消息對應(yīng)觸發(fā)一個事件,編寫了事件代碼,就會執(zhí)行相應(yīng)的代碼操作。

事件里編寫的代碼,和方法里寫的代碼,最主要的不同就在于前者是不知道何時觸發(fā),而后者是自己調(diào)用運行到那里就執(zhí)行的。

那誰來決定某個事件何時觸發(fā)呢?那就是消息

示例中的0x200是一個消息類型,代表了鼠標移入窗體這個消息

現(xiàn)在討論一下如何利用這種消息機制來在進程之間傳遞值

需求:

程序A的主窗體里有一個全局變量

程序B的主窗體里有一個按鈕,點擊這個按鈕,獲取到程序A的這個變量

實現(xiàn):

1. 新建一個解決方案,是程序A,窗體后臺代碼重寫DefWndProc

public partial class Form1 : Form 
{ 
  public Form1() 
  { 
   InitializeComponent(); 
  } 
  private void Form1_Load(object sender, EventArgs e)
  { 
  } 
  protected override void DefWndProc(ref Message m)
  { 
   if (m.Msg == 0x104) 
   { 
    m.Result = (IntPtr)333; 
    return; 
       } 
   else 
   {     
   } 
   base.DefWndProc(ref m); 
  } 
}

2. 新建一個解決方案,程序B,

public Form1() 
{
 InitializeComponent();
}
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern IntPtr SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

private void button2_Click(object sender, EventArgs e)
{
 Process[] arrPro = Process.GetProcessesByName("WindowsFormsApplication1.vshost");
 IntPtr ip = SendMessage(arrPro[0].MainWindowHandle, 0x104, 1, 2);
}

這樣,在按鈕點擊的時候,會向A發(fā)送一個消息,消息類型是104,兩個參數(shù)1和2,A能捕獲到,設(shè)置結(jié)果為333,那最后在B中的ip的值就是333

希望本文所述對大家的C#程序設(shè)計有所幫助。

相關(guān)文章

  • 淺析如何截獲C#程序產(chǎn)生的日志

    淺析如何截獲C#程序產(chǎn)生的日志

    這篇文章主要和大家一起來聊一聊如何截獲C#程序產(chǎn)生的日志,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-11-11
  • C#實現(xiàn)windows系統(tǒng)重啟和關(guān)機的代碼詳解

    C#實現(xiàn)windows系統(tǒng)重啟和關(guān)機的代碼詳解

    這篇文章主要介紹了C#實現(xiàn)windows系統(tǒng)重啟和關(guān)機的的方法,涉及C#調(diào)用windows系統(tǒng)命令實現(xiàn)控制開機、關(guān)機等操作的技巧,非常簡單實用,需要的朋友可以參考下
    2024-02-02
  • Unity時間戳的使用方法

    Unity時間戳的使用方法

    這篇文章主要為大家詳細介紹了Unity時間戳的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C#、ASP.NET通用工具類IsWhat?(可以判斷數(shù)字、身份證、數(shù)據(jù)類型等等)

    C#、ASP.NET通用工具類IsWhat?(可以判斷數(shù)字、身份證、數(shù)據(jù)類型等等)

    這篇文章主要介紹了C#、ASP.NET通用工具類IsWhat?(可以判斷數(shù)字、身份證、數(shù)據(jù)類型等等),本文收集整理了多個擴展函數(shù),簡單實用,項目必備,如值范圍、在里面嗎、是null或""?、是零?等等,需要的朋友可以參考下
    2015-06-06
  • C#中 paint()與Onpaint()的區(qū)別

    C#中 paint()與Onpaint()的區(qū)別

    paint是事件onpaint方法onpaint方法是調(diào)用paint事件的,用哪一個,效果是一樣,就看那一個方便了內(nèi)部是這樣實現(xiàn)的:
    2013-04-04
  • DevExpress之SplashScreen用法實例

    DevExpress之SplashScreen用法實例

    這篇文章主要介紹了DevExpress中SplashScreen的用法,對于C#初學(xué)者有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C#函數(shù)式編程中的緩存技術(shù)詳解

    C#函數(shù)式編程中的緩存技術(shù)詳解

    這篇文章主要介紹了C#函數(shù)式編程中的緩存技術(shù)詳解,本文我們將分成兩部分來講解,第一部分為預(yù)計算,第二部分則為緩存,需要的朋友可以參考下
    2015-01-01
  • C#使用Resources資源文件

    C#使用Resources資源文件

    這篇文章介紹了C#使用Resources資源文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Unity實現(xiàn)相機截圖功能

    Unity實現(xiàn)相機截圖功能

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)相機截圖功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 為IObservable實現(xiàn)自己的運算符(詳解)

    為IObservable實現(xiàn)自己的運算符(詳解)

    下面小編就為大家?guī)硪黄獮镮Observable實現(xiàn)自己的運算符(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

宿州市| 永善县| 麦盖提县| 岫岩| 广元市| 大兴区| 罗田县| 宁武县| 息烽县| 于田县| 汝南县| 靖边县| 天水市| 成武县| 盐池县| 元阳县| 金平| 含山县| 阜宁县| 建宁县| 曲靖市| 天津市| 星子县| 昌黎县| 黑山县| 灵武市| 清远市| 邛崃市| 辉南县| 新源县| 嘉禾县| 张家界市| 文登市| 和顺县| 康平县| 阜康市| 横峰县| 元江| 十堰市| 沙田区| 灵璧县|