Hi
I would like to programatically shutdown a Windows Mobile device using Compact framework 2.0, Windows mobile 5.0 SDK.
Regards,
Hi
I would like to programatically shutdown a Windows Mobile device using Compact framework 2.0, Windows mobile 5.0 SDK.
Regards,
The "normal" Windows API has ExitWindowsEx() function. You might want to check this out. It appears however that it is OEM dependant.
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:
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.
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);
OpenNetCF.WindowsCE.PowerManagement
class has methods for suspending and soft reseting. It even has a method for hardware reset!
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?
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);