Partager via


InjectTouchInput, fonction (winuser.h)

Simule l’entrée tactile.

RemarqueInitializeTouchInjection doit précéder tout appel à InjectTouchInput.

 

Syntaxe

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

Paramètres

[in] count

Taille du tableau dans les contacts.

La valeur maximale pour count est spécifiée par le paramètre maxCount de la fonction InitializeTouchInjection .

[in] contacts

Tableau de structures POINTER_TOUCH_INFO qui représente tous les contacts sur le bureau. Les coordonnées d’écran de chaque contact doivent être dans les limites du bureau.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

L’entrée injectée est envoyée au bureau de la session où le processus d’injection est en cours d’exécution.

Il existe deux états d’entrée pour l’injection d’entrée tactile (interactif et pointeur) qui sont indiqués par les combinaisons suivantes de pointerFlags dans lescontacts :

pointerFlags (POINTER_FLAG_*) Statut
INRANGE | METTRE À JOUR Le pointage tactile démarre ou se déplace
INRANGE | INCONTACT | BAS Toucher le contact vers le bas
INRANGE | INCONTACT | METTRE À JOUR Déplacement du contact tactile
INRANGE | UP Retoucher le contact et passer au pointage
UPDATE Pointage tactile
UP Touches tactiles
 
Note L’état interactif représente un contact tactile qui est affiché à l’écran et capable d’interagir avec n’importe quelle application tactile. L’état du pointage représente une entrée tactile qui n’est pas en contact avec l’écran et ne peut pas interagir avec les applications. L’injection tactile peut commencer dans un état de pointage ou interactif, mais l’état peut uniquement passer par INRANGE | INCONTACT | Bas pour le pointage vers l’état interactif ou via INRANGE | UP pour l’état interactif pour pointer.
 
Toutes les séquences d’injection tactile se terminent par UPDATE ou UP.

Le diagramme suivant illustre une séquence d’injection tactile qui commence par un état de pointage, passe à l’interaction et se termine par le pointage.

Diagramme d’une séquence d’injection tactile montrant les transitions d’état du pointage au pointage interactif.

Pour les mouvements d’appui prolongé, plusieurs images doivent être envoyées pour garantir que l’entrée n’est pas annulée. Pour un appui prolongé au point (x,y), envoyez WM_POINTERDOWN au point (x,y) suivi de WM_POINTERUPDATE messages au point (x,y).

Écoutez les WM_DISPLAYCHANGE pour gérer les modifications apportées à la résolution et à l’orientation de l’affichage, et gérer les mises à jour des coordonnées d’écran. Tous les contacts actifs sont annulés lorsqu’un WM_DISPLAYCHANGE est reçu.

Annulez des contacts individuels en définissant POINTER_FLAG_CANCELED avec POINTER_FLAG_UP ou POINTER_FLAG_UPDATE. L’annulation de l’injection tactile sans POINTER_FLAG_UP ni POINTER_FLAG_UPDATE invalide l’injection.

Lorsque POINTER_FLAG_UP est défini, ptPixelLocation de POINTER_INFO doit être identique à la valeur de l’image d’injection tactile précédente avec POINTER_FLAG_UPDATE. Sinon, l’injection échoue avec ERROR_INVALID_PARAMETER et tous les contacts d’injection actifs sont annulés. Le système modifie le ptPixelLocation de l’événement WM_POINTERUP car il annule l’injection.

L’horodatage d’entrée peut être spécifié dans le champ dwTime ou PerformanceCount de POINTER_INFO. La valeur ne peut pas être plus récente que le nombre de graduations actuel ou la valeur QueryPerformanceCounter du thread d’injection. Une fois qu’une image est injectée avec un horodatage, toutes les images suivantes doivent inclure un horodatage jusqu’à ce que tous les contacts de l’image passent à l’état UP. La valeur d’horodatage personnalisé doit être fournie pour le premier élément du tableau de contacts. Les valeurs d’horodatage après le premier élément sont ignorées. La valeur d’horodatage personnalisé doit être incrémentée dans chaque image d’injection.

Lorsqu’un champ PerformanceCount est spécifié, l’horodatage est converti en heure actuelle en résolution de 0,1 milliseconde lors de l’injection réelle. Si un PerformanceCount personnalisé a produit la même fenêtre de 0,1 milliseconde que celle de l’injection précédente, l’API retourne une erreur (ERROR_NOT_READY) et n’injecte pas les données. Bien que l’injection ne soit pas immédiatement invalidée par l’erreur, la prochaine injection réussie doit avoir la valeur PerformanceCount d’au moins 0,1 milliseconde de l’injection réussie précédemment. De même, une valeur dwTime personnalisée doit être séparée d’au moins 1 milliseconde si le champ a été utilisé.

Si dwTime et PerformanceCount sont tous deux spécifiés dans le paramètre d’injection, InjectTouchInput échoue avec un code d’erreur (ERROR_INVALID_PARAMETER). Une fois que l’application d’injection démarre avec un paramètre dwTime ou PerformanceCount, le champ timestamp doit être rempli correctement. L’injection ne peut pas basculer le champ d’horodatage personnalisé d’un champ à un autre une fois la séquence d’injection démarrée.

Quand aucune valeur dwTime ou PerformanceCount n’est spécifiée, injectTouchInput alloue l’horodatage en fonction du minutage de l’appel d’API. Si les appels sont séparés de moins de 0,1 milliseconde, l’API peut retourner une erreur (ERROR_NOT_READY). L’erreur n’invalide pas immédiatement l’entrée, mais l’application d’injection doit réessayer la même image pour s’assurer que l’injection réussit.

Configuration requise

   
Client minimal pris en charge Windows 8 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winuser.h
Bibliothèque User32.lib
DLL User32.dll
Ensemble d’API ext-ms-win-rtcore-ntuser-wmpointer-l1-1-0 (introduit dans Windows 10, version 10.0.14393)

Voir aussi

Fonctions