Win32 API SendMessage с HWND_BROADCAST - PullRequest
       25

Win32 API SendMessage с HWND_BROADCAST

1 голос
/ 08 февраля 2020

Я пытаюсь отправить сообщение, используя myresult = SendMessage (hWnd, ...). Насколько я понимаю, SendMessage отправляет сообщение Windows указанному получателю hWnd; WndPro c цели возвращает длинное значение; это значение возвращается SendMessage (myresult). Я прав до сих пор?

Хорошо, теперь, если SendMessage hWnd - HWND_BROADCAST, он отправляется всем верхним уровням windows. Итак, какое окно WndPro c определяет возвращаемое значение?

ОБНОВЛЕНИЕ: 02-10-20
Просто чтобы выяснить, что я надеялся сделать ...
Мой Приложение состоит из небольшой совокупности windows приложений, которые должны общаться через Windows Сообщения. Мой план состоял в том, чтобы передать зарегистрированное сообщение, например, WM_IDENTIFYMYAPP, и идентифицировать всех родных братьев по ответам. Этого не будет по причине, объясненной в ответе Адрианом Молем.

1 Ответ

2 голосов
/ 08 февраля 2020

Возвращаемое значение будет то, что из того, что является последним из получения windows, для обработки сообщения и возврата; в каком окне это трудно (если не невозможно) определить отправляющей заявке.

Обычно, когда вы хотите использовать HWND_BROADCAST для уведомления нескольких windows (или для связи с окном, к которому у вас нет дескриптора), вы должны использовать (асинхронный) PostMessage функция (которая возвращает сразу), а не SendMessage (которая ожидает всех получателей windows для обработки сообщения).

Использование (синхронно) SendMessage с HWND_BROADCAST в качестве цели может вызвать много нежелательные эффекты, как обсуждено здесь на Переполнении стека . Но обратите внимание, есть некоторые сообщения, которые не могут быть отправлены асинхронно ( через PostMessage) - WM_COPYDATA - это то, что я знаю.

...