我正在尝试跟踪所有当前正在运行的进程中的可见窗口。我的程序与这些窗口交互,它可以越快地检测到它们。我的目标是将可见窗口移动到屏幕上的某个位置,然后如果可能的话甚至在默认位置绘制。如果不是,我想在创建它们之后尽快移动它们。
现在我使用EnumWindows(p /从user32.dll调用)在一个循环中枚举可见窗口,在迭代之间尽可能小的延迟,我可以证明这一点。
我正在寻找一种挂钩'某事'的方法,让我可以等待“开窗”事件而不是经常进行轮询。
有没有办法实现这个目标?
答案 0 :(得分:5)
您需要SetWindowsHookEx()API函数,设置WH_SHELL挂钩。当创建新的顶层窗口时,回调会获得HSHELL_WINDOWCREATED通知。
这是一个全局钩子,你不能在C#中编写这个钩子的代码。它需要一个可以在进程中注入的DLL,CLR无法正确初始化以支持托管代码。您需要一个非托管DLL来完成工作,this project提供一个。