Функция SendMessageCallbackA (winuser.h)
Отправляет указанное сообщение в окно или окна. Он вызывает процедуру окна для указанного окна и возвращается немедленно, если окно принадлежит другому потоку. После обработки сообщения система вызывает указанную функцию обратного вызова, передав результат обработки сообщений и определяемое приложением значение функции обратного вызова.
Синтаксис
BOOL SendMessageCallbackA(
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam,
[in] SENDASYNCPROC lpResultCallBack,
[in] ULONG_PTR dwData
);
Параметры
[in] hWnd
Тип: HWND
Дескриптор окна, процедура которого получит сообщение. Если этот параметр HWND_BROADCAST ((HWND)0xffff), сообщение отправляется всем окнам верхнего уровня в системе, включая отключенные или невидимые неуправляемые окна, перекрывающиеся окна и всплывающие окна; но сообщение не отправляется дочерним окнам.
[in] Msg
Тип: UINT
Отправленное сообщение.
Списки системных сообщений см. в System-Defined сообщениях.
[in] wParam
Тип: WPARAM
Дополнительные сведения о сообщении.
[in] lParam
Тип: LPARAM
Дополнительные сведения о сообщении.
[in] lpResultCallBack
Тип: SENDASYNCPROC
Указатель на функцию обратного вызова, которую система вызывает после процедуры окна обрабатывает сообщение. Дополнительные сведения см. в SendAsyncProc.
Если hWndHWND_BROADCAST ((HWND)0xffff), система вызывает функцию обратного вызова SendAsyncProc один раз для каждого окна верхнего уровня.
[in] dwData
Тип: ULONG_PTR
Определяемое приложением значение, которое необходимо отправить в функцию обратного вызова, на которую указывает параметр lpCallBack.
Возвращаемое значение
Тип: BOOL
Если функция выполнена успешно, возвращаемое значение ненулевое.
Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.
Замечания
Если целевое окно принадлежит тому же потоку, что и вызывающий объект, процедура окна вызывается синхронно, а функция обратного вызова вызывается сразу после возврата процедуры окна. Если целевое окно принадлежит другому потоку от вызывающего объекта, функция обратного вызова вызывается только в том случае, если поток, который вызывается SendMessageCallback также вызывает GetMessage, PeekMessageили WaitMessage.
Если вы отправляете сообщение в диапазоне ниже WM_USER в асинхронные функции сообщений (PostMessage, SendNotifyMessageи SendMessageCallback), его параметры сообщения не могут включать указатели. В противном случае операция завершится ошибкой. Функции будут возвращены, прежде чем получающий поток имел возможность обработать сообщение, и отправитель освободит память до его использования.
Приложения, которые должны взаимодействовать с помощью HWND_BROADCAST, должны использовать функцию RegisterWindowMessage для получения уникального сообщения для взаимодействия между приложениями.
Система выполняет маршаллинг только для системных сообщений (в диапазоне от 0 до (WM_USER–1)). Чтобы отправить другие сообщения (те >= WM_USER) в другой процесс, необходимо выполнить настраиваемую маршалинг.
Заметка
Заголовок winuser.h определяет SendMessageCallback как псевдоним, который автоматически выбирает версию 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) |
См. также
концептуальные
сообщений и очередей сообщений
Справочник