每次打开应用程序窗口(其他进程)时如何执行某些代码?

Inv*_*ion 3 c# windows hook winapi

我试图从所有当前正在运行的进程中跟踪可见窗口.我的程序与这些窗口交互,它可以越快地检测到它们.我的目标是将可见窗口移动到屏幕上的某个位置,然后如果可能的话甚至在默认位置绘制.如果不是,我想在创建它们之后尽快移动它们.

现在,我使用EnumWindows(p /从user32.dll调用)在一个循环中枚举可见窗口,在迭代之间尽可能小的延迟,因为我可以证明这一点.

我正在寻找一种方法来挂钩'某事',这将允许我等待"窗口开放"事件开火而不是不断轮询.

有没有办法实现这个目标?

Han*_*ant 5

您需要SetWindowsHookEx()API函数,设置WH_SHELL挂钩.当创建新的顶层窗口时,回调将获得HSHELL_WINDOWCREATED通知.

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