如何通过程序关闭Windows Mobile设备

3
我想使用Compact framework 2.0和Windows mobile 5.0 SDK编程地关闭Windows Mobile设备。
问候,
7个回答

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);

3

OpenNetCF.WindowsCE.PowerManagement 类提供了挂起和软重置的方法。它甚至还有一个硬件重置的方法!


1
注意ExitWindowsEx API的另一件事是,关机仅受支持于Windows Mobile Standard(即智能手机),而不支持Windows Mobile Professional(Pocket PC)设备。
请参阅MSDN上ExitWindowsEx文档中有关EWX_POWEROFF标志的特殊说明。我已经多年没有在Pocket PC上尝试过该API了,但我非常确定这仍然是现状。
相反,您可能想要调查使用电源管理API将设备置于较低的电源状态,例如挂起或未被监管的模式。您是想通过编程方式关闭设备来实现什么目的?

0

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

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

0

我有不同的API方式来重新启动和关闭电源,但是它存在一个问题,不确定是什么。

私有枚举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);


0

“正常”的Windows API有ExitWindowsEx()函数,你可能会想要检查一下。 然而,它似乎是基于OEM的


0
从我几年前所看到的信息来看,Windows CE 并没有被设计成可以关机的系统,而是只能处于挂起的低功耗状态。请记住,它是为移动/智能手机设计的,因此它们总是应该开启的。
ExitWindowsEx 函数可能对您有用,但是:
- 它是本地函数,不是 .Net / Compact Framework。 - OEM 必须实现所需功能才能使其有用。 - 该功能仅存在于 Windows Mobile 5.0 操作系统或更高版本上,这并不意味着它存在于所有 Windows CE 设备上。
从个人角度来看,在我们的工作中,为基于 Windows CE 的操作系统实现了我们自己的关闭和重启功能。我们必须编写大量代码,因此我不认为这种关闭功能存在于所有操作系统中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接