【问题标题】:Detect and prevent/delay windows mobile power off检测和防止/延迟windows移动电源关闭
【发布时间】:2011-01-20 20:10:57
【问题描述】:

我有一个窗口移动应用程序,它需要在设备关闭之前检测到电源关闭并执行一些操作。

我已经能够使用对 RequestPowerNotifications win32 api 的 pinvoke 检测到设备正在关闭。

但是我不知道如何阻止电源关闭足够长的时间来运行我的代码。

【问题讨论】:

  • 作为手机用户,我不希望你能够阻止关机。
  • 作为一名程序员,我这样做是为了满足我的用户需求。但是我不需要阻止电源关闭,只需将其延迟足够长的时间即可执行任务。
  • 这也不是用于手机的,它是一个 PDA,它被设计为仅用于我们的应用程序,即不是通用目的。

标签: c# windows-mobile winapi compact-framework


【解决方案1】:

作为一个应用程序,您无法阻止它,除非 OEM 以某种方式为此提供了自定义 API(而且我从未在任何 WInMo 设备上看到它,仅在少数自定义 CE 设备上看到它)。当电源管理器被告知暂停时,它会发出通知并立即开始关闭。唯一有机会延迟事情的子系统是驱动程序,在此期间它们不能调用 Win32 API(这意味着关闭外围设备、保存寄存器等的机会)。

我也不能说我见过一个应用程序这样做的充分理由。如果用户按下电源按钮,他们想要关闭电源 - 不受应用程序的限制。如果操作系统需要关闭(例如由于低功耗),那么阻止它无论如何都是一件坏事。

【讨论】:

  • +1 表示任何好的应用程序都不应该(被允许)这样做。当用户关闭 Windows Mobile 设备时,通常是因为他们想要保留剩余的电量。即使是桌面窗口现在也会忽略应用程序尝试延长关机时间:我认为在 Windows Mobile 上,您会发现操作系统对忽略用户关机的支持更少。
【解决方案2】:

正如 ctacke 指出的那样:这很脏。但是,只要您的电源通知线程指示设备正在尝试挂起,您就可以尝试SetSystemPowerState( POWER_STATE_ON );

http://msdn.microsoft.com/en-us/library/ms920754.aspx

-保罗赫

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2011-09-27
    相关资源
    最近更新 更多