我正在做一个任务栏,我需要知道何时更改活动窗口。我不想使用计时器。我认为也许我可以拦截一条wndproc消息。

我正在使用C#

有帮助吗?

解决方案

这需要SetWindowShookex,WH_SHELL设置的钩子。回调会收到诸如HSHELL_WINDOWACTAINTAINTAID和HSHELL_WINDOWCREATED之类的通知,以便您可以知道顶级窗口发生了什么。查看SDK文章ShellProc“对于您可以收到的通知的完整列表。几乎所有这些通知都与实施自己的任务栏有关。

那是个好消息。坏消息是wh_shell是一个全球钩子。它需要一个可以注入另一个过程的DLL。问题是,您不能在托管代码中写入DLL。将托管代码注入不受管理的过程是不可能的。

再次回到好消息,有人解决了这个问题,并创建了一个不受管理的DLL,可以注射,并且可以与托管代码互动。该项目 在这儿. 。不知道它有多好。我怀疑这可能不是完全证明的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top