我正在尝试以编程方式移动在Raspberry Pi 3上运行的UWP应用程序上的指针位置。当我在本地计算机上运行应用程序时,该行:
Window.Current.CoreWindow.PointerPosition = new Point(512, 384);
按预期工作。
当我将应用程序部署到Pi 3时,上面的代码完全没有效果。还有另一种方法我应该这样做吗?我的最终目标是在X方向上使用鼠标移动作为调整功能的输入。我需要能够无限期地检测X方向的运动。我现在尝试这样做的方法是使用PointerMoved事件。这个问题是当指针撞到窗口的左边界或右边界时,如果我继续沿那个方向移动鼠标,它就不再触发事件。我的简单解决方案是在光标到达边界时以编程方式居中。正如我所说,这在我的本地PC上工作正常,但不适用于Raspberry Pi。
答案 0 :(得分:1)
尝试注射:
private InputInjector _inputInjector;
private InjectedInputMouseInfo _mouse;
private Vector2 _positionDelta;
public MainPage()
{
InitializeComponent();
Loaded += MainPage_Loaded;
}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
_inputInjector = InputInjector.TryCreate();
_inputInjector.InitializeTouchInjection(InjectedInputVisualizationMode.Indirect);
RunMouse();
}
private async void RunMouse()
{
_positionDelta = Vector2.One;
for (int i = 0; i < 500; i++)
{
await Task.Delay(10);
if (i == 100) PointDown();
else if (i == 400) PointUp();
else PointMove();
_inputInjector.InjectMouseInput(new List<InjectedInputMouseInfo>{ _mouse });
}
}
private void PointDown()
{
_mouse = new InjectedInputMouseInfo
{
DeltaX = (int)_positionDelta.X,
DeltaY = (int)_positionDelta.Y,
MouseOptions = InjectedInputMouseOptions.LeftDown,
};
}
private void PointUp()
{
_mouse = new InjectedInputMouseInfo
{
DeltaX = (int)_positionDelta.X,
DeltaY = (int)_positionDelta.Y,
MouseOptions = InjectedInputMouseOptions.LeftUp,
};
}
private void PointMove()
{
_mouse = new InjectedInputMouseInfo
{
DeltaX = (int)_positionDelta.X,
DeltaY = (int)_positionDelta.Y,
MouseOptions = InjectedInputMouseOptions.Move,
};
}
此示例使用向上/向下左键移动鼠标
要启用此功能,您必须添加清单几行。在包标记中添加
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
在功能中添加
<rescap:Capability Name="inputInjection" /><rescap:Capability Name="inputInjectionBrokered" />
这可以实现受限制的功能。