GetWindowText
- это просто тонкая оболочка для SendMessage(WM_GETTEXT)
.
Сообщения, отправленные окну, всегда обрабатываются в потоке, который создал окно (окна имеют «сродство к потоку»). Отправленные сообщения не проходят через DispatchMessage
, скорее GetMessage
(или PeekMessage
или MsgWaitForMultipleObjects
) будут вызывать оконную процедуру напрямую для сообщений, отправленных из другого потока. Если сообщение отправлено из того же потока, SendMessage
вызовет оконную процедуру.
Документация SendMessage
гласит:
Функция SendMessage
вызывает оконную процедуру для указанного окна и не возвращается, пока оконная процедура не обработает сообщение.
И документация GetMessage
гласит :
Извлекает сообщение из очереди сообщений вызывающего потока. Функция отправляет входящие отправленные сообщения, пока опубликованное сообщение не станет доступным для извлечения.
Из PeekMessage
документов :
Отправляет входящие отправленные сообщения, проверяет очередь сообщений на наличие опубликованных сообщений и извлекает сообщение (если оно существует).
Поведение отправки сообщений ранее было выделено на Отличный блог Раймонда Чена, The Old New Thing , на который все разработчики Win32 должны подписаться:
Если вы используете любую из вышеперечисленных функций типа send для отправки сообщения в окно, которое принадлежит потоку-отправителю, вызов выполняется синхронно.
Напомним, что SendMessage
доставляет сообщение непосредственно в оконную процедуру; насос сообщений никогда его не видит.
И, конечно же, в StackOverflow можно найти похожие вопросы: