1:採用自定義資訊
發端:(1)updatedata();
(2)查詢物件控制代碼 cwnd *pwnd = cwnd::findwindow(null,_t("datarecv1"));
(3)自定義訊息wm_comm1:#define wm_comm1 wm_user+101,
(4) 傳送
uint umsg;
umsg = atoi(m_strmes);
pwnd->sendmessage(wm_comm1,null,(lparam)umsg);
收端:(1)定義相同的訊息#define wm_comm1 wm_user+101
(2)on_message(wm_comm1,onuserreceivemsg)
(3)afx_msg void onuserreceivemsg(wparam wparam,lparam lparam);
(4)void cdatarecv1dlg::onuserreceivemsg(wparam wparam,lparam lparam)
2:用註冊訊息進行通訊
和自定義訊息很類似
發端:(1):註冊訊息const uint wm_nregmsg=registerwindowmessage("reg_data");
(2)同自定義訊息
收端(1):註冊訊息const uint wm_nregmsg=registerwindowmessage("reg_data");
(2):on_registered_message(wm_nregmsg,onregreceivemsg)//(注意採用的巨集不一樣)
(3),(4)同:
3: 用wm_copydata訊息實現通訊
發端:(1):查詢物件視窗的控制代碼
(2):傳送copydatastruct結構體
copydatastruct cpd;
cpd.dwdata =0;
cpd.cbdata = m_copydata.getlength();
cpd.lpdata = (void*)m_copydata.getbuffer(cpd.cbdata);
pwnd->sendmessage(wm_copydata,null,(lparam)&cpd);
收端:(1)在message_map中新增on_wm_copydata()
(2)afx_msg中新增afx_msg bool oncopydata(cwnd* pwnd, copydatastruct* pcopydatastruct);
(3)訊息對映
bool cdatarecv1dlg::oncopydata(cwnd* pwnd, copydatastruct* pcopydatastruct)
4:使用記憶體位址通訊
發端:(1)查詢物件控制代碼
(2):獲得當前控制代碼的程序id:
dword pid;
getwindowthreadprocessid(pwnd->m_hwnd,(dword*)&pid);
(3):根據程序id開啟程序獲得程序控制代碼
handle hprocess = openprocess(process_all_access,false,pid);
(4):分配虛擬記憶體
lpvoid lpbaseaddress;
lpbaseaddress = virtualallocex(hprocess,0,buffer_size,mem_commit,page_readwrite);
char data[buffer_size];
strcpy(data,m_strsendaddress);
writeprocessmemory(hprocess,lpbaseaddress,data,buffer_size,null);
(6):註冊訊息
const uint wm_nmemmsg=registerwindowmessage("mem_data");
(7):傳送註冊訊息
pwnd->sendmessage(wm_nmemmsg,null,(lparam)lpbaseaddress);
sleep(100);
(8)釋放申請的虛擬記憶體
virtualfreeex(hprocess,lpbaseaddress,0,mem_release);
收端:(1):const uint wm_nmemmsg=registerwindowmessage("mem_data");
(2):on_registered_message(wm_nmemmsg,onregmemmsg)
(3):afx_msg void onregmemmsg(wparam wparam,lparam lparam);
(4):
void cdatarecv1dlg::onregmemmsg(wparam wparam,lparam lparam)
else
// 使用完後關閉剪貼簿.
closeclipboard();
// 更新資料.
updatedata(false);
程序篇 程序間通訊《訊息佇列》
訊息佇列就是訊息的鍊錶,存放在核心中並由訊息佇列識別符號表示。訊息佇列提供了乙個從乙個程序向另乙個程序傳送資料塊的方法,每乙個資料塊都可以被認為是有乙個型別,接收者接受的資料塊可以有不同的型別。但是和管道類似的是,它有乙個不足就是每個訊息的最大長度是有上限的 每個訊息佇列的總的位元組數 系統上訊息佇...
程序間通訊之管道篇
這裡我們談談程序間互動的機制,這裡不同於使用訊號來讓程序間傳送訊息。當從乙個程序連線資料流到另乙個程序時,我們使用術語管道 pipe 我們通常是把乙個程序的輸出通過管道連線 到另乙個程序的輸入。我們來看看底層的pipe 函式呼叫。通過這個函式在兩個程式間傳遞資料不需要啟動乙個shell來解釋請求的命...
基礎篇 十四 程序間通訊
在android中提供了四種跨程序通訊的方式。對應於android四大元件 activity content provider broadcastreciever 和service。一 activity被其他程序呼叫。在androidmanifest.xml檔案中註冊 activity時,設定act...