2010-01-16 52 views
1

我有一个程序,有一个MDI主机,我想能够得到哪些孩子刚刚获得焦点,低音我想做一个窗口焦点更改事件这个应用程序。找到哪个MDI孩子刚刚得到重点Win32 API

该应用程序是第三方,我没有源代码,我有主程序和MDI主机部分的窗口句柄。

我知道我将不得不使用Win32 API只是不确定哪些。

我正在C写我的应用程序#

谢谢。

+0

你应该在白天问这个问题。每个知道这个答案的人都睡着了。被孩子们磨掉了。或者只是普通的重力。 – 2010-01-16 04:40:06

+0

那是我住在澳大利亚的日光:P,但我们会看到。我相信有人会看到它。 – 2010-01-16 05:37:40

回答

1

我猜你在找什么是拦截WM_SETFOCUSWM_KILLFOCUS消息

真正的问题是你怎么做到这一点。我想安装方法是安装一个hook这是一个子例程,用于监视系统中的消息流量并在达到目标窗口过程之前处理某些类型的消息。您正在通过使用SetWindowsHookEx winapi函数与WH_CALLWNDPROC或WH_CALLWNDPROCRET类型的钩子来完成此操作。在codeproject上发布了一些示例; msdn上还有一个:How to set a Windows hook in Visual C# .NET

在你的文章中不太清楚的地方是你的代码在哪里运行:在与MDI窗口相同的进程中,还是它是一个单独的应用程序\服务?如果是这样,你还需要将代码注入到远程进程中。检查你如何能做到这此链接的详细信息:Three Ways to Inject Your Code into Another Process

希望这会有所帮助,至于

+0

由于他有句柄,他可以从'System.Windows.Forms.NativeWindow'继承并调用'AssignHandle(IntPtr)'。然后他可以使用'WndProc'来听取特定窗口的消息。 – 2010-01-16 23:17:10

+0

同意,NativeWindow也应该工作;我仍然留在一个钩子,因为它恕我直言少麻烦分配和它适用于整个应用程序;除了不知道他的窗口句柄是否属于他的代码运行的相同进程 – 2010-01-16 23:53:22

+0

我的插件在主应用程序中运行在它自己的appdomian中,会导致问题吗? – 2010-01-17 06:34:26

相关问题