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 è stata elaborata.
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 nella finestra la cui procedura 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 a finestre figlio.
L'invio di messaggi è soggetto a UIPI. Il thread di un processo può inviare messaggi solo alle code di messaggi dei thread nei processi di livello di integrità minore o uguale.
[in] Msg
Tipo: UINT
Messaggio da inviare.
Per 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 dall'interfaccia utente 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 procedura 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 di ricezione esegue il codice di recupero dei messaggi. Il thread di invio viene bloccato finché il thread di ricezione elabora il messaggio. Tuttavia, il thread di invio elabora i messaggi non conqueued in ingresso durante l'attesa dell'elaborazione del messaggio. Per evitare questo problema, usare SendMessageTimeout con SMTO_BLOCK set. Per altre informazioni sui messaggi nonqueued, vedere Messaggi nonqueued.
Un'applicazione di accessibilità può usare SendMessage per inviare messaggi WM_APPCOMMAND alla shell per avviare applicazioni. Questa funzionalità non è garantita per altri tipi di applicazioni.
Esempio
Per un esempio, vedere Visualizzazione dell'input della tastiera.
Requisiti
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