應用程式間訊息的互發

2022-07-13 18:24:10 字數 1878 閱讀 2466

zzz同樣是 windows環境下32位組合語言程式設計 書中的例子,程式a向程式b傳送訊息,程式b響應這個訊息,**如下

code

傳送程式**:

#include 

<

windows.h

>

intwinapi winmain(hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,

intncmdshow)

messagebox(hwnd,

"send fail!",

"fail

",mb_ok);

return0;

}接收程式**

code

#include 

<

windows.h

>

lresult callback _procwinmain(hwnd,uint,wparam,lparam);

intwinapi winmain(hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,

intncmdshow)

}return0;

}lresult callback _procwinmain(hwnd hwnd,uint umsg,wparam wparam,lparam lparam)

else

if(umsg

==wm_destroy)

else

if(umsg

==wm_settext)

else

return0;

}例子很簡單,但是心裡有個疑問,程式a本身產生的訊息和程式b產生的訊息之間是否有什麼差別?能否在程式中識別當前的訊息是否本身產生的?否則響應程式的流程不就是亂了嗎?

我感覺這個訊息互發的功能應該沒這麼簡單,繼續研究去~

發現一件有趣的事情,不僅是wm_settext訊息可以通過另外的程式傳送,連wm_close,wm_destroy訊息也可以,也就是說我可以用乙個程式遠端關掉另外乙個程式,嘗試了一下,程式**如下

code

#include 

<

windows.h

>

intwinapi winmain(hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,

intncmdshow)

messagebox(hwnd,

"send fail!",

"fail

",mb_ok);

return0;

}確實是可以的,開了send程式以後receive程式真的就被關掉了,哈哈。但是,到此又有了乙個疑問,還有乙個訊息wm_quit也是完成關閉視窗的功能的,這個訊息能成功嗎?

試驗了一下,竟然不行!問題處在**?google了一下,原來sendmessage直接將訊息傳送到視窗,並呼叫視窗處理程式,完成訊息響應,即sendmessage 根本就沒有將訊息發到訊息對列中,因此getmessage無法從訊息對列中收到wm_quit的訊息,所以receive程式無法關閉。

那是不是沒辦法傳送wm_quit訊息了呢?當然不是,windows給我們提供了postmessage函式,用法和sendmessage函式一樣,使用postmessage函式是將訊息插入訊息佇列中的,因此recieve程式就能夠響應wm_quit訊息了,用postmessage函式試驗一下,成功!

那麼postmessage函式和sendmessage函式是否一樣呢?我們用postmessage函式來傳送一下wm_settext命令試一下,receive函式沒反應!看來,postmessage和sendmessage名字差不多,功能可是有很大不同的,具體有什麼不同,研究下,放到下篇部落格再說了:)

使用C 在應用程式間傳送訊息

摘要 說來說去,還是覺得api的功能是最強大的,但是.net fcl,mfc等對api的封裝之後也使得程式的開發變得更加容易。本模組的主要原理還是使用api,查詢指定型別,視窗文字的視窗物件,獲取該物件的指標。然後操作該物件。例項1 建立乙個c windows form應用程式,向視窗中新增乙個按鈕...

應用程式間通訊 URL Scheme

ios 的設計思路是原則上禁止不同的應用程式之間相互訪問彼此的資料。雖然對於像我這樣的桌面應用開發人員而言,不能訪問程式以外的資料是不能想象的。但是從安全角度來說不失為乙個有效的策略。不過凡事總有例外,所以賈伯斯還是為程式間通訊開放了幾個介面。ios 上的應用程式可以通過向其它應用程式傳送乙個url...

Linux應用程式設計 11 程序間通訊 訊息佇列

向訊息佇列傳送訊息 msgsnd 從訊息佇列接收訊息 msgrcv 控制訊息佇列 msgctl 訊息佇列 示例 訊息佇列是system v ipc物件的一種 訊息佇列由訊息佇列id來唯一標識 訊息佇列就是乙個訊息的列表。使用者可以在訊息佇列中新增訊息 讀取訊息等 訊息佇列可以按照型別來傳送 接收訊息...