1
有没有一种方法来钩住一个特定的Windows消息,而无需继承窗口。如何在没有子类的情况下为特定的Windows消息挂钩?
有WH_GETMESSAGE,但似乎造成性能问题。
除了这些不会影响性能的其他解决方案吗?
有没有一种方法来钩住一个特定的Windows消息,而无需继承窗口。如何在没有子类的情况下为特定的Windows消息挂钩?
有WH_GETMESSAGE,但似乎造成性能问题。
除了这些不会影响性能的其他解决方案吗?
AFAIK没有比您提到的更好的解决方案。当然,子类化窗口比钩住线程的所有消息要好。
我们认为,直到它通过窗口处理的消息通过了哪条路径:
PostMessage
/SendMessage
或暗示。GetMessage
或类似的方法),然后调用DispatchMessage
。CallWindowProc
(或类似的)。CallWindowProc
标识与窗口相关联的窗口procedore(经由GetClassLong
/GetWindowLong
)子类化 - 意味着替换目标窗口的窗口过程。这似乎是最好的变体。 使用WH_GETMESSAGE
标志安装挂钩将监视发布到消息队列的所有消息。这是不好的,因为以下原因:
DispatchMessage
)。因此,子类似乎好多了。
还有一个解决办法 - 如果您的具体消息发布(而不是发送),你可以重写消息循环,并为每一个检索到的消息,你可能会做一些前/后处理