Condividi tramite


Funzione SendMessage (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 SendMessage(
  [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 disattivate 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 Messaggi definiti dal sistema.

[in] wParam

Tipo: WPARAM

Ulteriori informazioni specifiche del messaggio.

[in] lParam

Tipo: LPARAM

Ulteriori informazioni specifiche del messaggio.

Valore restituito

Tipo: LRESULT

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

Commenti

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

Le applicazioni che devono comunicare usando 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 inclusi 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 routine della 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.

Esempio

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

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
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)

Vedi anche

Informazioni concettuali

InSendMessage

Messaggi e code di messaggi

PostMessage

PostThreadMessage

Riferimento

RegisterWindowMessage

SendDlgItemMessage

SendMessageCallback

SendMessageTimeout

SendNotifyMessage