我有一个有MDI主机的程序,我希望能够让它中的哪个孩子得到焦点,贝斯维尔我想为这个应用程序做一个窗口焦点更改事件。
应用程序是第三方,我没有源代码,我有主程序和MDI主机部分的窗口句柄。
我知道我不得不使用Win32 API而不确定哪些。
我正在用C#编写我的应用程序
感谢。
答案 0 :(得分:1)
我猜你正在寻找的是截取WM_SETFOCUS和WM_KILLFOCUS条消息
真正的问题是你将如何做到这一点。我想简单的方法是安装一个hook,它是一个子程序,用于监视系统中的消息流量,并在它们到达目标窗口过程之前处理某些类型的消息。你是通过使用WH_CALLWNDPROC或WH_CALLWNDPROCRET类型的钩子使用SetWindowsHookEx winapi函数来实现的。在codeproject上发布了一些示例;还有一个关于msdn:How to set a Windows hook in Visual C# .NET
您的帖子中不太清楚的是您的代码在哪里运行:与MDI窗口在同一个进程中,还是单独的应用程序\服务?如果是,您还需要将代码注入远程进程。请查看此链接,详细了解如何执行此操作:Three Ways to Inject Your Code into Another Process
希望这有帮助,尊重