Bagikan melalui


Windows.UI.Input.Preview.Injection Ruang nama

Menyediakan dukungan untuk menghasilkan dan mengotomatiskan input secara terprogram dari berbagai perangkat seperti keyboard, mouse, sentuhan, pena, dan gamepad.

Penting

API di namespace ini memerlukan kemampuan terbatas inputInjectionBrokered.

Kelas

InjectedInputGamepadInfo

Mewakili input gamepad yang dihasilkan secara terprogram.

InjectedInputKeyboardInfo

Mewakili input keyboard yang dihasilkan secara terprogram, seperti Tab atau Shift+Tab (Tab Terbalik).

InjectedInputMouseInfo

Mewakili input mouse yang dihasilkan secara terprogram.

InjectedInputPenInfo

Mewakili input pena yang dihasilkan secara terprogram.

InjectedInputTouchInfo

Mewakili input sentuh yang dihasilkan secara terprogram.

InputInjector

Mewakili perangkat input virtual untuk mengirim data input.

Struct

InjectedInputPoint

Berisi koordinat layar penunjuk dalam piksel independen perangkat (DIP).

InjectedInputPointerInfo

Berisi informasi penunjuk dasar yang umum untuk semua jenis penunjuk.

InjectedInputRectangle

Offset, dari penunjuk yang disuntikkan, untuk kotak pembatas yang mewakili area kontak sentuh.

Enum

InjectedInputButtonChangeKind

Menentukan perubahan status tombol yang terkait dengan penunjuk.

InjectedInputKeyOptions

Menentukan berbagai opsi, atau pengubah, yang digunakan untuk mensimulasikan input dari keyboard fisik atau virtual melalui InjectedInputKeyboardInfo.

InjectedInputMouseOptions

Menentukan berbagai opsi, atau pengubah, yang digunakan untuk mensimulasikan input mouse melalui InjectedInputMouseInfo.

InjectedInputPenButtons

Menentukan opsi pena yang digunakan untuk mensimulasikan input pena melalui InjectedInputPenInfo.

InjectedInputPenParameters

Menentukan status pena yang digunakan untuk mensimulasikan input pena melalui InjectedInputPenInfo.

InjectedInputPointerOptions

Menentukan berbagai opsi, atau pengubah, yang digunakan untuk mensimulasikan input pointer melalui InjectedInputMouseInfo, InjectedInputPenInfo, dan InjectedInputTouchInfo.

InjectedInputShortcut

Menentukan pintasan sistem untuk InjectShortcut.

InjectedInputTouchParameters

Menentukan status sentuhan yang digunakan untuk mensimulasikan input sentuh melalui InjectedInputTouchInfo.

InjectedInputVisualizationMode

Menentukan jenis umpan balik visual yang ditampilkan untuk jenis input yang disuntikkan.

Contoh

Berikut adalah contoh fungsi injeksi input sentuh.

Pertama, kami memanggil TryCreate untuk membuat instans objek InputInjector .

Kemudian, kami memanggil InitializeTouchInjection dengan InjectedInputVisualizationMode dari Default.

Setelah menghitung titik injeksi, kami memanggil InjectedInputTouchInfo untuk menginisialisasi daftar titik sentuh untuk disuntikkan (untuk contoh ini, kami membuat satu titik sentuh yang sesuai dengan penunjuk input mouse).

Terakhir, kami memanggil InjectTouchInput dua kali, yang pertama untuk pointer ke bawah dan yang kedua untuk pointer ke atas.

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

Berikut adalah beberapa sampel yang dapat diunduh yang menunjukkan input dasar dan injeksi input:

Keterangan

Menggunakan injeksi input mengharuskan hal berikut ditambahkan ke Package.appxmanifest:

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

Lihat juga