2013-12-16 32 views
1

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

有人能够通过任何方式确认OpenNETCF.WindowsCE.Suspend是否通过BattSuspendTimeout将设备置于与自己睡觉的设备相同的状态?

回答

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 ...

OK,我挖吧:

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 
相关问题