这里有三种方式可以重启Mobile 设备。
KernelIoControl (IOCTL_HAL_SOFT_RESET, NULL, 0, NULL, 0, NULL)
方法2:
ExitWindowsEx(EWX_REBOOT, 0); //重启
ExitWindowsEx(EWX_POWEROFF, 0); //关机
方法3:
SetSystemPowerState(NULL,POWER_STATE_RESET,POWER_FORCE);//重启
SetSystemPowerState(NULL,POWER_STATE_OFF,POWER_FORCE);//关机
SetSystemPowerState
SetSystemPowerState
[DllImport(
"
Coredll.dll
"
)]
public
static
extern
int
SetSystemPowerState(
string
psState, SystemPowerStateFlags StateFlags,
uint
Options);
public
const
uint
POWER_FORCE
=
0x00001000
;
public
enum
SystemPowerStateFlags :
uint
{
POWER_STATE_ON
=
0x00010000
,
//
on state
POWER_STATE_OFF
=
0x00020000
,
//
no power, full off
POWER_STATE_CRITICAL
=
0x00040000
,
//
critical off
POWER_STATE_BOOT
=
0x00080000
,
//
boot state
POWER_STATE_IDLE
=
0x00100000
,
//
idle state
POWER_STATE_SUSPEND
=
0x00200000
,
//
suspend state
POWER_STATE_UNATTENDED
=
0x00400000
,
//
Unattended state.
POWER_STATE_RESET
=
0x00800000
,
//
reset state
POWER_STATE_USERIDLE
=
0x01000000
,
//
user idle state
POWER_STATE_BACKLIGHTON
=
0x02000000
,
//
device scree backlight on
POWER_STATE_PASSWORD
=
0x10000000
//
This state is password protected.
}
调用
NativeMethods.SetSystemPowerState(null, NativeMethods.SystemPowerStateFlags.POWER_STATE_RESET, NativeMethods.POWER_FORCE);
ExitWindowsEx
ExitWindowsEx
[DllImport(
"
aygshell.dll
"
)]
public
static
extern
bool
ExitWindowsEx(ExitWindowsExFlags uFlags,
int
dwReserved);
public
enum
ExitWindowsExFlags :
uint
{
EWX_REBOOT
=
2
,
//
This flag is not supported on a Windows Mobile-based Pocket PC.
EWX_POWEROFF
=
8
}
调用
NativeMethods.ExitWindowsEx(NativeMethods.ExitWindowsExFlags.EWX_REBOOT,
0
);
KernelIoControl
KernelIoControl
public
const
uint
FILE_DEVICE_HAL
=
0x00000101
;
public
const
uint
METHOD_BUFFERED
=
0
;
public
const
uint
FILE_ANY_ACCESS
=
0
;
public
static
uint
CTL_CODE(
uint
DeviceType,
uint
Function,
uint
Method,
uint
Access)
{
return
((DeviceType
<<
16
)
|
(Access
<<
14
)
|
(Function
<<
2
)
|
Method);
}
[DllImport(
"
Coredll.dll
"
)]
public
extern
static
bool
KernelIoControl
(
uint
dwIoControlCode,
IntPtr lpInBuf,
uint
nInBufSize,
IntPtr lpOutBuf,
uint
nOutBufSize,
ref
uint
lpBytesReturned
);
private
bool
ResetPocketPC()
{
uint
bytesReturned
=
0
;
uint
IOCTL_HAL_REBOOT
=
CTL_CODE(FILE_DEVICE_HAL,
15
, METHOD_BUFFERED, FILE_ANY_ACCESS);
return
KernelIoControl(IOCTL_HAL_REBOOT, IntPtr.Zero,
0
, IntPtr.Zero,
0
,
ref
bytesReturned);
}