Condividi tramite


Funzione SendMessageA (winuser.h)

Invia il messaggio specificato a una finestra o a una finestra. La funzione SendMessage chiama la routine della finestra per la finestra specificata e non restituisce finché la routine della finestra non ha elaborato il messaggio.

Per inviare un messaggio e restituire immediatamente, usare la funzione SendMessageCallback o SendNotifyMessage. Per pubblicare un messaggio nella coda di messaggi di un thread e restituire immediatamente, usare la funzione PostMessage o PostThreadMessage.

Sintassi

LRESULT SendMessageA(
  [in] HWND   hWnd,
  [in] UINT   Msg,
  [in] WPARAM wParam,
  [in] LPARAM lParam
);

Parametri

[in] hWnd

Tipo: HWND

Handle per la finestra la cui routine della finestra riceverà il messaggio. Se questo parametro è HWND_BROADCAST ((HWND)0xffff), il messaggio viene inviato a tutte le finestre di primo livello del sistema, incluse finestre disabilitate o invisibili, finestre sovrapposte e finestre popup; ma il messaggio non viene inviato alle finestre figlio.

L'invio di messaggi è soggetto a UIPI. Il thread di un processo può inviare messaggi solo a code di messaggi di thread in processi di livello di integrità minore o uguale.

[in] Msg

Tipo: UINT

Messaggio da inviare.

Per gli elenchi dei messaggi forniti dal sistema, vedere System-Defined Messaggi.

[in] wParam

Tipo: WPARAM

Informazioni aggiuntive specifiche del messaggio.

[in] lParam

Tipo: LPARAM

Informazioni aggiuntive specifiche del messaggio.

Valore restituito

Tipo: LRESULT

Il valore restituito specifica il risultato dell'elaborazione del messaggio; dipende dal messaggio inviato.

Osservazioni

Quando un messaggio viene bloccato da UIPI l'ultimo errore, recuperato con GetLastError, è impostato su 5 (accesso negato).

Le applicazioni che devono comunicare tramite HWND_BROADCAST devono usare la funzione RegisterWindowMessage per ottenere un messaggio univoco per la comunicazione tra applicazioni.

Il sistema esegue solo il marshalling per i messaggi di sistema (quelli compresi nell'intervallo da 0 a (WM_USER-1)). Per inviare altri messaggi (quelli >= WM_USER) a un altro processo, è necessario eseguire il marshalling personalizzato.

Se la finestra specificata è stata creata dal thread chiamante, la routine della finestra viene chiamata immediatamente come subroutine. Se la finestra specificata è stata creata da un thread diverso, il sistema passa a tale thread e chiama la procedura di finestra appropriata. I messaggi inviati tra thread vengono elaborati solo quando il thread ricevente esegue il codice di recupero dei messaggi. Il thread di invio viene bloccato fino a quando il thread ricevente non elabora il messaggio. Tuttavia, il thread di invio elabora i messaggi non accodati in arrivo durante l'attesa dell'elaborazione del messaggio. Per evitare questo problema, usare SendMessageTimeout con SMTO_BLOCK impostato. Per altre informazioni sui messaggi non accodati, vedere Messaggi non accodati.

Un'applicazione di accessibilità può usare SendMessage per inviare messaggi WM_APPCOMMAND alla shell per avviare le applicazioni. Questa funzionalità non è garantita per altri tipi di applicazioni.

Esempi

Per un esempio, vedere Visualizzazione dell'input da tastiera.

Nota

L'intestazione winuser.h definisce SendMessage come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows 2000 Professional [solo app desktop]
server minimo supportato Windows 2000 Server [solo app desktop]
piattaforma di destinazione Finestre
intestazione winuser.h (include Windows.h)
libreria User32.lib
dll User32.dll
set di API ext-ms-win-ntuser-message-l1-1-0 (introdotto in Windows 8)

Vedere anche

concettuale

InSendMessage

messaggi e code di messaggi

PostMessage

PostThreadMessage

riferimento

RegisterWindowMessage

SendDlgItemMessage

SendMessageCallback

SendMessageTimeout

SendNotifyMessage