WinForm實(shí)現(xiàn)跨進(jìn)程通信的方法
更新時(shí)間:2014年08月26日 16:25:46 投稿:shichen2014
這篇文章主要介紹了WinForm實(shí)現(xiàn)跨進(jìn)程通信的方法,通過(guò)一個(gè)WinMessageHelper類實(shí)現(xiàn)這一功能,需要的朋友可以參考下
本文實(shí)例展示了WinForm實(shí)現(xiàn)跨進(jìn)程通信的方法,分享給大家供大家參考之用。具體方法如下:
主要功能代碼如下:
public class WinMessageHelper
{
private struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
//使用COPYDATA進(jìn)行跨進(jìn)程通信
public const int WM_COPYDATA = 0x004A;
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(
int hWnd, // handle to destination window
int Msg, // message
int wParam, // first message parameter
ref COPYDATASTRUCT lParam // second message parameter
);
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string lpClassName, string lpWindowName);
/// <summary>
/// 發(fā)送消息
/// </summary>
/// <param name="windowReceiveTitle">接收方窗體標(biāo)題名稱</param>
/// <param name="strData">要發(fā)送的數(shù)據(jù)</param>
public static void Send(string windowReceiveTitle, string strData)
{
int winHandler = FindWindow(null,windowReceiveTitle);
if (winHandler != 0)
{
byte[] sarr = System.Text.Encoding.Default.GetBytes(strData);
int len = sarr.Length + 1;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = strData;
cds.cbData = len;
SendMessage(winHandler, WM_COPYDATA, 0, ref cds);
}
}
/// <summary>
/// 接收消息
/// </summary>
/// <example>
/// 在窗體中覆蓋接收消息函數(shù)
/// protected override void DefWndProc(ref System.Windows.Forms.Message m)
/// {
/// switch(m.Msg)
/// {
/// case WinMessageHelper.WM_COPYDATA:
/// string str = WinMessageHelper.Receive(ref m);
/// break;
/// default:
/// base.DefWndProc(ref m);
/// break;
///
/// }
/// }
/// </example>
/// <returns>接收的到數(shù)據(jù)</returns>
public static string Receive(ref System.Windows.Forms.Message m)
{
COPYDATASTRUCT cds = new COPYDATASTRUCT();
Type cdsType = cds.GetType();
cds = (COPYDATASTRUCT)m.GetLParam(cdsType);
return cds.lpData;
}
}
希望本文所述實(shí)例對(duì)大家C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
Unity實(shí)現(xiàn)旋轉(zhuǎn)扭曲圖像特效
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)旋轉(zhuǎn)扭曲圖像特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
c# 如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的json解析器
這篇文章主要介紹了c# 如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的json解析器,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
利用Aspose.Word控件實(shí)現(xiàn)Word文檔的操作
偶然一次機(jī)會(huì),一個(gè)項(xiàng)目的報(bào)表功能指定需要導(dǎo)出為Word文檔,因此尋找了很多篇文章,不過(guò)多數(shù)介紹的比較簡(jiǎn)單一點(diǎn),于是也參考了官方的幫助介紹,終于滿足了客戶的需求。下面我由淺入深來(lái)介紹這個(gè)控件在實(shí)際業(yè)務(wù)中的使用過(guò)程吧2013-05-05
c# 實(shí)現(xiàn)子窗口關(guān)閉父窗口也關(guān)閉的方法
下面小編就為大家?guī)?lái)一篇c# 實(shí)現(xiàn)子窗口關(guān)閉父窗口也關(guān)閉的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01

