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.
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
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
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
mensagens e filas de mensagens
de referência de