程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#應用SendMessage完成過程間通訊的辦法

C#應用SendMessage完成過程間通訊的辦法

編輯:C#入門知識

C#應用SendMessage完成過程間通訊的辦法。本站提示廣大學習愛好者:(C#應用SendMessage完成過程間通訊的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#應用SendMessage完成過程間通訊的辦法正文


本文實例講述了C#應用SendMessage完成過程間通訊的辦法。分享給年夜家供年夜家參考。詳細剖析以下:

為了深刻懂得新聞機制,先來做一個測試項目

在新建項目標Form1的代碼中,參加辦法:

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

此辦法重寫了窗體的新聞截獲代碼,運轉後會發明,鼠標一移向窗體就會彈窗

關於一個可視控件來講,是赓續的在接收體系發送的新聞的。好比鼠標懸停在某某控件上,就是一個新聞,移出這個控件又是一個新聞。如示例所示,其實鼠標移入窗體,窗體就取得了一個新聞,不管你寫沒寫過代碼,它都取得了這個新聞,一個新聞對應觸發一個事宜,編寫了事宜代碼,就會履行響應的代碼操作。

事宜裡編寫的代碼,和辦法裡寫的代碼,最重要的分歧就在於前者是不曉得什麼時候觸發,爾後者是本身挪用運轉到那邊就履行的。

那誰來決議某個事宜什麼時候觸發呢?那就是新聞

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

如今評論辯論一下若何應用這類新聞機制來在過程之間傳遞值

需求:

法式A的主窗體裡有一個全局變量

法式B的主窗體裡有一個按鈕,點擊這個按鈕,獲得到法式A的這個變量

完成:

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發送一個新聞,新聞類型是104,兩個參數1和2,A能捕捉到,設置成果為333,那最初在B中的ip的值就是333

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved