检查Windows移动设备是否处于空闲状态

3

我需要一个能够检测设备空闲状态的 Windows Mobile 5 程序(紧凑框架 3.5)。目前,我只是检查背光是否关闭,如下所示:

[DllImport("coredll.dll", EntryPoint = "sleep", SetLastError = true)]
internal static extern void sleep(int dwMilliseconds);

....

//Get the current power state of the system
int winError = CoreDLL.GetSystemPowerState(systemStateName, out systemPowerStates);
if (winError == 0)
{
    //If the backlight is off, consider the state to be idle.
    if (systemStateName.ToString() == "backlightoff")
    {
        idle = true;
    }
}

我认为这可能接近了答案,但我想知道设备是否真的没有被使用。

1个回答

1

您正在使用正确的函数,只需检查状态(它们是按位标志):

if ((systemPowerStates & POWER_STATE_IDLE) == POWER_STATE_IDLE) {
  idle = true;
}

使用 POWER_STATE_IDLE = 0x00100000

编辑:回答您的评论,查看 RequestPowerNotification 函数。当电源状态改变时,您将收到 POWER_BROADCAST 消息。


那个好用。 (它没有解决我的问题,但是它好用。)我想我将不得不采用POWER_STATE_USERIDLE(0x01000000)。 然而,在长时间空闲后,我得到了0x02000000,这在pm.h中没有定义。 - Vaccano
我还是卡在这里。我使用了你指示的方法,但POWER_STATE_IDLE从未被设置。这是因为我们正在使用计时器来不断检查电源状态是否空闲吗?这会阻止它进入空闲状态吗?如果是这样,那么如果检查导致它不处于空闲状态,该怎么办?(一旦你检查,你就失去了空闲状态。) - Vaccano
太好了!谢谢。我会试一下的。 - Vaccano
提醒未来的搜索者,当设备进入空闲状态时,RequestPowerNotifications确实会触发,但是它的“参数”中没有POWER_STATE_IDLE。(只有POWER_STATE_ON和POWER_STATE_PASSWORD。)最终,我改变了方法,并采用了Chris Tacke的出色解决方案来查找空闲应用程序:http://blog.opennetcf.com/ctacke/2009/05/19/DetectingApplicationIdle.aspx - Vaccano

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