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
Riferimento