程序間通訊 自定義訊息

2022-03-21 07:13:08 字數 1861 閱讀 7253

自定義訊息wm_copydata,使用sendmessage傳送訊息

最近想實現程序間通訊,遇到一些問題記錄一下。 

傳送方:

[dllimport("user32.dll", entrypoint = "sendmessage")]

private static extern int sendmessage(int hwnd,  int msg, int wparam, ref copydatastruct lparam);   //傳送訊息

[dllimport("user32.dll", entrypoint = "findwindow")]

private static extern int findwindow(string lpclassname, string lpwindowname);  //獲取窗體的hwnd

[structlayout(layoutkind.sequential)]

public struct copydatastruct    //自定義結構

public const int user = 0x500;    // 自定義訊息的rang 0x0400-0x7fff

const int wm_user_copydata = user + 1;

copydatastruct cds;

cds.dwdata = (intptr)100;

cds.lpdata = "e:\\wyp\\資源\\lover.mp4";

cds.cbdata = len + 1;

sendmessage(hwnd, wm_user_copydata, 0, ref cds);

(1)本想傳遞乙個字串引數到接收方,定義乙個結構傳遞乙個字串。

接收方:

protected override void defwndproc(ref system.windows.forms.message m)

{switch (m.msg)

{case wm_user_copydata:

copydatastruct mystr = new copydatastruct();

type mytype = mystr.gettype();

mystr =(copydatastruct)m.getlparam(mytype)

string  str=mystr.lparam;   //這個為空。

(2)用自定義結構接收不到字串,然後我就想用共享記憶體。

然後用到了marshal.copy()方法  發現marshal只能用在乙個程序中。

marshal.copy(m_pwdata, bytdata, 0, infosize);   //將資料從非託管記憶體指標複製到託管 8 位無符號整數陣列。

marshal.copy(bytdata, 0, m_pwdatawrite, lngsize); //將一維的託管 8 位無符號整數陣列中的資料複製到非託管記憶體指標。

(3)然後我又想在傳送方程序中申請乙個記憶體空間,目標程序收到傳來的記憶體位址,讀取記憶體,最後釋放記憶體。

傳送發:

[dllimport("kernel32.dll", charset = charset.auto)] //關閉共享記憶體

public static extern bool unmapviewoffile(intptr pvbaseaddress);

[dllimport("kernel32.dll", charset = charset.auto)]

public static extern bool closehandle(intptr handle);  // 呼叫closehandle(handle)表示建立者放棄對該核心物件的操作。如果該物件的引用物件記數為0就撤消該物件。

......待寫。。。

c 自定義訊息 程序間通訊

using system using system.collections.generic using system.linq using system.text using system.runtime.interopservices using system.diagnostics namesp...

各種自定義訊息通訊

一 普通的自定義訊息方法。大家都很清楚使用者自定義訊息的範圍,不過,雖然說用會自定義訊息從wm user開始,但是由於我們的工程裡面一般還有很多其他的控制項,他們也要占用一部分wm user訊息範圍,所以我們必須為他們留出一部分範圍,這裡,我們保留100個訊息,一般情況下,這可以滿足我們的要求。1 ...

自定義訊息

自定義訊息的響應和資源訊息的響應有很多類似之處 資源訊息的響應是以資源的id號作為標識的 自定義的訊息要自己宣告訊息id。一 定義 第一步要宣告訊息 definewm mymsgwm user 200 第二步要在類宣告中宣告訊息對映 declare message map 第三步要在類宣告中定義訊息...