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