Compartir a través de


Windows.UI.Input.Preview.Injection Espacio de nombres

Proporciona compatibilidad para generar y automatizar mediante programación la entrada desde diversos dispositivos, como teclado, mouse, táctil, lápiz y controlador para juegos.

Importante

Las API de este espacio de nombres requieren la funcionalidad restringida inputInjectionBrokered.

Clases

InjectedInputGamepadInfo

Representa la entrada del controlador para juegos generada mediante programación.

InjectedInputKeyboardInfo

Representa la entrada de teclado generada mediante programación, como una tecla Tab o Mayús+Tab (tabulación inversa).

InjectedInputMouseInfo

Representa la entrada del mouse generada mediante programación.

InjectedInputPenInfo

Representa la entrada de lápiz generada mediante programación.

InjectedInputTouchInfo

Representa la entrada táctil generada mediante programación.

InputInjector

Representa el dispositivo de entrada virtual para enviar los datos de entrada.

Estructuras

InjectedInputPoint

Contiene las coordenadas de pantalla del puntero en píxeles independientes del dispositivo (DIP).

InjectedInputPointerInfo

Contiene información básica del puntero común a todos los tipos de puntero.

InjectedInputRectangle

Desplazamientos, desde el puntero insertado, para el rectángulo de selección que representa el área de contacto táctil.

Enumeraciones

InjectedInputButtonChangeKind

Especifica los cambios en el estado de un botón asociado a un puntero.

InjectedInputKeyOptions

Especifica las distintas opciones, o modificadores, que se usan para simular la entrada de teclados físicos o virtuales a través de InjectedInputKeyboardInfo.

InjectedInputMouseOptions

Especifica las distintas opciones, o modificadores, que se usan para simular la entrada del mouse a través de InjectedInputMouseInfo.

InjectedInputPenButtons

Especifica las opciones de lápiz usadas para simular la entrada del lápiz a través de InjectedInputPenInfo.

InjectedInputPenParameters

Especifica los estados de lápiz usados para simular la entrada del lápiz a través de InjectedInputPenInfo.

InjectedInputPointerOptions

Especifica las distintas opciones, o modificadores, que se usan para simular la entrada de puntero a través de InjectedInputMouseInfo, InjectedInputPenInfo e InjectedInputTouchInfo.

InjectedInputShortcut

Especifica los accesos directos del sistema para InjectShortcut.

InjectedInputTouchParameters

Especifica los estados táctiles usados para simular la entrada táctil a través de InjectedInputTouchInfo.

InjectedInputVisualizationMode

Especifica el tipo de comentarios visuales que se muestran para el tipo de entrada insertado.

Ejemplos

Este es un ejemplo de una función de inserción de entrada táctil.

En primer lugar, llamamos a TryCreate para crear una instancia del objeto InputInjector .

A continuación, llamamos a InitializeTouchInjection con un injectedInputVisualizationMode de Default.

Después de calcular el punto de inyección, llamamos a InjectedInputTouchInfo para inicializar la lista de puntos táctiles que se van a insertar (en este ejemplo, creamos un punto táctil correspondiente al puntero de entrada del mouse).

Por último, llamamos a InjectTouchInput dos veces, el primero para un puntero hacia abajo y el segundo para un puntero hacia arriba.

/// <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);
    }
}

Estos son algunos ejemplos descargables que muestran la entrada básica y la inserción de entrada:

Comentarios

El uso de la inserción de entrada requiere que se agregue lo siguiente a Package.appxmanifest:

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

Consulte también