2010-11-19 40 views
2

如何从应用程序中的一个中心位置捕获所有窗口的消息(winforms)。我需要在我的应用程序中有一个中心位置(例如programm.cs或Mainform),它可以对每个创建作出响应,或者对每个表单(WM_FORMSHOW 0x18)进行替换。表单由其他开发人员AddIns共同分发,但它们在默认appdomain中激活。在另一个应用程序域中的allthough激活也将是一个有趣的案例。如何集中监视发送给应用程序或winform的消息

Enviroment是.Net 3.5或4和c#。

谢谢

回答

1

您可以通过创建一个IMessageFilter,并通过Application.AddMessageFilter将它添加到应用程序陷阱窗口消息。

里面你IMessageFilter实现类,你实现PreFilterMessage,在这里你可以寻找任何你想要的 - 它传递一个Message包含C风格的窗口消息循环,会得到相同的数据。请注意,如果您愿意,还可以将IMessageFilter添加到特定的表单,就像整个应用程序消息循环一样。

+0

使用Application.AddMessageFilter不是所有的消息似乎都可用,特别是不是“WM_SHOWWINDOW 0x0018” – wolle 2010-11-23 12:00:34

+0

当重写WndProc(ref消息m)时,我有权访问WM_SHOWWINDOW 0x0018。但是,这是表单的一种方法,只有在通过此表单处理后才能访问该邮件。不幸的是,表单是插件的一部分,我没有任何访问他们的代码,以覆盖此方法 – wolle 2010-11-23 12:11:16

相关问题