2009-09-16 71 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