C++ 是否可以阻止SendMessage()调用发送的消息?
我怀疑有一段代码正在通过C++ 是否可以阻止SendMessage()调用发送的消息?,c++,winapi,sendmessage,C++,Winapi,Sendmessage,我怀疑有一段代码正在通过SendMessage()函数发送消息。 出于调试目的,我希望此代码块中使用SendMessage()发送的任何消息都不被发送,就像blockSignals()在Qt中工作一样 有什么方法可以做到这一点吗?您可以使用top程序中的next: #define DEBUG #ifndef DEBUG SendMessage(); #endif 或者如果释放 #define NDEBUG 接下来,在您编程的文本中: #define DEBUG
SendMessage()
函数发送消息。出于调试目的,我希望此代码块中使用
SendMessage()
发送的任何消息都不被发送,就像blockSignals()
在Qt中工作一样
有什么方法可以做到这一点吗?您可以使用top程序中的next:
#define DEBUG
#ifndef DEBUG
SendMessage();
#endif
或者如果释放
#define NDEBUG
接下来,在您编程的文本中:
#define DEBUG
#ifndef DEBUG
SendMessage();
#endif
如果无法注释掉SendMessage()调用,并且只想查看某些消息的内容,则可以使用Spy++(如果使用Visual Studio),否则可以使用SetWindowsHookEx()安装钩子。如果您可以访问消息循环,您可以在那里放置一些过滤器。为什么不注释掉SendMessage()调用?我所说的代码块是“大”的,这意味着它使用的对象使用其他对象等。。。在非常深的层次上。因此,我看不到正在进行SendMessage()调用。这就是为什么我希望能够在定义的范围内阻止它们。您可以在进入该代码块时挂起
SendMessage
函数,并让替换函数将消息放在地板上。或者,您可以在消息循环中添加一个“忽略”标志。如果要禁用消息处理,请启用“忽略”标志,然后在完成后重新启用它。风险在于,您也将无法获取系统消息等。@JimMischel:如果目标窗口属于调用SendMessage()
的同一线程,则消息将根本不会通过消息循环。这是有明确记录的。@RemyLebeau:谢谢你的提醒。我已经很久没有在那个级别工作了。那么,我想知道是否有可能钩住SendMessage
。这是可能的,但它是否实用完全是另一个问题。上下文中发送的消息不是由消息循环发送的。系统直接调用上下文内发送消息的窗口过程。不过,SetWindowsHookEx()可以在上下文内发送消息。