2011-09-22 30 views
0

我想寫一個應用程序,它將收到的每個消息都傳遞給另一個窗口。例如,我有一個應用程序,用戶可以按下某些按鍵,將鼠標移到該按鈕上等等,我希望所有這些消息都傳遞給MS Paint。將消息傳遞到另一個窗口

我該怎麼做?有任何想法嗎?據我所知,將按鍵發送到另一個窗口可能會有問題,所以請諮詢。

編輯

好吧,也許我會給你什麼,我尋找更多的說明。

我的應用程序在窗體上顯示另一個應用程序的窗口。現在我想使用發送到我的應用程序窗體的消息來控制另一個窗口(如鍵盤鍵,鼠標移動等)。

我一直在考慮將我的表單收到的所有消息傳遞給應用程序的窗口,我喜歡將其嵌入到自己的窗口中。 '嵌入'我的意思是讓應用程序窗口顯示在我的表單上。

也許還有我的問題的另一種解決方案。請指教。

謝謝你的時間。

+1

鼠標和鍵盤消息遠離「每條消息」。 –

+0

我這麼認爲,這就是爲什麼我想聽聽你的想法。 :) – Pateman

+0

這必須是一些具體的窗口,或任何背後的形式? – Torbins

回答

4

某些消息(即輸入消息)通過消息隊列到達,其餘消息直接傳遞到收件人窗口。因此,您要求做的事情需要您執行以下所有操作:

  1. 實施頂級消息循環,從隊列中檢索消息並將消息發送到其他應用程序。
  2. 重新實現所有模態窗口循環以傳遞所有消息。
  3. 將您的流程中所有窗口的窗口過程替換爲將所有消息傳遞到另一個應用程序的窗口過程。
  4. 尋找其他我沒有涉及到的郵件的機會。

我無法想象這真的會成爲您的問題的解決方案,無論這個問題是什麼。

+0

我喜歡第一個想法,你能詳細說明一下嗎?正常的消息循環和頂級消息循環之間是否有區別? – Pateman

+0

@Pateman頂級消息循環我指的是由Delphi應用程序中的Application.Run調用的循環。其他消息循環在顯示模態窗口時運行。我相信你知道排隊消息和非排隊消息之間的區別?只能從消息循環中訪問排隊的消息。未排隊的消息到達每個窗口的窗口過程。 –

+1

@Pateman:戴維的名單不是建議替代品(一個「你喜歡的選擇」)。你必須做所有*這些事情(至少步驟#1-3),並調查#4。 –

1

轉發郵件絕對是可能和容易的,但它可能不會做你期待的。看看here

1

重寫表單的DefaultHandler()並將其獲取的每條消息發佈到其他表單。如果表單中有任何明確的消息處理程序,或者甚至是某些控件,則可能在DefaultHandler()中看不到這些消息。

相關問題