检测Windows通用应用程序中用户是否处于空闲状态

8
我正在为Windows 10通用应用程序(仅针对移动设备和桌面设备族)开发一个类库。我需要在用户空闲(无触摸、鼠标移动、按键等) x 秒后调用一个事件。在Android上,可以使用此方法解决此问题。但我找不到UWP上的解决方案。
在UWP中是否有可用的API来实现这一点?

嗨,看看这个答案。 https://dev59.com/i53ha4cB1Zd3GeqPUGt0#41194976 - SurenSaluka
2个回答

8
您可以通过应用程序的CoreWindow上的各种事件来检测全局输入:
触摸和鼠标输入使用CoreWindow.PointerPressed、PointerMoved和PointerReleased。
键盘输入:KeyUp和KeyDown(软件键)以及CharacterReceived(用于通过和弦和文本建议生成字符)
使用这些来检测用户活动,如果长时间没有这些事件之一,则将其设置为闲置状态。

2

我知道这是一个很老的问题,但我认为现在你可以使用RegisterBackgroundTask来获得相同的结果。

只需要设置:

new TimeTrigger(15, false) //用于时间触发器

链接

new SystemCondition(SystemConditionType.UserNotPresent)) //所以你想知道用户不在场

链接

在App.xaml.cs中的示例用法:

var builder = new BackgroundTaskBuilder();
builder.Name = "Is user Idle";
builder.SetTrigger(new TimeTrigger(2, false)); //two mins
builder.AddCondition(new SystemCondition(SystemConditionType.UserNotPresent));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();
task.Completed += (sender, args) =>
{
    //Handle user not present (Idle) here.
};

请在您的回答中提供更多细节。目前的写法很难理解您的解决方案。 - Community
添加了解决方案示例。 - TekuSP
TimeTrigger类有一个最小值,即15分钟。您不能将时间间隔设置为小于15分钟的TimeTrigger。这在此处已经提到:TimeTrigger.FreshnessTime Property - NoWar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接