如果在Visual Studio 2010调试器下运行,应用程序不会收到广播消息

时间:2011-08-29 23:52:27

标签: visual-studio-2010 visual-c++ visual-studio-debugging

我们正在使用已注册的Windows消息在我们的应用程序实例之间进行通信。我们使用以下电话发送消息:

 DWORD dwResult;
 ::SendMessageTimeout(HWND_BROADCAST, wmRegisteredMessage, 0, 0, 
   SMTO_ABORTIFHUNG | SMTO_NORMAL,
   200,
   &dwResult);

只要应用程序未在Visual Studio 2010调试器下运行,此机制就可以正常工作。如果是,则不会调用消息处理程序。此外,Spy ++显示应用程序未被发送消息。

如果应用程序正在运行,然后将调试器附加到进程,则会按预期收到消息。

如果代码更改为:

SendMessage(HWND_BROADCAST, wmRegisteredMessage, 0, 0);

一切都按预期工作。

我已经尝试了不同的参数SendMessageTimeout()但我仍然看到相同的行为。我添加了代码来检查SendMessageTimeout()的返回代码,它不会返回错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Ajay是对的。这是一个UAC问题。调试器作为管理员运行,发送Windows消息的应用程序未作为管理员运行。当我以管理员身份运行此应用程序时,正确接收消息。有趣的是,SendMessage()似乎没有强制执行与SendMessageTimeout()相同的安全性。