对于我们的Windows Mobile解决方案,我们使用OpenNETCF.WindowsCE.Suspend方法在一段时间后暂停设备。这不是使用操作系统超时(HKLM \ System \ CurrentControlSet \ Control \ Power \ Timeouts \ BattSuspendTimeout)。原因是如果设备被操作系统暂停或按下电源按钮以暂停设备,则设备似乎自动唤醒,但是如果使用OpenNETCF.WindowsCE.Suspend方法,则设备将保持睡眠状态,直到用电源按钮唤醒它。
是否有人能够确认OpenNETCF.WindowsCE.Suspend是否通过BattSuspendTimeout将设备置于与其自身休眠的设备相同的状态?
答案 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