共用方式為


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

提供從各種裝置以程式設計方式產生和自動化輸入的支援,例如鍵盤、滑鼠、觸控、手寫筆和遊戲台。

重要

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

類別

InjectedInputGamepadInfo

表示以程式設計方式產生的遊戲台輸入。

InjectedInputKeyboardInfo

表示以程式設計方式產生的鍵盤輸入,例如 Tab 或 Shift+Tab (反向 Tabbing) 。

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" />

另請參閱