我们正在使用已注册的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()的返回代码,它不会返回错误。
有什么想法吗?
答案 0 :(得分:1)
Ajay是对的。这是一个UAC问题。调试器作为管理员运行,发送Windows消息的应用程序未作为管理员运行。当我以管理员身份运行此应用程序时,正确接收消息。有趣的是,SendMessage()似乎没有强制执行与SendMessageTimeout()相同的安全性。