挂起时如何在Windows Mobile上运行代码? 我想运行一些C++代码,而Windows Mobile PockPC则(或看起来)被挂起。我指的一个例子是HTC Home插件,其中显示了一个选项卡,HTC Audio Manager可用于播放mp3文件。当我按下on/off按钮时,显示屏变黑,但音频仍在播放。正如预期的那样,唯一可以重新打开的按钮是“开/关”按钮

挂起时如何在Windows Mobile上运行代码? 我想运行一些C++代码,而Windows Mobile PockPC则(或看起来)被挂起。我指的一个例子是HTC Home插件,其中显示了一个选项卡,HTC Audio Manager可用于播放mp3文件。当我按下on/off按钮时,显示屏变黑,但音频仍在播放。正如预期的那样,唯一可以重新打开的按钮是“开/关”按钮,c++,windows-mobile,suspend,C++,Windows Mobile,Suspend,到目前为止,我尝试的是捕获硬件按钮按下(工作)并关闭视频显示(工作)。这种方法不起作用的是,当(意外地)按下设备上的任何键时,视频显示会打开。我认为这不是HTC Audio Manager采用的方法 我猜是一些低级API魔术让它起作用,或者播放音频的代码以某种中断级别运行,或者设备进入不同的挂起模式。首先看看这个,以便了解各种电源状态。您基本上需要的是强制关闭ScreenOff状态。请看一下setSystemEmpowerState函数。我在上找到了解释该做什么的源代码,它按预期工作。要点是:

到目前为止,我尝试的是捕获硬件按钮按下(工作)并关闭视频显示(工作)。这种方法不起作用的是,当(意外地)按下设备上的任何键时,视频显示会打开。我认为这不是HTC Audio Manager采用的方法


我猜是一些低级API魔术让它起作用,或者播放音频的代码以某种中断级别运行,或者设备进入不同的挂起模式。

首先看看这个,以便了解各种电源状态。您基本上需要的是强制关闭ScreenOff状态。请看一下setSystemEmpowerState函数。

我在上找到了解释该做什么的源代码,它按预期工作。要点是:

  • 将设备设置为在进入“无人值守”模式时发送通知。这是通过
    PowerPolicyNotify(PPN\u UNATTENDEDMODE,TRUE)
  • 对于无人值守模式下需要的每个设备,请调用
    SetPowerRequirement(L“gpd0:”,D0,POWER\u NAME | POWER\u FORCE,NULL,NULL)
    ;“gpd0:”设备是GPS中间驱动器;使用您需要的任何设备替换或复制呼叫,例如音频设备为“wav1:”,存储卡设备为“dsk1:”,串行端口1设备为“com1:”
  • 使用
    RequestPowerNotifications(hMsgQueue,PBT_POWERINFOCHANGE | PBT_TRANSITION)创建消息队列并请求电源通知
  • 每次发送电源通知时,消息队列都会充满
    power\u BROADCAST
    类型的结构
  • 查找
    PBT\u转换
    消息类型。然后,当设备关闭时(例如用户按下关闭按钮),字段
    pPwrBrodcast->SystemPowerState
    包含一个字符串“无人值守”
  • 在这个转换过程中,只需调用
    SystemIdleTimerReset()
    ,告诉设备不要关闭
  • 再次发生转换时重复此操作
  • 关机时,调用
    PowerPolicyNotify()
    以离开无人值守模式,使用
    ReleasePowerRequirement()
    释放所有设备,并使用
    stopperNotifications()
    停止接收电源通知

它可以工作,我正在调用SetSystemPowerState(NULL,POWER\u STATE\u IDLE,0);不幸的是,任何按下的键都会唤醒系统,而不仅仅是博客条目中描述的开机/关机按钮。