2011-09-22 29 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()中看不到这些消息。

相关问题