RegisterWindowMessage
我有一个 shell 扩展,当另一个应用程序广播特定的窗口消息(使用 注册的自定义消息)时,它需要重新加载其配置。
我尝试了几种方法来拦截消息:
在 Windows 资源管理器的窗口上安装窗口子类回调,使用
SetWindowSubclass
. 这适用于 Window 7,但不适用于 Windows 8,因为显然DllMain
没有在主线程上调用,并且SetWindowSubclass
不适用于另一个线程。这在文档中提到:您不能使用子类化辅助函数跨线程子类化窗口
安装挂钩
CALLWNDPROC
,使用SetWindowsHookEx
. 因为我不想减慢整个系统的速度,所以我只为特定线程(资源管理器的主线程)安装了钩子。这适用于 Windows 8,但不适用于 Windows 7...我怀疑这是因为我挂错了线程,但我不确定。无论如何,这种方法似乎过于侵入性。创建一个仅消息窗口来处理消息。这根本不起作用,因为仅消息窗口不接收广播消息。
是否有可靠的方法在 shell 扩展中接收窗口消息?
窗口消息最初似乎是通知 shell 扩展的最简单方法,但如果您认为另一种机制更合适,我愿意接受建议。