始终显示窗口

本文关键字:窗口 显示 | 更新日期: 2023-09-27 18:33:42

我为LeapMotion设备编写了非接触式鼠标(见代码)问题是,仅当 winform 位于顶部并具有焦点时,鼠标侦听器才会处于活动状态。如果失去焦点,程序无法控制光标。我尝试将"始终在顶部"或"最顶层"属性设置为"true"。

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

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

始终显示窗口

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

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

控制器。SetPolicyFlags(Controller.PolicyFlag.POLICYBACKGROUNDFRAMES);

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

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

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

请注意,根据 SDK,您只是请求此策略,更改可能不会立即生效。您可以在此处了解更多信息。

最后,需要勾选Leap Motion控制面板中的"允许后台应用程序"复选框。