【问题标题】:Catching User Input in C# COM Client在 C# COM 客户端中捕获用户输入
【发布时间】:2010-11-28 20:42:00
【问题描述】:

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

我们需要捕获应用程序中的所有用户输入,我们目前正在使用 CWinApp::PreTranslateMessage() 来捕获指向 MFC 窗口的命令,但这显然不能捕获指向 C# 窗口的消息。

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

【问题讨论】:

  • 您使用什么接口来托管它?它可能支持一种标准的 OLE 接口,可以让您执行此操作...

标签: c# c++ com mfc


【解决方案1】:

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

如果这是一个标准的 WinForms 应用程序,您可以向 Application.AddMessageFilter 添加一个处理程序以在 C# 中创建一个消息挂钩。 (请参阅我的帖子 here。)鉴于表单位于 MFC 应用程序中,我不确定这是否可行。

【讨论】:

  • 我们确实控制着 C# 客户端。它有许多不同的控件,所以我必须为每个控件编写一个 WndProc 方法吗?还是所有消息都通过某个“全局”消息传递?另外,我尝试过 AddMessageFilter 路由,但有时会调用该方法,但通常不会。这是为什么呢?
  • 啊,我发现可以使用 WndProc 捕获所有消息:codeproject.com/KB/dotnet/devicevolumemonitor.aspx
  • 经过多次尝试,我无法让它工作。我想捕获这些消息,以便可以将用户重定向到登录对话框,但我最终在 MFC 代码中执行此操作,并且在注销时禁用了 C# 窗口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2012-02-01
  • 2014-04-21
相关资源
最近更新 更多