Condividi tramite


Funzione InjectTouchInput (winuser.h)

Simula l'input tocco.

NotaInitializeTouchChangection deve precedere qualsiasi chiamata a InjectTouchInput.

 

Sintassi

BOOL InjectTouchInput(
  [in] UINT32                   count,
  [in] const POINTER_TOUCH_INFO *contacts
);

Parametri

[in] count

Dimensione della matrice nei contatti.

Il valore massimo per il conteggio viene specificato dal parametro maxCount della funzione InitializeTouchSignection .

[in] contacts

Matrice di strutture POINTER_TOUCH_INFO che rappresenta tutti i contatti sul desktop. Le coordinate dello schermo di ogni contatto devono trovarsi entro i limiti del desktop.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

L'input inserito viene inviato al desktop della sessione in cui è in esecuzione il processo di inserimento.

Esistono due stati di input per l'inserimento di input tocco (interattivo e puntatore del mouse) indicati dalle combinazioni seguenti di puntatoriFlag nei contatti:

puntatoreFlags (POINTER_FLAG_*) Stato
INRANGE | AGGIORNAMENTO Il puntatore del tocco inizia o sposta
INRANGE | INCONTACT | GIÙ Tocca il contatto verso il basso
INRANGE | INCONTACT | AGGIORNAMENTO Movimenti di contatto tocco
INRANGE | UP Toccare il contatto verso l'alto e la transizione al passaggio del mouse
UPDATE Estremità del puntatore del tocco
UP Estremità tocco
 
Nota Lo stato interattivo rappresenta un contatto tocco sullo schermo e in grado di interagire con qualsiasi app compatibile con tocco. Lo stato del mouse rappresenta l'input tocco che non è in contatto con lo schermo e non può interagire con le applicazioni. L'inserimento tocco può iniziare con il puntatore del mouse o lo stato interattivo, ma lo stato può passare solo attraverso INRANGE | INCONTACT | GIÙ per lo stato interattivo o tramite INRANGE | UP per lo stato interattivo del puntatore del mouse.
 
Tutte le sequenze di inserimento tocco terminano con UPDATE o UP.

Il diagramma seguente illustra una sequenza di inserimento tocco che inizia con uno stato del puntatore del mouse, passa a interattivo e termina con il passaggio del mouse.

Diagramma di una sequenza di inserimento tocco che mostra le transizioni di stato dal puntatore del mouse al passaggio del mouse.

Per tenere premuti i movimenti, è necessario inviare più fotogrammi per assicurarsi che l'input non venga annullato. Per una pressione e un blocco al punto (x,y), inviare WM_POINTERDOWN al punto (x,y) seguito da WM_POINTERUPDATE messaggi a punto(x,y).

Ascoltare WM_DISPLAYCHANGE gestire le modifiche per visualizzare la risoluzione e l'orientamento e gestire gli aggiornamenti delle coordinate dello schermo. Tutti i contatti attivi vengono annullati quando viene ricevuto un WM_DISPLAYCHANGE .

Annullare i singoli contatti impostando POINTER_FLAG_CANCELED con POINTER_FLAG_UP o POINTER_FLAG_UPDATE. Annullamento dell'inserimento del tocco senza POINTER_FLAG_UP o POINTER_FLAG_UPDATE invalida l'inserimento.

Quando POINTER_FLAG_UP è impostato, ptPixelLocation di POINTER_INFO deve essere uguale al valore del frame di inserimento tocco precedente con POINTER_FLAG_UPDATE. In caso contrario, l'inserimento ha esito negativo con ERROR_INVALID_PARAMETER e tutti i contatti di inserimento attivi vengono annullati. Il sistema modifica il ptPixelLocation dell'evento WM_POINTERUP perché annulla l'inserimento.

Il timestamp di input può essere specificato nel campo dwTime o PerformanceCount di POINTER_INFO. Il valore non può essere più recente del numero di tick corrente o del valore QueryPerformanceCounter del thread di inserimento. Dopo aver inserito un frame con un timestamp, tutti i fotogrammi successivi devono includere un timestamp fino a quando tutti i contatti nel frame passano allo stato UP. Il valore timestamp personalizzato deve essere fornito per il primo elemento della matrice di contatti. I valori timestamp dopo che il primo elemento viene ignorato. Il valore timestamp personalizzato deve aumentare in ogni frame di inserimento.

Quando viene specificato un campo PerformanceCount, il timestamp viene convertito in tempo corrente nella risoluzione in 1 millisecondi al momento dell'inserimento effettivo. Se un oggetto PerformanceCount personalizzato ha generato la stessa finestra con estensione 1 millisecondi dell'inserimento precedente, l'API restituirà un errore (ERROR_NOT_READY) e non inserisce i dati. Sebbene l'inserimento non sia immediatamente invalidato dall'errore, l'inserimento successivo deve avere valore PerformanceCount che è almeno 0,1 millisecondi a parte l'inserimento precedentemente riuscito. Analogamente, un valore dwTime personalizzato deve essere almeno 1 millisecondo a parte se il campo è stato usato.

Se nel parametro di inserimento vengono specificati sia dwTime che PerformanceCount, InjectTouchInput non riesce con un codice di errore (ERROR_INVALID_PARAMETER). Dopo aver avviato l'applicazione di inserimento con un parametro dwTime o PerformanceCount, il campo timestamp deve essere compilato correttamente. L'inserimento non può passare dal campo timestamp personalizzato da uno all'altro dopo l'avvio della sequenza di inserimento.

Quando non vengono specificati valori dwTime o PerformanceCount, InjectTouchInput alloca il timestamp in base al tempo della chiamata API. Se le chiamate sono inferiori a 0,1 millisecondi, l'API può restituire un errore (ERROR_NOT_READY). L'errore non invaliderà immediatamente l'input, ma l'applicazione di inserimento deve riprovare lo stesso frame per assicurarsi che l'inserimento sia riuscito.

Requisiti

   
Client minimo supportato Windows 8 [solo app desktop]
Server minimo supportato Windows Server 2012 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione Winuser
Libreria User32.lib
DLL User32.dll
Set di API ext-ms-win-rtcore-ntuser-wmpointer-l1-1-0 (introdotta in Windows 10, versione 10.0.14393)

Vedi anche

Funzioni