Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Descrzione
Funzione di callback definita dall'applicazione o definita dalla libreria usata con la funzione SetWindowsHookExA/SetWindowsHookExW . Il sistema chiama questa funzione ogni volta che un nuovo evento di input del mouse sta per essere inserito in una coda di input del thread.
Il tipo HOOKPROC definisce un puntatore a questa funzione di callback. LowLevelMouseProc è un segnaposto per il nome di funzione definito dall'applicazione o definito dalla libreria.
LowLevelMouseProc è un segnaposto per il nome di funzione definito dall'applicazione o definito dalla libreria.
LRESULT CALLBACK LowLevelMouseProc(
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
Parametri
nCode [in]
Tipo: int
Codice utilizzato dalla routine hook per determinare come elaborare il messaggio.
Se nCode è minore di zero, la routine hook deve passare il messaggio alla funzione CallNextHookEx senza ulteriore elaborazione e deve restituire il valore restituito da CallNextHookEx.
Questo parametro può essere uno dei valori seguenti.
| Value | Meaning |
|---|---|
| HC_ACTION 0 | I parametri wParam e lParam contengono informazioni su un messaggio del mouse. |
wParam [in]
Tipo: WPARAM
Identificatore del messaggio del mouse.
Questo parametro può essere uno dei messaggi seguenti: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_XBUTTONDOWN o WM_XBUTTONUP.
lParam [in]
Tipo: LPARAM
Puntatore a una struttura MSLLHOOKSTRUCT .
Restituzioni
Tipo: LRESULT
Se nCode è minore di zero, la routine hook deve restituire il valore restituito da CallNextHookEx.
Se nCode è maggiore o uguale a zero e la routine hook non ha elaborato il messaggio, è consigliabile chiamare CallNextHookEx e restituire il valore restituito; in caso contrario, altre applicazioni che hanno installato WH_MOUSE_LL hook non riceveranno notifiche di hook e potrebbero comportarsi in modo non corretto di conseguenza.
Se la routine hook ha elaborato il messaggio, può restituire un valore diverso da zero per impedire al sistema di passare il messaggio al resto della catena di hook o alla routine della finestra di destinazione.
Osservazioni:
Un'applicazione installa la procedura hook specificando il tipo di hook WH_MOUSE_LL e un puntatore alla routine hook in una chiamata alla funzione SetWindowsHookExA/SetWindowsHookExW .
Questo hook viene chiamato nel contesto del thread che lo ha installato. La chiamata viene effettuata inviando un messaggio al thread che ha installato l'hook. Pertanto, il thread che ha installato l'hook deve avere un ciclo di messaggi.
L'input del mouse può provenire dal driver del mouse locale o dalle chiamate alla funzione mouse_event . Se l'input proviene da una chiamata a mouse_event, l'input è stato "inserito". Tuttavia, l'hook WH_MOUSE_LL non viene inserito in un altro processo. Al contrario, il contesto torna al processo che ha installato l'hook e viene chiamato nel contesto originale. Il contesto torna quindi all'applicazione che ha generato l'evento.
La procedura hook deve elaborare un messaggio in meno tempo rispetto alla voce di dati specificata nel valore LowLevelHooksTimeout nella chiave del Registro di sistema seguente:
HKEY_CURRENT_USER\Control Panel\Desktop
Il valore è espresso in millisecondi. Se si verifica il timeout della procedura hook, il sistema passa il messaggio all'hook successivo. Tuttavia, in Windows 7 e versioni successive, l'hook viene rimosso automaticamente senza essere chiamato. Non è possibile che l'applicazione sappia se l'hook viene rimosso.
Windows 10 versione 1709 e successive Il valore di timeout massimo consentito dal sistema è 1000 millisecondi (1 secondo). Per impostazione predefinita, il sistema usa un timeout di 1000 millisecondi se il valore LowLevelHooksTimeout è impostato su un valore maggiore di 1000.
Annotazioni
Gli hook di debug non possono tenere traccia di questo tipo di hook del mouse di basso livello. Se l'applicazione deve usare hook di basso livello, deve eseguire gli hook su un thread dedicato che passa il lavoro a un thread di lavoro e quindi restituisce immediatamente. Nella maggior parte dei casi in cui l'applicazione deve usare hook di basso livello, deve monitorare invece l'input non elaborato. Ciò è dovuto al fatto che l'input non elaborato può monitorare in modo asincrono i messaggi del mouse e della tastiera destinati ad altri thread in modo più efficace rispetto agli hook di basso livello. Per altre informazioni sull'input non elaborato, vedere Input non elaborato.