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

InSendMessage

Mensagens e filas de mensagens

PostMessage

Postthreadmessage

Referência

Registerwindowmessage

Senddlgitemmessage

SendMessageCallback

Sendmessagetimeout

Sendnotifymessage