2009-09-16 59 views
0

使用VS2003(.Net 1.1)我们有一个MFC MDI应用程序,它生成一个C#窗口作为COM客户端。在C#COM客户端捕捉用户输入

我们需要捕获应用程序内的所有用户输入,并且我们当前正在使用CWinApp :: PreTranslateMessage()来捕获前往MFC窗口的命令,但是这显然没有捕获到C#窗口的消息。

在C#客户端捕获所有用户输入的最佳方式是什么?

+0

你用什么接口来托管它?它可以支持标准的OLE接口之一,它可以让你做到这一点...... – 2009-09-16 16:11:43

回答

0

你是否控制了C#窗口?如果是这样,C#表单有一个WndProc方法,您可以覆盖并过滤那里的消息。

如果这是一个标准的WinForms应用程序,您可以添加一个处理程序到Application.AddMessageFilter在C#中创建消息钩子。 (请参阅我的文章here。)我不确定这将工作,因为表单是在MFC应用程序中。

+0

我们确实控制着C#客户端。 它有许多不同的控件,所以我必须为每个控件编写一个WndProc方法?或者是否所有的消息都通过某个“全局”的消息? 此外,我试过AddMessageFilter路由,但有时调用该方法,但往往不是。为什么是这样? – 2009-09-17 09:23:44

+0

啊,我看到有可能使用WndProc捕获所有消息: http://www.codeproject.com/KB/dotnet/devicevolumemonitor.aspx – 2009-09-17 10:12:43

+0

经过多次尝试后,我无法使其工作。我想捕获这些消息,以便我可以将用户重定向到登录对话框,但是我最终在MFC代码中执行了此操作,并在注销时仅禁用了C#窗口。 – 2009-09-23 12:56:18