Функция SendMessage


Функция SendMessage отправляет заданное сообщение окну или окнам. Функция вызывает оконную процедуру для заданного окна и не возвращает значение до тех пор, пока оконная процедура не обработает сообщение. 

Чтобы отправить сообщение и возвратить немедленно значение, используйте функцию SendMessageCallback или SendNotifyMessage. Чтобы поместить сообщение в очередь сообщений потока и возвратить  немедленно значение, используйте функцию PostMessage или PostThreadMessage.

Синтаксис

LRESULT SendMessage(
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);

Параметры

hWnd

[in] Дескриптор окна, оконная процедура которого примет сообщение. Если этот параметр - HWND_BROADCAST, сообщение отправляется всем окнам верхнего уровня в системе, включая заблокированные или невидимые, не имеющие владельца, перекрывающие и выскакивающие окна; но сообщение не отправляется дочерним окнам.

Msg

[in] Определяет сообщение, которое будет отправлено.

wParam

[in] Определяет дополнительную конкретизирующую сообщение информацию.

lParam

[in] Определяет дополнительную конкретизирующую сообщение информацию.

Возвращаемые значения

Величина возвращаемого значения определяет результат обработки сообщения; он зависит от отправленного сообщения.

Замечания

Прикладные программы, которые связываются, применяя флажок HWND_BROADCAST, должны использовать функцию RegisterWindowMessage, чтобы получить уникальное сообщение для связи между приложениями.

Система  совершает сортировку только системных сообщений (которые в диапазоне от 0 до WM_USER). Чтобы отправлять другие сообщения (которые значением выше WM_USER) другому процессу, Вы должны сделать специальную сортировку (маршалинг).

Если заданное окно было создано вызывающим потоком, оконная процедура вызывается немедленно как подпрограмма. Если заданное окно было создано другим потоком, система переключается на этот поток и вызывает соответствующую оконную процедуру. Сообщения, отправляемые между потоками обрабатываются, только тогда, когда принимающий поток выполняет изъятие кода сообщения. Отправляющий поток блокируется до тех пор, пока принимающий поток не обработает сообщение. Однако, отправляющийся поток будет обрабатывать поступающие асинхронные (внеочередные) сообщения пока ожидает обработку своего сообщения. Чтобы воспрепятствовать этому, используйте функцию  SendMessageTimeout с установленным флажком SMTO_BLOCK . Для получения дополнительной информации о внеочередных сообщениях, см. Не поставленные в очередь (асинхронные) сообщения.

Windows 95/98/Me: SendMessageW поддерживается  подпрограммой Microsoft Layer for Unicode (MSLU). Чтобы использовать подпрограмму, Вы должны добавить некоторые файлы к вашему приложению, как это определено в Microsoft Layer for Unicode для систем Windows 95/98/Me.

Пример

Пример смотри в статье Обработка ввода данных с клавиатуры.

Смотри также

Обзор Сообщения и очереди сообщений, InSendMessage, PostMessage, PostThreadMessage, RegisterWindowMessage, SendDlgItemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessage

Размещение и совместимость SendMessage

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да версии 3.1 и выше

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

User32.lib

Заголовочный файл

 

- объявлено в

Winuser.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz