关于Wince的重启问题

        嵌入式操作系统Windows CE和微软的桌面操作系统,譬如windows xp,windows7等相比较,在系统重启与关机方面是明显不同的。在一般的桌面操作系统中,通过开始菜单即可完成系统的睡眠、重启和关机等操作,但是在Windows CE中,只有一个Suspend(挂起)选项,如果想要实现重启关机操作的话,就需要自己写一个应用程序了。

        不过在网上查到的最多的一个方法用我的设备测试是行不通的,至于原因我还没有搞明白,代码如下:

#include <windows.h> 
#include "winioctl.h" 
BOOL KernelIoControl(DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned); 
#define IOCTL_HAL_GET_DEVICE_INFO CTL_CODE(FILE_DEVICE_HAL, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) 
#define IOCTL_HAL_REBOOT CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) 
#define IOCTL_HAL_COLDBOOT CTL_CODE(FILE_DEVICE_HAL, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) 
void WINAPI Reboot (int nBootMode) 
{ 
int inVal; BYTE outBuf[1024]; 
DWORD bytesReturned; //KernelIoControl(IOCTL_HAL_COLDBOOT, &inVal, 4, outBuf, 1024, &bytesReturned); 
if(nBootMode == 0) 
KernelIoControl(IOCTL_HAL_REBOOT, &inVal, 4, outBuf, 1024, &bytesReturned); //热启动
 else KernelIoControl(IOCTL_HAL_COLDBOOT, &inVal, 4, outBuf, 1024, &bytesReturned); //冷启动 
}

          上述代码的思想是通过KerneIoControl函数来实现Windows CE的重启,只是在我的设备上没有起到应有的效果,或者还需要增加某些代码,亦或者需要在定制Windows CE的时候增加某些选项,这就不得而知了。如果以后可以通过上述代码的思想实现重启,我再说明下方法。

          但是问题是需要解决的,所以我从网上查在桌面操作系统下应该如何通过编程来实现重启,然后查到了ExitWindowsEX函数,然而很可惜的是,也是行不通的,当调用这个函数的时候,VS提示找不到该函数。

          经过上述两次的尝试,我又换了一个思路:记得当时在定制wince的时候,有个电源管理选项,不知道系统的重启关机是否和电源选项有关,因此便从网上查电源管理,找了一个函数SetSystemPowerState,于是尝试了一下,结果是可喜的,成功了。

          该函数的原型为:          

DWORD SetSystemPowerState(
  LPCWSTR psState,
  DWORD StateFlags,
  DWORD Options
);

           根据MSDN,该函数只在windows CE中才可以使用。

           在调用这个函数的时候,首先引用头文件pm.h,在这个文件中,可以找到函数原型中第二个参数StatFlags的相关取值:

          #define POWER_STATE(f)           ((f) &  0xFFFF0000)        // power state mask 
          #define POWER_STATE_ON           (DWORD)(0x00010000)        // on state
          #define POWER_STATE_OFF          (DWORD)(0x00020000)        // no power, full off
          #define POWER_STATE_CRITICAL     (DWORD)(0x00040000)        // critical off
          #define POWER_STATE_BOOT         (DWORD)(0x00080000)        // boot state
          #define POWER_STATE_IDLE         (DWORD)(0x00100000)        // idle state
          #define POWER_STATE_SUSPEND      (DWORD)(0x00200000)        // suspend state
          #define POWER_STATE_UNATTENDED   (DWORD)(0x00400000)        // Unattended state.
          #define POWER_STATE_RESET        (DWORD)(0x00800000)        // reset state
          #define POWER_STATE_USERIDLE     (DWORD)(0x01000000)        // user idle state
          #define POWER_STATE_BACKLIGHTON  (DWORD)(0x02000000)        // device scree backlight on
          #define POWER_STATE_PASSWORD     (DWORD)(0x10000000)        // This state is password protected.

         通过如下语句即可实现系统重启:

         SetSystemPowerState(NULL,POWER_STATE_RESET,POWER_FORCE);

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值