以编程方式在Raspberry Pi3上移动光标

时间:2017-09-06 12:43:24

标签: c# uwp raspberry-pi3 windows-10-iot-core

我正在尝试以编程方式移动在Raspberry Pi 3上运行的UWP应用程序上的指针位置。当我在本地计算机上运行应用程序时,该行:

Window.Current.CoreWindow.PointerPosition = new Point(512, 384);

按预期工作。

当我将应用程序部署到Pi 3时,上面的代码完全没有效果。还有另一种方法我应该这样做吗?我的最终目标是在X方向上使用鼠标移动作为调整功能的输入。我需要能够无限期地检测X方向的运动。我现在尝试这样做的方法是使用PointerMoved事件。这个问题是当指针撞到窗口的左边界或右边界时,如果我继续沿那个方向移动鼠标,它就不再触发事件。我的简单解决方案是在光标到达边界时以编程方式居中。正如我所说,这在我的本地PC上工作正常,但不适用于Raspberry Pi。

1 个答案:

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

这可以实现受限制的功能。