Windows.UI.Input.Preview.Injection Namespace
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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:
- Amostra de injeção de entrada (mouse para toque)
- Exemplo de injeção de toque
- Entrada: amostra de eventos de entrada do usuário XAML
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" />