Функция SendMessageTimeoutA (winuser.h)
Отправляет указанное сообщение в одно или несколько окон.
Синтаксис
LRESULT SendMessageTimeoutA(
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam,
[in] UINT fuFlags,
[in] UINT uTimeout,
[out, optional] PDWORD_PTR lpdwResult
);
Параметры
[in] hWnd
Тип: HWND
Дескриптор окна, процедура которого получит сообщение.
Если этот параметр HWND_BROADCAST ((HWND)0xffff), сообщение отправляется всем окнам верхнего уровня в системе, включая отключенные или невидимые неуправляемые окна. Функция не возвращается, пока каждое окно не истекло. Таким образом, общее время ожидания может быть до значения uTimeout умножено на число окон верхнего уровня.
[in] Msg
Тип: UINT
Отправленное сообщение.
Списки системных сообщений см. в System-Defined сообщениях.
[in] wParam
Тип: WPARAM
Дополнительные сведения о сообщении.
[in] lParam
Тип: LPARAM
Дополнительные сведения о сообщении.
[in] fuFlags
Тип: UINT
Поведение этой функции. Этот параметр может быть одним или несколькими из следующих значений.
[in] uTimeout
Тип: UINT
Длительность периода ожидания в миллисекундах. Если сообщение является широковещательным, каждое окно может использовать полный период ожидания. Например, если указать пять секундный период ожидания и есть три окна верхнего уровня, которые не могут обработать сообщение, может потребоваться до 15 секунд задержки.
[out, optional] lpdwResult
Тип: PDWORD_PTR
Результат обработки сообщения. Значение этого параметра зависит от указанного сообщения.
Возвращаемое значение
Тип: LRESULT
Если функция выполнена успешно, возвращаемое значение ненулевое. SendMessageTimeout не предоставляет сведения о времени ожидания отдельных окон, если используется HWND_BROADCAST.
Если функция завершается сбоем или истекает время ожидания, возвращаемое значение равно 0. Обратите внимание, что функция не всегда вызывает SetLastError при сбое. Если причина сбоя важна, вызовите SetLastError(ERROR_SUCCESS) перед вызовом SendMessageTimeout. Если функция возвращает значение 0, а GetLastError возвращает ERROR_SUCCESS, то обработайте ее как универсальный сбой.
Замечания
Функция вызывает процедуру окна для указанного окна и, если указанное окно принадлежит другому потоку, не возвращается, пока процедура окна не обработала сообщение или указанный период ожидания истек. Если окно, получающее сообщение, принадлежит той же очереди, что и текущий поток, процедура окна вызывается напрямую— значение времени ожидания игнорируется.
Эта функция считает, что поток не отвечает, если он не вызывает GetMessage или аналогичную функцию в течение пяти секунд.
Система выполняет маршаллинг только для системных сообщений (в диапазоне от 0 до (WM_USER–1)). Чтобы отправить другие сообщения (те >= WM_USER) в другой процесс, необходимо выполнить настраиваемую маршалинг.
Заметка
Заголовок winuser.h определяет SendMessageTimeout как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, который не является кодировкой нейтральным, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 2000 Профессиональный [только классические приложения] |
минимальный поддерживаемый сервер | Windows 2000 Server [только классические приложения] |
целевая платформа | Виндоус |
заголовка | winuser.h (включая Windows.h) |
библиотеки |
User32.lib |
DLL | User32.dll |
набор API | ext-ms-win-ntuser-message-l1-1-0 (представлено в Windows 8) |
См. также
концептуальные
сообщений и очередей сообщений
Справочник