Freigeben über


Windows.UI.Input.Preview.Injection Namespace

Bietet Unterstützung für das programmgesteuerte Generieren und Automatisieren von Eingaben von einer Vielzahl von Geräten wie Tastatur, Maus, Toucheingabe, Stift und Gamepad.

Wichtig

Die APIs in diesem Namespace erfordern die eingeschränkte Funktion inputInjectionBrokered.

Klassen

InjectedInputGamepadInfo

Stellt programmgesteuert generierte Gamepadeingaben dar.

InjectedInputKeyboardInfo

Stellt programmgesteuert generierte Tastatureingaben dar, z. B. tab oder UMSCHALT+TAB (Umgekehrtes Tabbing).

InjectedInputMouseInfo

Stellt programmgesteuert generierte Mauseingabe dar.

InjectedInputPenInfo

Stellt programmgesteuert generierte Stifteingabe dar.

InjectedInputTouchInfo

Stellt programmgesteuert generierte Toucheingaben dar.

InputInjector

Stellt das virtuelle Eingabegerät zum Senden der Eingabedaten dar.

Strukturen

InjectedInputPoint

Enthält die Bildschirmkoordinaten des Zeigers im geräteunabhängigen Pixel (DEVICE-Independent Pixel, DIP).

InjectedInputPointerInfo

Enthält grundlegende Zeigerinformationen, die allen Zeigertypen gemeinsam sind.

InjectedInputRectangle

Die Offsets aus dem eingefügten Zeiger für das Begrenzungsfeld, das den Touchkontaktbereich darstellt.

Enumerationen

InjectedInputButtonChangeKind

Gibt die Statusänderungen einer Schaltfläche an, die einem Zeiger zugeordnet ist.

InjectedInputKeyOptions

Gibt die verschiedenen Optionen oder Modifizierer an, die zum Simulieren von Eingaben von physischen oder virtuellen Tastaturen über InjectedInputKeyboardInfo verwendet werden.

InjectedInputMouseOptions

Gibt die verschiedenen Optionen oder Modifizierer an, die zum Simulieren der Mauseingabe über InjectedInputMouseInfo verwendet werden.

InjectedInputPenButtons

Gibt die Stiftoptionen an, die zum Simulieren der Stifteingabe über InjectedInputPenInfo verwendet werden.

InjectedInputPenParameters

Gibt die Stiftzustände an, die zum Simulieren der Stifteingabe über InjectedInputPenInfo verwendet werden.

InjectedInputPointerOptions

Gibt die verschiedenen Optionen oder Modifizierer an, die zum Simulieren der Zeigereingabe über InjectedInputMouseInfo, InjectedInputPenInfo und InjectedInputTouchInfo verwendet werden.

InjectedInputShortcut

Gibt die Systemverknüpfungen für InjectShortcut an.

InjectedInputTouchParameters

Gibt die Touchstatus an, die zum Simulieren der Toucheingabe über InjectedInputTouchInfo verwendet werden.

InjectedInputVisualizationMode

Gibt den Typ des visuellen Feedbacks an, das für den eingefügten Eingabetyp angezeigt wird.

Beispiele

Hier sehen Sie ein Beispiel für eine Toucheingabeeinschleusungsfunktion.

Zunächst rufen wir TryCreate auf, um das InputInjector-Objekt zu instanziieren .

Anschließend rufen wir InitializeTouchInjection mit einem InjectedInputVisualizationMode von auf Default.

Nach der Berechnung des Einschleusungspunkts rufen wir InjectedInputTouchInfo auf, um die Liste der zu einfügenden Berührungspunkte zu initialisieren (in diesem Beispiel erstellen wir einen Berührungspunkt, der dem Mauseingabezeiger entspricht).

Schließlich rufen wir InjectTouchInput zweimal auf, den ersten für einen Zeiger nach unten und den zweiten für einen Zeiger nach oben.

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

Hier finden Sie einige herunterladbare Beispiele, die grundlegende Eingaben und Eingabeeinschleusungen veranschaulichen:

Hinweise

Bei Verwendung der Eingabeeinschleusung muss Dem Package.appxmanifest Folgendes hinzugefügt werden:

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

Weitere Informationen