Compartilhar via


Função PostMessageW (winuser.h)

Coloca (postagens) uma mensagem na fila de mensagens associada ao thread que criou a janela especificada e retorna sem esperar que o thread processe a mensagem.

Para postar uma mensagem na fila de mensagens associada a um thread, use a função PostThreadMessage.

Sintaxe

BOOL PostMessageW(
  [in, optional] HWND   hWnd,
  [in]           UINT   Msg,
  [in]           WPARAM wParam,
  [in]           LPARAM lParam
);

Parâmetros

[in, optional] hWnd

Tipo: HWND

Um identificador para a janela cujo procedimento de janela é receber a mensagem. Os valores a seguir têm significados especiais.

Valor Significado
HWND_BROADCAST
((HWND)0xffff)
A mensagem é postada em todas as janelas de nível superior do sistema, incluindo janelas não semeadas desabilitadas ou invisíveis, janelas sobrepostas e janelas pop-up. A mensagem não é postada em janelas filho.
ZERO
A função se comporta como uma chamada para PostThreadMessage com o parâmetro dwThreadId definido como o identificador do thread atual.
 

A partir do Windows Vista, a postagem de mensagens está sujeita à UIPI. O thread de um processo pode postar mensagens apenas em filas de mensagens de threads em processos de nível de integridade menor ou igual.

[in] Msg

Tipo: UINT

A mensagem a ser postada.

Para obter listas das mensagens fornecidas pelo sistema, consulte System-Defined Mensagens.

[in] wParam

Tipo: WPARAM

Informações adicionais específicas da mensagem.

[in] lParam

Tipo: LPARAM

Informações adicionais específicas da mensagem.

Valor de retorno

Tipo: BOOL

Se a função for bem-sucedida, o valor retornado não será zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Observações

Quando uma mensagem é bloqueada pela UIPI, o último erro, recuperado com GetLastError, é definido como 5 (acesso negado).

As mensagens em uma fila de mensagens são recuperadas por chamadas para a função GetMessage ou PeekMessage.

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 marshalling para mensagens do sistema (aquelas no intervalo de 0 a (WM_USER-1)). Para enviar outras mensagens (aquelas >= WM_USER) para outro processo, você deve fazer o marshalling personalizado.

Se você enviar uma mensagem no intervalo abaixo WM_USER para as funções de mensagem assíncronas (PostMessage, SendNotifyMessage e SendMessageCallback), seus parâmetros de mensagem não poderão incluir ponteiros. Caso contrário, a operação falhará. As funções retornarão antes que o thread de recebimento tenha tido a chance de processar a mensagem e o remetente liberará a memória antes de ser usada.

Não poste a mensagem WM_QUIT usando postMessage; use a função PostQuitMessage.

Um aplicativo de acessibilidade pode usar postMessage para postar mensagens WM_APPCOMMAND no shell para iniciar aplicativos. Essa funcionalidade não é garantida para funcionar para outros tipos de aplicativos.

Há um limite de 10.000 mensagens postadas por fila de mensagens. Esse limite deve ser suficientemente grande. Se o aplicativo exceder o limite, ele deverá ser redesenhado para evitar o consumo de tantos recursos do sistema. Para ajustar esse limite, modifique a seguinte chave do Registro.

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows NT
            CurrentVersion
               Windows
                  USERPostMessageLimit

Se a função falhar, chame GetLastError para obter informações de erro estendidas. GetLastError retorna ERROR_NOT_ENOUGH_QUOTA quando o limite é atingido.

O valor mínimo aceitável é 4000.

Exemplos

O exemplo a seguir mostra como postar uma mensagem de janela privada usando a função PostMessage. Suponha que você tenha definido uma mensagem de janela privada chamada WM_COMPLETE:

#define        WM_COMPLETE     (WM_USER + 0)

Você pode postar uma mensagem na fila de mensagens associada ao thread que criou a janela especificada, conforme mostrado abaixo:

 WaitForSingleObject (pparams->hEvent, INFINITE) ;
 lTime = GetCurrentTime () ;
 PostMessage (pparams->hwnd, WM_COMPLETE, 0, lTime);

Para obter mais exemplos, consulte Iniciando um link de dados.

Nota

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

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 2000 Professional [somente aplicativos da área de trabalho]
servidor com suporte mínimo Windows 2000 Server [somente aplicativos da área de trabalho]
da Plataforma de Destino Windows
cabeçalho winuser.h (inclua Windows.h)
biblioteca User32.lib
de DLL User32.dll
conjunto de API ext-ms-win-ntuser-message-l1-1-0 (introduzido no Windows 8)

Consulte também

Conceitual

GetMessage

mensagens e filas de mensagens

PeekMessage

PostQuitMessage

PostThreadMessage

de referência de

RegisterWindowMessage

SendMessageCallback

SendNotifyMessage