Partager via


Windows.UI.Input.Preview.Injection Espace de noms

Fournit la prise en charge de la génération et de l’automatisation par programmation des entrées à partir d’un large éventail d’appareils tels que le clavier, la souris, le tactile, le stylet et le boîtier de commande.

Important

Les API de cet espace de noms nécessitent la fonctionnalité restreinte inputInjectionBrokered.

Classes

InjectedInputGamepadInfo

Représente une entrée de boîtier de commande générée par programmation.

InjectedInputKeyboardInfo

Représente une entrée de clavier générée par programmation, telle qu’une touche Tab ou Maj+Tab (Tabulation inversée).

InjectedInputMouseInfo

Représente l’entrée de souris générée par programmation.

InjectedInputPenInfo

Représente l’entrée de stylet générée par programmation.

InjectedInputTouchInfo

Représente une entrée tactile générée par programmation.

InputInjector

Représente le périphérique d’entrée virtuel pour l’envoi des données d’entrée.

Structures

InjectedInputPoint

Contient les coordonnées d’écran du pointeur en pixel indépendant de l’appareil (DIP).

InjectedInputPointerInfo

Contient des informations de pointeur de base communes à tous les types de pointeurs.

InjectedInputRectangle

Décalages, à partir du pointeur injecté, pour le cadre englobant qui représente la zone de contact tactile.

Énumérations

InjectedInputButtonChangeKind

Spécifie les modifications d’état d’un bouton associé à un pointeur.

InjectedInputKeyOptions

Spécifie les différentes options, ou modificateurs, utilisés pour simuler l’entrée à partir de claviers physiques ou virtuels via InjectedInputKeyboardInfo.

InjectedInputMouseOptions

Spécifie les différentes options, ou modificateurs, utilisées pour simuler l’entrée de la souris via InjectedInputMouseInfo.

InjectedInputPenButtons

Spécifie les options de stylet utilisées pour simuler l’entrée de stylet via InjectedInputPenInfo.

InjectedInputPenParameters

Spécifie les états de stylet utilisés pour simuler l’entrée de stylet via InjectedInputPenInfo.

InjectedInputPointerOptions

Spécifie les différentes options, ou modificateurs, utilisées pour simuler l’entrée de pointeur via InjectedInputMouseInfo, InjectedInputPenInfo et InjectedInputTouchInfo.

InjectedInputShortcut

Spécifie les raccourcis système pour InjectShortcut.

InjectedInputTouchParameters

Spécifie les états tactiles utilisés pour simuler l’entrée tactile via InjectedInputTouchInfo.

InjectedInputVisualizationMode

Spécifie le type de commentaires visuels affichés pour le type d’entrée injecté.

Exemples

Voici un exemple de fonction d’injection d’entrée tactile.

Tout d’abord, nous appelons TryCreate pour instancier l’objet InputInjector .

Ensuite, nous appelons InitializeTouchInjection avec un InjectedInputVisualizationMode de Default.

Après avoir calculé le point d’injection, nous appelons InjectedInputTouchInfo pour initialiser la liste des points tactiles à injecter (pour cet exemple, nous créons un point tactile correspondant au pointeur d’entrée de la souris).

Enfin, nous appelons InjectTouchInput deux fois, la première pour un pointeur vers le bas et la deuxième pour un pointeur vers le haut.

/// <summary>
/// Inject touch input on injection target corresponding 
/// to mouse click on input target.
/// </summary>
/// <param name="pointerPoint">The mouse click pointer.</param>
private void InjectTouchForMouse(PointerPoint pointerPoint)
{
    // Create the touch injection object.
    _inputInjector = InputInjector.TryCreate();

    if (_inputInjector != null)
    {
        _inputInjector.InitializeTouchInjection(
            InjectedInputVisualizationMode.Default);

        // Create a unique pointer ID for the injected touch pointer.
        // Multiple input pointers would require more robust handling.
        uint pointerId = pointerPoint.PointerId + 1;

        // Get the bounding rectangle of the app window.
        Rect appBounds =
            Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().VisibleBounds;

        // Get the top left screen coordinates of the app window rect.
        Point appBoundsTopLeft = new Point(appBounds.Left, appBounds.Top);

        // Get a reference to the input injection area.
        GeneralTransform injectArea =
            ContainerInject.TransformToVisual(Window.Current.Content);

        // Get the top left screen coordinates of the input injection area.
        Point injectAreaTopLeft = injectArea.TransformPoint(new Point(0, 0));

        // Get the screen coordinates (relative to the input area) 
        // of the input pointer.
        int pointerPointX = (int)pointerPoint.Position.X;
        int pointerPointY = (int)pointerPoint.Position.Y;

        // Create the point for input injection and calculate its screen location.
        Point injectionPoint =
            new Point(
                appBoundsTopLeft.X + injectAreaTopLeft.X + pointerPointX,
                appBoundsTopLeft.Y + injectAreaTopLeft.Y + pointerPointY);

        // Create a touch data point for pointer down.
        // Each element in the touch data list represents a single touch contact. 
        // For this example, we're mirroring a single mouse pointer.
        List<InjectedInputTouchInfo> touchData =
            new List<InjectedInputTouchInfo>
            {
                new InjectedInputTouchInfo
                {
                    Contact = new InjectedInputRectangle
                    {
                        Left = 30, Top = 30, Bottom = 30, Right = 30
                    },
                    PointerInfo = new InjectedInputPointerInfo
                    {
                        PointerId = pointerId,
                        PointerOptions =
                        InjectedInputPointerOptions.PointerDown |
                        InjectedInputPointerOptions.InContact |
                        InjectedInputPointerOptions.New,
                        TimeOffsetInMilliseconds = 0,
                        PixelLocation = new InjectedInputPoint
                        {
                            PositionX = (int)injectionPoint.X ,
                            PositionY = (int)injectionPoint.Y
                        }
                },
                Pressure = 1.0,
                TouchParameters =
                    InjectedInputTouchParameters.Pressure |
                    InjectedInputTouchParameters.Contact
            }
        };

        // Inject the touch input. 
        _inputInjector.InjectTouchInput(touchData);

        // Create a touch data point for pointer up.
        touchData = new List<InjectedInputTouchInfo>
        {
            new InjectedInputTouchInfo
            {
                PointerInfo = new InjectedInputPointerInfo
                {
                    PointerId = pointerId,
                    PointerOptions = InjectedInputPointerOptions.PointerUp
                }
            }
        };

        // Inject the touch input. 
        _inputInjector.InjectTouchInput(touchData);
    }
}

Voici quelques exemples téléchargeables illustrant l’entrée de base et l’injection d’entrée :

Remarques

L’utilisation de l’injection d’entrée nécessite l’ajout des éléments suivants au package.appxmanifest :

  • À <Package>
    • xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    • IgnorableNamespaces="rescap"
  • À <Capabilities>
    • <rescap:Capability Name="inputInjectionBrokered" />

Voir aussi