Windows.UI.Input.Preview.Injection 命名空间
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
类
InjectedInputGamepadInfo |
表示以编程方式生成的游戏板输入。 |
InjectedInputKeyboardInfo |
表示以编程方式生成的键盘输入,例如 Tab 或 Shift+Tab (反向 Tab 键) 。 |
InjectedInputMouseInfo |
表示以编程方式生成的鼠标输入。 |
InjectedInputPenInfo |
表示以编程方式生成的笔输入。 |
InjectedInputTouchInfo |
表示以编程方式生成的触摸输入。 |
InputInjector |
表示用于发送输入数据的虚拟输入设备。 |
结构
InjectedInputPoint |
在与设备无关的像素 (DIP) 中包含指针的屏幕坐标。 |
InjectedInputPointerInfo |
包含所有指针类型通用的基本指针信息。 |
InjectedInputRectangle |
表示触摸接触区域的边界框的偏移量(与注入的指针相差)。 |
枚举
InjectedInputButtonChangeKind |
指定与指针关联的按钮的状态更改。 |
InjectedInputKeyOptions |
指定用于通过 InjectedInputKeyboardInfo 模拟物理或虚拟键盘输入的各种选项或修饰符。 |
InjectedInputMouseOptions |
指定用于通过 InjectedInputMouseInfo 模拟鼠标输入的各种选项或修饰符。 |
InjectedInputPenButtons |
指定用于通过 InjectedInputPenInfo 模拟笔输入的笔选项。 |
InjectedInputPenParameters |
指定用于通过 InjectedInputPenInfo 模拟笔输入的笔状态。 |
InjectedInputPointerOptions |
指定用于通过 InjectedInputMouseInfo、InjectedInputPenInfo 和 InjectedInputTouchInfo 模拟指针输入的各种选项或修饰符。 |
InjectedInputShortcut |
指定 InjectShortcut 的系统快捷方式。 |
InjectedInputTouchParameters |
指定用于通过 InjectedInputTouchInfo 模拟触摸输入的触摸状态。 |
InjectedInputVisualizationMode |
指定为注入的输入类型显示的视觉反馈的类型。 |
示例
下面是触摸输入注入函数的示例。
首先,我们调用 TryCreate 来实例化 InputInjector 对象。
然后,我们通过 Default
的 InjectedInputVisualizationMode 调用 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" />