How can I shutdown a Windows Mobile device programatically

我只是一个虾纸丫 提交于 2019-12-18 05:13:38

问题


I would like to programatically shutdown a Windows Mobile device using Compact framework 2.0, Windows mobile 5.0 SDK.

Regards,


回答1:


It probably not a great idea to do it from your app - the device has a power button for a reason and shutting down the app can cause user confusion and frustration.

If you must do it, and you are using Windows Mobile 5.0 or later, you can P/Invoke ExitWindowsEx like this:

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

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

...

ExitWindowsEx(ExitFlags.PowerOff, 0);



回答2:


OpenNetCF.WindowsCE.PowerManagement class has methods for suspending and soft reseting. It even has a method for hardware reset!




回答3:


Another thing to note with the ExitWindowsEx API is that shutdown is only supported on Windows Mobile Standard (i.e. Smartphone) and not Windows Mobile Professional (Pocket PC) devices.

See the special notes on the EWX_POWEROFF flag within the ExitWindowsEx documentation on MSDN. I have not tried the API on Pocket PC for a couple of years, but I'm pretty sure that's still the state of play.

Instead you may like to investigate using the power management APIs to put the device into a lower power state, such as suspended, or unattended mode. What are you attempting to achieve by programatically shutting off the device?




回答4:


The "normal" Windows API has ExitWindowsEx() function. You might want to check this out. It appears however that it is OEM dependant.




回答5:


From what I've read (a couple of years ago now) Windows CE is not actually designed to be shutdown as such, just put into a suspended low-power state. Remember its for mobile/smart phones, so they're always meant to be on.

The ExitWindowsEx function could be useful to you, but:

  • It is a native function, not .Net / Compact Framework.
  • The OEM has to implement the required functionality for it to be useful.
  • The function only exists on Windows Mobile 5.0 OS's or better, this does not mean it exists on all Windows CE devices.

Just from a personal perspective at work we've implemented our own shutdown and restart facilities for a Windows CE based OS. We had to write a lot of code for it, so I wouldn't expect this shutdown functionality to exist on all OSes.




回答6:


I have different API way of Rebooting and Powering Off(shutdown) though it has a problem not sure what.

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

// to off
// though am not sure why it REBOOTS??
SetSystemPowerState(null, (int)SetSystemPowerStateAction.POWER_STATE_OFF, (int)SetSystemPowerStateAction.POWER_FORCE);

// to restart
SetSystemPowerState(null, (int)SetSystemPowerStateAction.POWER_STATE_RESET, (int)SetSystemPowerStateAction.POWER_FORCE);




回答7:


I tried these 2 codes, successfully shutdown the handheld

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


来源:https://stackoverflow.com/questions/207542/how-can-i-shutdown-a-windows-mobile-device-programatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!