2010-01-27 67 views
3

我想跟踪所有当前正在运行的进程的可见窗口。我的程序与这些窗口进行交互,并且可以更快地检测到它们。我的目标是将可见窗口移动到屏幕上的某个位置,然后它们甚至可以在默认位置绘制。如果不是,我想在创建后尽快移动它们。如何在应用程序窗口(其他进程)打开时执行一些代码?

现在我通过使用EnumWindows(p /从user32.dll调用)的visble窗口在循环中枚举,在迭代之间有一个很小的延迟,我可以证明。

我正在寻找一种方法来钩入'东西',这将允许我等待'开放窗口'事件而不是不断轮询。

有没有什么方法可以实现这个目标?

回答

5

您需要SetWindowsHookEx()API函数,设置WH_SHELL挂钩。当一个新的顶层窗口被创建时,回调会得到一个HSHELL_WINDOWCREATED通知。

这是一个全局钩子,你不能在C#中编写这个钩子的代码。它需要一个可以注入进程的DLL,CLR无法正确初始化以支持托管代码。你需要一个非托管DLL来完成工作,this project提供一个。

相关问题