如何以编程方式关闭Windows Mobile设备

时间:2008-10-16 05:37:19

标签: windows-mobile compact-framework

我想使用Compact framework 2.0,Windows mobile 5.0 SDK以编程方式关闭Windows Mobile设备。

此致

7 个答案:

答案 0 :(得分:4)

从你的应用程序中执行此操作可能不是一个好主意 - 设备有一个电源按钮是有原因的,关闭应用程序可能会导致用户混淆和沮丧。

如果您必须这样做,并且您使用的是Windows Mobile 5.0或更高版本,则可以像这样P / Invoke ExitWindowsEx

[Flags]
public enum ExitFlags
{
  Reboot = 0x02,
  PowerOff = 0x08
}

[DllImport("coredll")]
public static extern int ExitWindowsEx(ExitFlags flags, int reserved);

...

ExitWindowsEx(ExitFlags.PowerOff, 0);

答案 1 :(得分:3)

OpenNetCF.WindowsCE.PowerManagement类具有挂起和软重置的方法。它甚至有一种硬件重置的方法!

答案 2 :(得分:1)

ExitWindowsEx API需要注意的另一件事是,只有Windows Mobile Standard(即智能手机)而不支持Windows Mobile Professional(Pocket PC)设备才支持关机。

请参阅MSDN上ExitWindowsEx documentation内有关EWX_POWEROFF标志的特殊说明。我已经在Pocket PC上尝试了几年API,但我很确定它仍处于播放状态。

相反,您可能希望调查使用电源管理API将设备置于较低功耗状态,例如暂停或无人值守模式。你试图以编程方式关闭设备来实现什么目标?

答案 3 :(得分:0)

“普通”Windows API具有ExitWindowsEx()函数。你可能想看看这个。 但似乎它是OEM dependant

答案 4 :(得分:0)

从我读过的文章(几年前)开始,Windows CE实际上并没有被设计为关闭,只是处于暂停的低功耗状态。请记住它用于移动/智能手机,因此它们总是打算开启。

ExitWindowsEx函数可能对您有用,但是:

  • 这是一个本机功能,而不是.Net / Compact Framework。
  • OEM必须实现所需的功能才能使用它。
  • 该功能仅存在于Windows Mobile 5.0操作系统或更高版本,这并不意味着它存在于所有Windows CE设备上。
  

从个人角度来看,我们已经为基于Windows CE的操作系统实现了自己的关机和重启工具。我们必须为它编写大量代码,所以我不希望所有操作系统都存在这种关闭功能。

答案 5 :(得分:0)

我有不同的API方式重新启动和关闭电源(关机)虽然它有一个问题,不知道是什么
private enum SetSystemPowerStateAction
{
    POWER_STATE_ON = 0x00010000,
    POWER_STATE_OFF = 0x00020000,
    POWER_STATE_SUSPEND = 0x00200000,
    POWER_FORCE = 4096,
    POWER_STATE_RESET = 0x00800000
}

[DllImport(“coredll.dll”,SetLastError = true)]
static extern int SetSystemPowerState(string psState,int StateFlags,int Options);

//关闭 // 虽然不确定为什么重新启动 ?? SetSystemPowerState(null,(int)SetSystemPowerStateAction.POWER_STATE_OFF,(int)SetSystemPowerStateAction.POWER_FORCE);

//重新启动 SetSystemPowerState(null,(int)SetSystemPowerStateAction.POWER_STATE_RESET,(int)SetSystemPowerStateAction.POWER_FORCE);

答案 6 :(得分:0)

我尝试了这两个代码,成功关闭了手持设备

Process.Start("cmd", "/c shutdown.exe")
<br/>
Me.Close()