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

Visual studio 2010 如果在Visual Studio 2010调试器下运行,则应用程序不会收到广播消息,visual-studio-2010,visual-c++,visual-studio-debugging,Visual Studio 2010,Visual C++,Visual Studio Debugging,我们正在使用注册的Windows消息在应用程序实例之间进行通信。我们使用以下呼叫发送消息: DWORD dwResult; ::SendMessageTimeout(HWND_BROADCAST, wmRegisteredMessage, 0, 0, SMTO_ABORTIFHUNG | SMTO_NORMAL, 200, &dwResult); 只要应用程序未在VisualStudio2010调试器下运行,此机制就可以正常工作。如果是,则不会调用消息处理程序。

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

 DWORD dwResult;
 ::SendMessageTimeout(HWND_BROADCAST, wmRegisteredMessage, 0, 0, 
   SMTO_ABORTIFHUNG | SMTO_NORMAL,
   200,
   &dwResult);
只要应用程序未在VisualStudio2010调试器下运行,此机制就可以正常工作。如果是,则不会调用消息处理程序。此外,Spy++显示应用程序没有被发送消息

如果应用程序正在运行,并且调试器随后连接到进程,则会按预期接收消息

如果代码更改为:

SendMessage(HWND_BROADCAST, wmRegisteredMessage, 0, 0);
一切正常

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


有什么想法吗

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

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

检查图片中是否没有UAC/UIPI。使用/不使用管理员权限运行调试器。检查图片中是否没有UAC/UIPI。使用/不使用管理员权限运行调试器。