WPF程序之間通訊

2022-02-07 13:49:20 字數 1784 閱讀 2752

準備:使用copydata,wm_user只能用於應用程式內部的通訊,跨程序用copydata

public const int wm_copydata = 0x004a;

查詢目標傳送窗體:

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

public static extern intptr findwindow(string lpclassname, string lpwindowname);

定義乙個結構體

[structlayout(layoutkind.sequential)]

public struct copydatastruct

傳送訊息方法

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

private static extern int sendmessage

intptr hwnd,                   //目標窗體控制代碼

int msg,                       //wm_copydata

int wparam,                                             //自定義數值

ref  copydatastruct lparam             //結構體

封裝方法:

///

/// sendmessage to window

///

/// window的title,建議加上guid,不會重複

/// 要傳送的字串

public static void sendmessage(string windowname, string strmsg)

if (strmsg == null) return;

intptr hwnd = findwindow(null, windowname);

if (hwnd != intptr.zero)

copydatastruct cds;

cds.dwdata = intptr.zero;

cds.lpdata = strmsg;

//注意:長度為位元組數

cds.cbdata = system.text.encoding.default.getbytes(strmsg).length + 1;

// ****窗體

int fromwindowhandler = 0;

sendmessage(hwnd, wm_copydata, fromwindowhandler, ref  cds);

傳送舉例:

messagehelper.sendmessage("popupnotify_06f777cb-958e-4cfb-ba80-b311c8cf94e1",」mmessage」);

接收:在mainwindow中註冊hook

void mainwindow_loaded(object sender, routedeventargs e)

接收訊息:

intptr wndproc(intptr hwnd, int msg, intptr wparam, intptr lparam, ref bool handled)

return hwnd;

}另外:獲取目標窗體的控制代碼時,可以先獲取目標process,然後process.mainwindowhandle就是目標窗體的控制代碼。但是如果mainwindow的showintaskbar=false,這個辦法就失效了,只能用findwindow。

程序之間通訊

之所以開啟子程序 肯定需要他幫我們完成任務,很多情況下,需要將資料返回給父程序。然而程序記憶體是物理隔離的 1.將共享資料放在檔案中,就是慢 2.管道subprocess 中那個管道只能單向通訊,必須有父子關係 3.共享一塊記憶體區域 得作業系統幫你分配,速度快 from multiprocessi...

程序之間 執行緒之間的通訊方式

1 程序間的8中通訊方式 1 無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 2 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方...

程序之間的通訊 訊號通訊

訊號通訊 方式 訊號型別 下面是幾種常見的訊號 sighup 從終端上發出的結束訊號 sigint 來自鍵盤的中斷訊號 ctrl c sigkill 該訊號結束接收訊號的程序,殺死程序 sigterm kill 命令發出的訊號 sigchld 子程序停止或結束時通知父程序 sigstop 來自鍵盤 ...