当窗口被激活并停用时,我该如何跟踪?
-
29-09-2019 - |
题
我正在做一个任务栏,我需要知道何时更改活动窗口。我不想使用计时器。我认为也许我可以拦截一条wndproc消息。
我正在使用C#
解决方案
这需要SetWindowShookex,WH_SHELL设置的钩子。回调会收到诸如HSHELL_WINDOWACTAINTAINTAID和HSHELL_WINDOWCREATED之类的通知,以便您可以知道顶级窗口发生了什么。查看SDK文章ShellProc“对于您可以收到的通知的完整列表。几乎所有这些通知都与实施自己的任务栏有关。
那是个好消息。坏消息是wh_shell是一个全球钩子。它需要一个可以注入另一个过程的DLL。问题是,您不能在托管代码中写入DLL。将托管代码注入不受管理的过程是不可能的。
再次回到好消息,有人解决了这个问题,并创建了一个不受管理的DLL,可以注射,并且可以与托管代码互动。该项目 在这儿. 。不知道它有多好。我怀疑这可能不是完全证明的。
不隶属于 StackOverflow