Windows.UI.Input.Preview.Injection 命名空间

支持以编程方式从各种设备(如键盘、鼠标、触摸、笔和游戏板)生成和自动执行输入。

重要

此命名空间中的 API 需要 inputInjectionBrokered 受限功能

InjectedInputGamepadInfo

表示以编程方式生成的游戏板输入。

InjectedInputKeyboardInfo

表示以编程方式生成的键盘输入,例如 Tab 或 Shift+Tab (反向 Tab 键) 。

InjectedInputMouseInfo

表示以编程方式生成的鼠标输入。

InjectedInputPenInfo

表示以编程方式生成的笔输入。

InjectedInputTouchInfo

表示以编程方式生成的触摸输入。

InputInjector

表示用于发送输入数据的虚拟输入设备。

结构

InjectedInputPoint

在与设备无关的像素 (DIP) 中包含指针的屏幕坐标。

InjectedInputPointerInfo

包含所有指针类型通用的基本指针信息。

InjectedInputRectangle

表示触摸接触区域的边界框的偏移量(与注入的指针相差)。

枚举

InjectedInputButtonChangeKind

指定与指针关联的按钮的状态更改。

InjectedInputKeyOptions

指定用于通过 InjectedInputKeyboardInfo 模拟物理或虚拟键盘输入的各种选项或修饰符。

InjectedInputMouseOptions

指定用于通过 InjectedInputMouseInfo 模拟鼠标输入的各种选项或修饰符。

InjectedInputPenButtons

指定用于通过 InjectedInputPenInfo 模拟笔输入的笔选项。

InjectedInputPenParameters

指定用于通过 InjectedInputPenInfo 模拟笔输入的笔状态。

InjectedInputPointerOptions

指定用于通过 InjectedInputMouseInfoInjectedInputPenInfo 和 InjectedInputTouchInfo 模拟指针输入的各种选项或修饰符。

InjectedInputShortcut

指定 InjectShortcut 的系统快捷方式。

InjectedInputTouchParameters

指定用于通过 InjectedInputTouchInfo 模拟触摸输入的触摸状态。

InjectedInputVisualizationMode

指定为注入的输入类型显示的视觉反馈的类型。

示例

下面是触摸输入注入函数的示例。

首先,我们调用 TryCreate 来实例化 InputInjector 对象。

然后,我们通过 DefaultInjectedInputVisualizationMode 调用 InitializeTouchInjection

计算注入点之后,我们调用 InjectedInputTouchInfo 来初始化要注入的触控点列表(在本示例中,我们创建一个与鼠标输入指针对应的触控点)。

最后,我们调用 InjectTouchInput 两次,第一次用于指针向下,第二次用于指针向上。

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

下面是一些演示基本输入和输入注入的可下载示例:

注解

使用输入注入需要将以下内容添加到 Package.appxmanifest:

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

另请参阅