2

我想在 Windows Mobile PocketPC 正在(或似乎)被挂起时运行一些 C++ 代码。我的意思的一个例子是 HTC Home 插件,它显示(除其他外)一个选项卡,其中 HTC 音频管理器可用于播放 mp3 文件。当我按下开/关按钮时,显示屏变黑,但音频仍在播放。正如预期的那样,唯一可以重新打开的按钮是开/关按钮。

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

我猜测一些低级 API 魔法可以让它工作,或者播放音频的代码在某个中断级别运行,或者设备进入不同的挂起模式。

4

2 回答 2

4

我在xda-developers 论坛上找到了解释要做什么的源代码,它的工作原理与想象的一样。要点是:

  • 将设备设置为在进入“无人值守”模式时发送通知。这是用PowerPolicyNotify(PPN_UNATTENDEDMODE, TRUE)
  • 对于无人值守模式下您需要的每台设备,请致电SetPowerRequirement(L"gpd0:", D0, POWER_NAME|POWER_FORCE, NULL, NULL);“gpd0:”设备是 GPS 中间驱动程序;用您需要的任何设备替换或复制呼叫,例如“wav1:”用于音频,“dsk1:”用于存储卡或“com1:”用于串行端口 1。
  • 使用创建消息队列并请求电源通知RequestPowerNotifications(hMsgQueue, PBT_POWERINFOCHANGE | PBT_TRANSITION)
  • 每次发送电源通知时,消息队列都会填充一个 type 的结构体POWER_BROADCAST
  • 查找PBT_TRANSITION消息类型。pPwrBrodcast->SystemPowerState然后,当设备关闭时,该字段包含字符串“无人值守”,例如通过用户按下关闭按钮
  • 在这个过渡中,只需打电话SystemIdleTimerReset()告诉设备不要关闭
  • 当转换再次发生时重复
  • 关机时,呼叫PowerPolicyNotify()离开无人看管模式,释放任何设备ReleasePowerRequirement()并停止接收电源通知StopPowerNotifications()
于 2009-05-27T19:52:17.103 回答
1

首先看看这个博客条目,以了解各种电源状态。您基本上需要的是强制 ScreenOff 状态。看看 SetSystemPowerState 函数。

于 2008-12-03T11:01:08.533 回答