Приложение не получает широковещательное сообщение, если работает под отладчиком Visual Studio 2010 - PullRequest
1 голос
/ 30 августа 2011

Мы используем зарегистрированные сообщения 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 Ответ

1 голос
/ 30 августа 2011

Аджай правильный.Это проблема UAC.Отладчик работал от имени администратора, а приложение, отправляющее сообщение Windows, не было от имени администратора.Когда я запускаю это приложение в качестве администратора, сообщение получено правильно.Интересно, что SendMessage () не обеспечивает такую ​​же безопасность, как SendMessageTimeout ().

...