Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以阻止SendMessage()调用发送的消息?_C++_Winapi_Sendmessage - Fatal编程技术网

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()可以在上下文内发送消息。