Compartilhar via


Windows.UI.Input.Preview.Injection Namespace

Fornece suporte para gerar e automatizar programaticamente a entrada de uma variedade de dispositivos, como teclado, mouse, toque, caneta e gamepad.

Importante

As APIs nesse namespace exigem a funcionalidade restrita inputInjectionBrokered.

Classes

InjectedInputGamepadInfo

Representa a entrada de gamepad gerada programaticamente.

InjectedInputKeyboardInfo

Representa a entrada de teclado gerada programaticamente, como uma Guia ou Shift+Tab (tabulação inversa).

InjectedInputMouseInfo

Representa a entrada do mouse gerada programaticamente.

InjectedInputPenInfo

Representa a entrada de caneta gerada programaticamente.

InjectedInputTouchInfo

Representa a entrada por toque gerada programaticamente.

InputInjector

Representa o dispositivo de entrada virtual para enviar os dados de entrada.

Estruturas

InjectedInputPoint

Contém as coordenadas da tela do ponteiro em DIP (pixel independente do dispositivo).

InjectedInputPointerInfo

Contém informações básicas de ponteiro comuns a todos os tipos de ponteiro.

InjectedInputRectangle

Os deslocamentos, do ponteiro injetado, para a caixa delimitadora que representa a área de contato de toque.

Enumerações

InjectedInputButtonChangeKind

Especifica as alterações no estado de um botão associado a um ponteiro.

InjectedInputKeyOptions

Especifica as várias opções, ou modificadores, usadas para simular a entrada de teclados físicos ou virtuais por meio de InjectedInputKeyboardInfo.

InjectedInputMouseOptions

Especifica as várias opções, ou modificadores, usadas para simular a entrada do mouse por meio de InjectedInputMouseInfo.

InjectedInputPenButtons

Especifica as opções de caneta usadas para simular a entrada da caneta por meio de InjectedInputPenInfo.

InjectedInputPenParameters

Especifica os estados de caneta usados para simular a entrada da caneta por meio de InjectedInputPenInfo.

InjectedInputPointerOptions

Especifica as várias opções, ou modificadores, usadas para simular a entrada do ponteiro por meio de InjectedInputMouseInfo, InjectedInputPenInfo e InjectedInputTouchInfo.

InjectedInputShortcut

Especifica os atalhos do sistema para InjectShortcut.

InjectedInputTouchParameters

Especifica os estados de toque usados para simular a entrada por toque por meio de InjectedInputTouchInfo.

InjectedInputVisualizationMode

Especifica o tipo de comentários visuais exibidos para o tipo de entrada injetado.

Exemplos

Aqui está um exemplo de uma função de injeção de entrada por toque.

Primeiro, chamamos TryCreate para instanciar o objeto InputInjector.

Em seguida, chamamos InitializeTouchInjection com um InjectedInputVisualizationMode de Default.

Depois de calcular o ponto de injeção, chamamos InjectedInputTouchInfo para inicializar a lista de pontos de toque para injetar (neste exemplo, criamos um ponto de contato correspondente ao ponteiro de entrada do mouse).

Por fim, chamamos InjectTouchInput duas vezes, a primeira para um ponteiro para baixo, e a segunda para um ponteiro para cima.

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

Aqui estão alguns exemplos para download que demonstram a entrada básica e a injeção de entrada:

Comentários

O uso da injeção de entrada requer que o seguinte seja adicionado ao Package.appxmanifest:

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

Confira também