如何實現在WINDOWS系統下兩個程序的通訊問題。

2021-09-12 10:36:32 字數 1471 閱讀 5880

程序之間通訊的幾種方法:

在windows程式中,各個程序之間常常需要交換資料,進行資料通訊。常用的方法有

(1)使用記憶體對映檔案

(2)通過共享記憶體dll共享記憶體

(3)使用sendmessage向另一程序傳送wm_copydata訊息

比起前兩種的複雜實現來,wm_copydata訊息無疑是一種經濟實惠的一種方法.

wm_copydata訊息的主要目的是允許在程序間傳遞唯讀資料。windows在通過wm_copydata訊息傳遞期間,不提供繼承同步方式。

sdk文件推薦使用者使用sendmessage函式,接受方在資料拷貝完成前不返回,這樣傳送方就不可能刪除和修改資料:

這個函式的原型及其要用到的結構如下:

sendmessage(hwnd, wm_copydata, wparam, lparam);

其中:wm_copydata對應的十六進製制數為0x004a

wparam設定為包含資料的視窗的控制代碼。

lparam指向乙個copydatastruct的結構:

typedef  struct  tagcopydatastruct

copydatastruct;

該結構用來定義使用者資料。

具體過程如下:

首先,在傳送方,用findwindow找到接受方的控制代碼,然後向接受方傳送wm_copydata訊息。

接受方在defwndproc事件中處理這條訊息。由於中文編碼是兩個位元組, 所以傳遞中文時候位元組長度要搞清楚。

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

base.defwndproc(ref m);

}

注意這裡傳送訊息的函式:public static void sendmessage(string destprocessname, int msgid, string strmsg),只能傳送乙個msgid和乙個strmsg, 接收方只接收了strmsg

using system;

using system.runtime.interopservices;

using system.diagnostics;

namespace speeding.util

/** /// 本類封裝了一些程序間通訊的細節

///

public class winmessageutil}}

/** /// 接收訊息,得到訊息字串

///

/// system.windows.forms.message m

/// 接收到的訊息字串

public static string receivemessage(ref system.windows.forms.message m)

}

Windows 系統下如何使用gcc

用到mingw minimal gnu on windows 工具。執行 download mingw get setup.exe 注意安裝的目錄 修改環境變數 選擇計算機 屬性 高階系統設定 環境變數,在系統變數中找到 path 變數,加入 min gw的安裝目錄,例如 c mingw bin 安...

Python實現在Windows平台修改檔案屬性

如果要修改windows上一系列檔案的屬性,比如設定某些檔案為唯讀,歸檔,隱藏檔案等。pywin32的win32api模組提供了乙個setfileattributes函式,正好可以用來完成這種任務.來做乙個實驗,正常建立檔案是可以寫的,如果設定了檔案為唯讀檔案,就寫不了了opfyg。import o...

如何在Windows系統下查殺Linux惡意檔案

如何在windows系統下查殺linux惡意檔案。在對linux系統應急處理時,常需要查殺系統中是否存在惡意檔案,但純手工檢查的話,難免會有遺漏,雖然在linux系統中也有一些專門門的查殺工具,但終究維護的人少,效果也不是非常明顯,但如果先使用windows平台下的防毒軟體,去查殺linux檔案的話...