OpenNETCF.WindowsCE.Suspend和OS挂起之间的区别

时间:2013-12-16 15:53:11

标签: windows-ce windows-mobile-6.5

对于我们的Windows Mobile解决方案,我们使用OpenNETCF.WindowsCE.Suspend方法在一段时间后暂停设备。这不是使用操作系统超时(HKLM \ System \ CurrentControlSet \ Control \ Power \ Timeouts \ BattSuspendTimeout)。原因是如果设备被操作系统暂停或按下电源按钮以暂停设备,则设备似乎自动唤醒,但是如果使用OpenNETCF.WindowsCE.Suspend方法,则设备将保持睡眠状态,直到用电源按钮唤醒它。

是否有人能够确认OpenNETCF.WindowsCE.Suspend是否通过BattSuspendTimeout将设备置于与其自身休眠的设备相同的状态?

1 个答案:

答案 0 :(得分:0)

我没有OpenNetCF.WindowsCE的源代码来确定有什么区别。我会查看代码或使用我的电源监控工具来查看OpenNetCF和BattSuspendTimeout输入的确切电源模式。如您所知,定义了几种超级模式:http://msdn.microsoft.com/en-us/library/aa929251.aspx

我的电源监视器位于https://github.com/hjgode/logging_ce/tree/master/PowerMsgLog

如果ctacke正在阅读您的帖子,他可能会说OpenNetCF.WindowsCE背后的确切代码是什么......

好的,我挖了它:

    public static void Suspend()
    {
        if (NativeMethods.SetSystemPowerState(IntPtr.Zero, PowerStateFlags.Suspend, 4096) != 0)
        {
            NativeMethods.GwesPowerOff();
        }
    }

现在我们仍然不知道使用了哪种方法:

SetSystemPowerState(IntPtr.Zero, PowerStateFlags.Suspend, 4096)

GwesPowerOff();

请尝试我的powerMsgLog工具。

我看到了这些差异:

OpenNetCF:

09:40:42 ReadMsgQueue: 
09:40:42 ReadMsgQueue: PBT_POWERINFOCHANGE
09:41:00 ReadMsgQueue: 
09:41:00 ReadMsgQueue: PBT_POWERINFOCHANGE
09:41:12 ReadMsgQueue: PBT_POWERINFOCHANGE
09:41:24 ReadMsgQueue: PBT_POWERINFOCHANGE
09:41:27 ReadMsgQueue: suspend

设备'关闭'

09:41:31 ReadMsgQueue: resuming
09:41:32 ReadMsgQueue: 
09:41:32 ReadMsgQueue: on
09:41:43 ReadMsgQueue: PBT_POWERINFOCHANGE

电源按钮:

09:41:55 ReadMsgQueue: PBT_POWERINFOCHANGE
**09:41:56 ReadMsgQueue: unattended**
09:41:56 ReadMsgQueue: suspend

设备'关闭'

09:42:04 ReadMsgQueue: resuming
09:42:06 ReadMsgQueue: 
09:42:06 ReadMsgQueue: on
09:42:07 ReadMsgQueue: on
09:42:16 ReadMsgQueue: 
09:42:16 ReadMsgQueue: PBT_POWERINFOCHANGE