Funzione LowLevelMouseProc

Descrizione

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 pubblicato 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 dalla libreria.

LowLevelMouseProc è un segnaposto per il nome di funzione definito dall'applicazione o dalla libreria.

LRESULT CALLBACK LowLevelMouseProc(
  _In_ int    nCode,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

Parametri

nCode [in]

Tipo: int

Codice usato dalla routine di hook per determinare come elaborare il messaggio.

Se nCode è minore di zero, la procedura di hook deve passare il messaggio alla funzione CallNextHookEx senza ulteriore elaborazione e deve restituire il valore restituito da CallNextHookEx.

Questo parametro può avere uno dei valori seguenti.

Valore Significato
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 o WM_RBUTTONUP.

lParam [in]

Tipo: LPARAM

Puntatore a una struttura MSLLHOOKSTRUCT .

Restituisce

Tipo: LRESULT

Se nCode è minore di zero, la procedura di hook deve restituire il valore restituito da CallNextHookEx.

Se nCode è maggiore o uguale a zero e la procedura di hook non ha elaborato il messaggio, è consigliabile chiamare CallNextHookEx e restituire il valore restituito; in caso contrario, altre applicazioni installate WH_MOUSE_LL hook non riceveranno notifiche di hook e potrebbero comportarsi in modo errato come risultato.

Se la procedura di 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 procedura della finestra di destinazione.

Commenti

Un'applicazione installa la procedura di hook specificando il tipo di hook WH_MOUSE_LL e un puntatore alla procedura di collegamento in una chiamata alla funzione SetWindowsHookExA/SetWindowsHookExW .

Questo hook viene chiamato nel contesto del thread 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ò venire 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, il WH_MOUSE_LL hook non viene inserito in un altro processo. Il contesto torna invece 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 di 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 la procedura di hook si verifica il timeout, il sistema passa il messaggio all'hook successivo. Tuttavia, in Windows 7 e versioni successive, l'hook viene rimosso in modo silenzioso senza essere chiamato. Non è possibile che l'applicazione sappia se l'hook viene rimosso.

Windows 10 versione 1709 e versioni successive Il valore massimo di timeout consentito dal sistema è 1000 millisecondi (1 secondo). Il sistema verrà predefinito usando un timeout di 1000 millisecondi se il valore LowLevelHooksTimeout è impostato su un valore maggiore di 1000.

Nota

I hook di debug non possono tenere traccia di questo tipo di ganci del mouse di basso livello. Se l'applicazione deve usare hook di basso livello, deve eseguire i 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 a basso livello, deve monitorare invece l'input non elaborato. Questo perché 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 ai ganci di basso livello. Per altre informazioni sull'input non elaborato, vedere Input non elaborato.

Vedi anche

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

Setwindowshookex

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

Hook

Informazioni su Hook