总是出现窗口

时间:2013-10-02 18:33:26

标签: c# .net winforms mouse leap-motion

我为LeapMotion设备编写了非接触式鼠标(参见Code) 问题是鼠标监听器仅在winform位于顶部且具有焦点时才处于活动状态。如果失去焦点,程序无法控制光标。我试图在“true”上设置“always ontop”或“topmost”属性。

public Form1()
{
    InitializeComponent();
    this.ShowInTaskbar = false;
    this.Opacity = 0;
    this.TopMost = true;
}

然而,这并没有改变这样一个事实:当窗口失去焦点时,它停止控制光标。如何实现窗口或程序处于活动状态并即使没有焦点也可以移动光标?

2 个答案:

答案 0 :(得分:0)

首先,您需要将以下策略标志传递给控制器​​。即使您的应用程序在后台,它也允许控制器接收帧。

var controller = new Controller();
controller.SetPolicyFlags(Controller.PolicyFlag.POLICYBACKGROUNDFRAMES);

请注意,根据SDK,您只是请求此政策,并且可能不会立即进行更改。您可以详细了解here

最后,需要勾选Leap Motion控制面板中的“允许背景应用”复选框。

答案 1 :(得分:0)

默认情况下,Leap Motion服务会停止向非前台应用程序发送帧。这是为了防止在用户与其他应用程序交互时无意中输入您的应用程序。

要覆盖此设置,您可以设置策略标志以启用背景帧:

controller.SetPolicyFlags(Controller.PolicyFlag.POLICYBACKGROUNDFRAMES);

设置此项后(并且用户未在其Leap Motion控制面板中禁用后台应用程序),当应用程序处于后台并且当前前台应用程序未启用Leap时,您的应用程序将收到后台帧。