Funzione PeekMessageA (winuser.h)
Invia messaggi non in arrivo, controlla la coda del messaggio di thread per un messaggio inviato e recupera il messaggio (se presente).
Sintassi
BOOL PeekMessageA(
[out] LPMSG lpMsg,
[in, optional] HWND hWnd,
[in] UINT wMsgFilterMin,
[in] UINT wMsgFilterMax,
[in] UINT wRemoveMsg
);
Parametri
[out] lpMsg
Tipo: LPMSG
Puntatore a una struttura MSG che riceve le informazioni sui messaggi.
[in, optional] hWnd
Tipo: HWND
Handle alla finestra i cui messaggi devono essere recuperati. La finestra deve appartenere al thread corrente.
Se hWnd è NULL, PeekMessage recupera i messaggi per qualsiasi finestra appartenente al thread corrente e tutti i messaggi nella coda dei messaggi del thread corrente il cui valore hwnd è NULL (vedere la struttura MSG ). Pertanto, se hWnd è NULL, vengono elaborati sia i messaggi di finestra che i messaggi di thread.
Se hWnd è -1, PeekMessage recupera solo messaggi nella coda dei messaggi del thread corrente il cui valore hwnd è NULL, ovvero i messaggi di thread pubblicati da PostMessage (quando il parametro hWnd è NULL) o PostThreadMessage.
[in] wMsgFilterMin
Tipo: UINT
Valore del primo messaggio nell'intervallo di messaggi da esaminare. Usare WM_KEYFIRST (0x0100 ) per specificare il primo messaggio da tastiera o WM_MOUSEFIRST (0x0200 ) per specificare il primo messaggio del mouse.
Se wMsgFilterMin e wMsgFilterMax sono entrambi zero, PeekMessage restituisce tutti i messaggi disponibili, ovvero non viene eseguito alcun filtro dell'intervallo.
[in] wMsgFilterMax
Tipo: UINT
Valore dell'ultimo messaggio nell'intervallo di messaggi da esaminare. Usare WM_KEYLAST per specificare l'ultimo messaggio da tastiera o WM_MOUSELAST per specificare l'ultimo messaggio del mouse.
Se wMsgFilterMin e wMsgFilterMax sono entrambi zero, PeekMessage restituisce tutti i messaggi disponibili, ovvero non viene eseguito alcun filtro dell'intervallo.
[in] wRemoveMsg
Tipo: UINT
Specifica la modalità di gestione dei messaggi. Questo parametro può essere uno o più dei valori seguenti.
Valore | Significato |
---|---|
|
I messaggi non vengono rimossi dalla coda dopo l'elaborazione da PeekMessage. |
|
I messaggi vengono rimossi dalla coda dopo l'elaborazione da PeekMessage. |
|
Impedisce al sistema di rilasciare qualsiasi thread in attesa che il chiamante vada inattivo (vedere WaitForInputIdle).
Combinare questo valore con PM_NOREMOVE o PM_REMOVE. |
Per impostazione predefinita, tutti i tipi di messaggio vengono elaborati. Per specificare che è necessario elaborare solo un determinato messaggio, specificare uno o più dei valori seguenti.
Valore restituito
Tipo: BOOL
Se è disponibile un messaggio, il valore restituito è diverso da zero.
Se non sono disponibili messaggi, il valore restituito è zero.
Commenti
PeekMessage recupera i messaggi associati alla finestra identificata dal parametro hWnd o da uno dei relativi elementi figlio, come specificato dalla funzione IsChild e all'interno dell'intervallo di valori di messaggio specificati dai parametri wMsgFilterMin e wMsgFilterMax. Si noti che un'applicazione può usare solo la parola bassa nei parametri wMsgFilterMin e wMsgFilterMax; la parola alta è riservata al sistema.
Si noti che PeekMessage recupera sempre WM_QUIT messaggi, indipendentemente dai valori specificati per wMsgFilterMin e wMsgFilterMax.
Durante questa chiamata, il sistema invia (DispatchMessage) in sospeso, messaggi nonqueued, ovvero messaggi inviati a finestre di proprietà del thread chiamante usando la funzione SendMessage, SendMessageCallback, SendMessageTimeout o SendNotifyMessageMessage . Viene quindi recuperato il primo messaggio in coda corrispondente al filtro specificato. Il sistema può anche elaborare eventi interni. Se non viene specificato alcun filtro, i messaggi vengono elaborati nell'ordine seguente:
- Messaggi inviati
- Messaggi pubblicati
- Messaggi di input (hardware) e eventi interni del sistema
- Messaggi inviati (di nuovo)
- WM_PAINT messaggi
- WM_TIMER messaggi
La funzione PeekMessage normalmente non rimuove WM_PAINT messaggi dalla coda. WM_PAINT messaggi rimangono nella coda finché non vengono elaborati. Tuttavia, se un messaggio di WM_PAINT ha un'area di aggiornamento NULL , PeekMessage lo rimuove dalla coda.
Se una finestra di primo livello smette di rispondere ai messaggi per più di diversi secondi, il sistema considera la finestra non risponde e lo sostituisce con una finestra fantasma con lo stesso ordine z, posizione, dimensioni e attributi visivi. Ciò consente all'utente di spostarlo, ridimensionarlo o anche chiudere l'applicazione. Tuttavia, queste sono le uniche azioni disponibili perché l'applicazione non risponde. Quando viene eseguito il debug di un'applicazione, il sistema non genera una finestra fantasma.
Virtualizzazione DPI
Questa API non partecipa alla virtualizzazione DPI. L'output è in modalità della finestra di destinazione del messaggio. Il thread chiamante non viene preso in considerazione.Esempio
Per un esempio, vedere Analisi di una coda di messaggi.
Nota
L'intestazione winuser.h definisce PeekMessage 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 di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.
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
Altre risorse
Riferimento