none
c# 。net如何捕获内嵌在winform自定义控件内的外部应用程序的键盘事件 RRS feed

  • 问题

  • 这边步骤是这样的:

    第一步,定义了一个winform自定义控件 继承control类

    第二步,在该控件加载时,启动一个外部程序(改程序有mfc开发),并将改程序的主界面内嵌到这个控件中。用到了SetParent的win32方法。

    现在问题是我在操作这个外部程序时,现在我的自定义控中捕获改程序的键盘事件

    2017年12月28日 4:18

答案

  • Hi,

    欢迎在MSDN论坛发帖。

    你在Winform里面启动MFC程序? 这个MFC是另外一个进程吧? 如果你想在winform里面监控MFC的键盘事件,我觉得这涉及到进程之间的通信。

    我对winform的的input事件进行了分析,里面没有提供相关的接口,能监视另外一个程序的事件的。你可以参考一下。希望对你有帮助,没有像下面这两个函数,可以在winform里面对另外一个进程发送消息。

    SetForegroundWindow(calculatorHandle);
        SendKeys.SendWait("111");
    

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 水草2016 2018年1月11日 1:30
    2017年12月28日 8:09
    版主

全部回复

  • Hi,

    欢迎在MSDN论坛发帖。

    你在Winform里面启动MFC程序? 这个MFC是另外一个进程吧? 如果你想在winform里面监控MFC的键盘事件,我觉得这涉及到进程之间的通信。

    我对winform的的input事件进行了分析,里面没有提供相关的接口,能监视另外一个程序的事件的。你可以参考一下。希望对你有帮助,没有像下面这两个函数,可以在winform里面对另外一个进程发送消息。

    SetForegroundWindow(calculatorHandle);
        SendKeys.SendWait("111");
    

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 水草2016 2018年1月11日 1:30
    2017年12月28日 8:09
    版主
  • 谢谢!

    mfc确实另外的进程,该进程有另外的开发人员负责,并且是成品不能被修改。

    实际情况还要复杂,我是在wpf程序中加载winform控件(就是我定义的控件),在这个winform控件中加载mfc进程。

    现在主要问题是,等mfc加载完成后,在mfc进程上的操作(键盘 ,鼠标等)都是先mfc进程捕获,主程序上无法再响应。

    请问这边有处理方法么

    2017年12月28日 8:39
  • 没有你说的这种操作或是比较难实现。

    WPF和WinForm互操作,是微软的努力才完成,Office Word/Excel能嵌入到我们的程序中,也是因为它实现了OLE技术才可以实现,

    自己做的MFC程序要实现您的需求,技术上要按照对象连接与嵌入技术(OLE)改写,如果这样实现麻烦的话,可以用进程通信的技术实现,MFC与WinForm程序用进程通讯的方法(内存映射文件,信号量等) 通讯,MFC截获的键盘消息,转发到外面的WinForm进程,这样处理也有许多技术难点。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年12月29日 1:14