亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

為了深入理解消息機(jī)制,先來(lái)做一個(gè)測(cè)試項(xiàng)目

在新建項(xiàng)目的Form1的代碼中,加入方法:

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

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

對(duì)于一個(gè)可視控件來(lái)說(shuō),是不斷的在接受系統(tǒng)發(fā)送的消息的。比如鼠標(biāo)懸停在某某控件上,就是一個(gè)消息,移出這個(gè)控件又是一個(gè)消息。如示例所示,其實(shí)鼠標(biāo)移入窗體,窗體就獲得了一個(gè)消息,無(wú)論你寫(xiě)沒(méi)寫(xiě)過(guò)代碼,它都獲得了這個(gè)消息,一個(gè)消息對(duì)應(yīng)觸發(fā)一個(gè)事件,編寫(xiě)了事件代碼,就會(huì)執(zhí)行相應(yīng)的代碼操作。

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

那誰(shuí)來(lái)決定某個(gè)事件何時(shí)觸發(fā)呢?那就是消息

示例中的0x200是一個(gè)消息類(lèi)型,代表了鼠標(biāo)移入窗體這個(gè)消息

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

需求:

程序A的主窗體里有一個(gè)全局變量

程序B的主窗體里有一個(gè)按鈕,點(diǎn)擊這個(gè)按鈕,獲取到程序A的這個(gè)變量

實(shí)現(xiàn):

1. 新建一個(gè)解決方案,是程序A,窗體后臺(tái)代碼重寫(xiě)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. 新建一個(gè)解決方案,程序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);
}

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

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

相關(guān)文章

  • C#常用排序方式總結(jié)

    C#常用排序方式總結(jié)

    在最近的項(xiàng)目中經(jīng)常會(huì)對(duì)C#中的數(shù)據(jù)進(jìn)行排序,對(duì)于基本數(shù)據(jù)類(lèi)型,其排序方式比較簡(jiǎn)單,只需要調(diào)用內(nèi)置算法即可實(shí)現(xiàn),但對(duì)于自定義數(shù)據(jù)類(lèi)型以及自定義排序規(guī)則的情況實(shí)現(xiàn)起來(lái)就比較麻煩,所以在本文章中將詳細(xì)介紹一下在中C#中如何對(duì)數(shù)據(jù)進(jìn)行排序,需要的朋友可以參考下
    2024-01-01
  • C# javascript 讀寫(xiě)Cookie的方法

    C# javascript 讀寫(xiě)Cookie的方法

    這篇文章介紹了C# javascript 讀寫(xiě)Cookie的方法,有需要的朋友可以參考一下
    2013-10-10
  • C#集合遍歷時(shí)刪除和增加元素的方法

    C#集合遍歷時(shí)刪除和增加元素的方法

    這篇文章主要介紹了C#集合遍歷時(shí)刪除和增加元素的方法,結(jié)合實(shí)例形式分析了C#針對(duì)集合元素的遍歷、添加與刪除等操作實(shí)現(xiàn)方法與注意事項(xiàng),需要的朋友可以參考下
    2016-06-06
  • 分享一個(gè)C#編寫(xiě)簡(jiǎn)單的聊天程序(詳細(xì)介紹)

    分享一個(gè)C#編寫(xiě)簡(jiǎn)單的聊天程序(詳細(xì)介紹)

    這是一篇基于Socket進(jìn)行網(wǎng)絡(luò)編程的入門(mén)文章,我對(duì)于網(wǎng)絡(luò)編程的學(xué)習(xí)并不夠深入,這篇文章是對(duì)于自己知識(shí)的一個(gè)鞏固,同時(shí)希望能為初學(xué)的朋友提供一點(diǎn)參考。文章大體分為四個(gè)部分:程序的分析與設(shè)計(jì)、C#網(wǎng)絡(luò)編程基礎(chǔ)(篇外篇)、聊天程序的實(shí)現(xiàn)模式、程序?qū)崿F(xiàn)
    2015-12-12
  • C#利用正則判斷輸入是否為純數(shù)字、容器類(lèi)

    C#利用正則判斷輸入是否為純數(shù)字、容器類(lèi)

    這篇文章主要介紹了C#利用正則判斷輸入是否為純數(shù)字、容器類(lèi)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 初步認(rèn)識(shí)C#中的Lambda表達(dá)式和匿名方法

    初步認(rèn)識(shí)C#中的Lambda表達(dá)式和匿名方法

    這篇文章主要介紹了初步認(rèn)識(shí)C#中的Lambda表達(dá)式和匿名方法,本文著重講解Lambda表達(dá)式和匿名方法的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-01-01
  • C#/VB.NET實(shí)現(xiàn)創(chuàng)建PDF/UA文件的示例代碼

    C#/VB.NET實(shí)現(xiàn)創(chuàng)建PDF/UA文件的示例代碼

    PDF/UA,即Universally?Accessible?PDF,該格式的PDF文件是于2012年8月以ISO標(biāo)準(zhǔn)14289-1發(fā)布的、具有普遍可訪問(wèn)的PDF文檔標(biāo)準(zhǔn)。本文將用C#實(shí)現(xiàn)DF/UA文件的創(chuàng)建,需要的可以參考一下
    2022-08-08
  • C#中使用async和await實(shí)現(xiàn)異步Udp通訊的示例代碼

    C#中使用async和await實(shí)現(xiàn)異步Udp通訊的示例代碼

    本文主要介紹了C#中使用async和await實(shí)現(xiàn)異步Udp通訊的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#程序窗體間使用回調(diào)事件方式通訊示例

    C#程序窗體間使用回調(diào)事件方式通訊示例

    C#有事件這個(gè)東西,為啥不用呢,而且事件在窗體通信方面,有著更為方便的作用,我們知道事件實(shí)際上就是狀態(tài)的捕獲,數(shù)據(jù)互相操作的例子
    2013-12-12
  • c#使用IAsyncEnumerable實(shí)現(xiàn)流式分段傳輸

    c#使用IAsyncEnumerable實(shí)現(xiàn)流式分段傳輸

    這篇文章主要為大家詳細(xì)介紹了c#如何使用IAsyncEnumerable實(shí)現(xiàn)流式分段傳輸,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10

最新評(píng)論