Funzione JournalPlaybackProc

Descrizione

Avviso

Le API di journaling Hooks non sono supportate a partire da Windows 11 e verranno rimosse in una versione futura. A causa di questo, è consigliabile chiamare invece l'API SendInput TextInput .

Funzione di callback definita dall'applicazione o definita dalla libreria usata con la funzione SetWindowsHookExA/SetWindowsHookExW . La funzione registra i messaggi che il sistema rimuove dalla coda dei messaggi di sistema. In un secondo momento, un'applicazione può usare una procedura di hook JournalPlaybackProc per riprodurre i messaggi.

Nota

In genere, un'applicazione usa questa funzione per riprodurre una serie di messaggi del mouse e della tastiera registrati in precedenza dalla procedura di hook JournalRecordProc . Purché sia installata una routine di hook JournalPlaybackProc , l'input normale del mouse e della tastiera è disabilitato.

Il tipo HOOKPROC definisce un puntatore a questa funzione di callback. JournalRecordProc è un segnaposto per il nome di funzione definito dall'applicazione o dalla libreria.

LRESULT CALLBACK JournalRecordProc(
  _In_ int    code,
       WPARAM wParam,
  _In_ LPARAM lParam
);

Parametri

codice [in]

Tipo: int

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

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

Questo parametro può avere uno dei valori seguenti.

Valore Significato
HC_GETNEXT 1 La procedura di hook deve copiare il messaggio corrente del mouse o della tastiera nella struttura EVENTMSG a cui punta il parametro lParam .
HC_NOREMOVE 3 Un'applicazione ha chiamato la funzione PeekMessage con wRemoveMsg impostata su PM_NOREMOVE, che indica che il messaggio non viene rimosso dalla coda del messaggio dopo l'elaborazione di PeekMessage .
HC_NOREMOVE 2 La procedura di hook deve prepararsi per copiare il messaggio successivo del mouse o della tastiera nella struttura EVENTMSG a cui punta lParam. Dopo aver ricevuto il codice HC_GETNEXT , la procedura di hook deve copiare il messaggio nella struttura.
HC_SYSMODALOFF 5 È stata eliminata una finestra di dialogo modale di sistema. La procedura di hook deve riprendere a riprodurre i messaggi.
HC_SYSMODALON 4 Viene visualizzata una finestra di dialogo modale di sistema. Fino a quando la finestra di dialogo non viene eliminata, la procedura di hook deve interrompere la riproduzione dei messaggi.

wParam

Tipo: WPARAM

Questo parametro non viene usato.

lParam

Tipo: LPARAM

Puntatore a una struttura EVENTMSG che rappresenta un messaggio elaborato dalla routine di hook. Questo parametro è valido solo quando il parametro del codice è HC_GETNEXT.

Restituisce

Tipo: LRESULT

Per avere l'attesa del sistema prima di elaborare il messaggio, il valore restituito deve essere la quantità di tempo, nei segni di orologio, che il sistema deve attendere.

Questo valore può essere calcolato calcolando la differenza tra i membri del tempo nei messaggi di input correnti e precedenti.

Per elaborare immediatamente il messaggio, il valore restituito deve essere zero. Il valore restituito viene usato solo se il codice di hook è HC_GETNEXT; in caso contrario, viene ignorato.

Commenti

Una routine hook JournalPlaybackProc deve copiare un messaggio di input nel parametro LParam . Il messaggio deve essere stato registrato in precedenza usando una routine hook JournalRecordProc , che non deve modificare il messaggio.

Per recuperare lo stesso messaggio su e sopra, la procedura di hook può essere chiamata più volte con il parametro di codice impostato su HC_GETNEXT senza una chiamata di intervento con il codice impostato su HC_SKIP.

Se il codice è HC_GETNEXT e il valore restituito è maggiore di zero, il sistema dorme per il numero di millisecondi specificati dal valore restituito. Quando il sistema continua, chiama nuovamente la procedura di hook con il codice impostato su HC_GETNEXT per recuperare lo stesso messaggio. Il valore restituito da questa nuova chiamata a JournalPlaybackProc deve essere zero; in caso contrario, il sistema tornerà a dormire per il numero di millisecondi specificati dal valore restituito, chiamare di nuovo JournalPlaybackProc e così via. Il sistema non risponderà.

A differenza della maggior parte delle altre procedure di hook globali, le procedure di hook JournalRecordProc e JournalPlaybackProc vengono sempre chiamate nel contesto del thread che imposta l'hook.

Dopo che la routine hook restituisce il controllo al sistema, il messaggio continua a essere elaborato. Se il codice è HC_SKIP, la procedura di hook deve preparare la restituzione del messaggio di evento registrato successivo nella chiamata successiva.

Installare la routine di hook JournalPlaybackProc specificando il tipo di WH_JOURNALPLAYBACK e un puntatore alla procedura di hook in una chiamata alla funzione SetWindowsHookEx .

Se l'utente preme CTRL+ESC OR CTRL+ALT+DEL durante la riproduzione del journal, il sistema arresta la riproduzione, annulla la procedura di riproduzione del journal e pubblica un messaggio WM_CANCELJOURNAL all'applicazione di journaling.

Se la procedura di hook restituisce un messaggio nell'intervallo WM_KEYFIRST a WM_KEYLAST, si applicano le condizioni seguenti:

  • Il membro paramL della struttura EVENTMSG specifica il codice chiave virtuale del tasto premuto.
  • Il membro paramH della struttura EVENTMSG specifica il codice di analisi.
  • Non è possibile specificare un conteggio ripetuto. L'evento viene sempre preso per rappresentare un evento chiave.

Vedi anche

CallNextHookEx

EVENTMSG

JournalRecordProc

PeekMessage

Setwindowshookex

WM_CANCELJOURNAL

Hook