Função SendMessage (winuser.h)
Envia a mensagem especificada para uma janela ou janela. A função SendMessage chama o procedimento de janela para a janela especificada e não retorna até que o procedimento de janela tenha processado a mensagem.
Para enviar uma mensagem e retornar imediatamente, use a função SendMessageCallback ou SendNotifyMessage . Para postar uma mensagem na fila de mensagens de um thread e retornar imediatamente, use a função PostMessage ou PostThreadMessage .
Sintaxe
LRESULT SendMessage(
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
Parâmetros
[in] hWnd
Digite: HWND
Um identificador para a janela cujo procedimento de janela receberá a mensagem. Se esse parâmetro for HWND_BROADCAST (HWND)0xffff), a mensagem será enviada para todas as janelas de nível superior do sistema, incluindo janelas desabilitadas ou invisíveis sem proprietário, janelas sobrepostas e janelas pop-up; mas a mensagem não é enviada para janelas filho.
O envio de mensagens está sujeito à UIPI. O thread de um processo pode enviar mensagens apenas para filas de mensagens de threads em processos de nível de integridade menor ou igual.
[in] Msg
Tipo: UINT
A mensagem a ser enviada.
Para obter listas das mensagens fornecidas pelo sistema, consulte Mensagens definidas pelo sistema.
[in] wParam
Tipo: WPARAM
Obter informações adicionais específicas de mensagem.
[in] lParam
Tipo: LPARAM
Obter informações adicionais específicas de mensagem.
Retornar valor
Tipo: LRESULT
O valor retornado especifica o resultado do processamento da mensagem; depende da mensagem enviada.
Comentários
Quando uma mensagem é bloqueada pela UIPI, o último erro, recuperado com GetLastError, é definido como 5 (acesso negado).
Os aplicativos que precisam se comunicar usando HWND_BROADCAST devem usar a função RegisterWindowMessage para obter uma mensagem exclusiva para comunicação entre aplicativos.
O sistema só faz marshaling para mensagens do sistema (aquelas no intervalo de 0 a (WM_USER-1)). Para enviar outras mensagens (essas >= WM_USER) para outro processo, você deve fazer marshalling personalizado.
Se a janela especificada tiver sido criada pelo thread de chamada, o procedimento de janela será chamado imediatamente como uma sub-rotina. Se a janela especificada foi criada por um thread diferente, o sistema alterna para esse thread e chama o procedimento de janela apropriado. As mensagens enviadas entre threads são processadas somente quando o thread receptor executa o código de recuperação de mensagem. O thread de envio é bloqueado até que o thread de recebimento processe a mensagem. No entanto, o thread de envio processará mensagens de entrada não enfileiradas enquanto aguarda que sua mensagem seja processada. Para evitar isso, use SendMessageTimeout com SMTO_BLOCK definido. Para obter mais informações sobre mensagens não enfileiradas, consulte Mensagens não enfileiradas.
Um aplicativo de acessibilidade pode usar SendMessage para enviar mensagens WM_APPCOMMAND para o shell para iniciar aplicativos. Não há garantia de que essa funcionalidade funcione para outros tipos de aplicativos.
Exemplos
Para obter um exemplo, consulte Exibindo entrada de teclado.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winuser.h (inclua Windows.h) |
Biblioteca | User32.lib |
DLL | User32.dll |
Conjunto de APIs | ext-ms-win-ntuser-message-l1-1-0 (introduzido em Windows 8) |
Confira também
Conceitual
Mensagens e filas de mensagens
Referência