Share via


Função SendMessageW (winuser.h)

Envia a mensagem especificada para uma janela ou janelas. 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 SendMessageW(
  [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 sem proprietário desabilitadas ou invisíveis, 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 somente 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 faz marshaling apenas 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 marshaling 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 tiver sido criada por um thread diferente, o sistema alternará para esse thread e chamará o procedimento de janela apropriado. As mensagens enviadas entre threads são processadas somente quando o thread de recebimento 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.

Observação

O cabeçalho winuser.h define SendMessage como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

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 no Windows 8)

Confira também

Conceitual

InSendMessage

Mensagens e filas de mensagens

PostMessage

Postthreadmessage

Referência

Registerwindowmessage

Senddlgitemmessage

SendMessageCallback

Sendmessagetimeout

Sendnotifymessage