代码之家  ›  专栏  ›  技术社区  ›  vividos

挂起时如何在Windows Mobile上运行代码?

  •  2
  • vividos  · 技术社区  · 17 年前

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

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

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

    2 回复  |  直到 17 年前
        1
  •  4
  •   vividos    17 年前

    我在上找到了源代码 xda-developers forum 这就解释了该做什么,而且它是按想法工作的。要点是:

    • 将设备设置为在进入“无人参与”模式时发送通知。这是用来做的 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)
    • 每次发送电源通知时,消息队列都会填充类型为的结构 POWER_BROADCAST .
    • 寻找 PBT_TRANSITION 消息类型。田地 pPwrBrodcast->SystemPowerState 然后包含一个字符串“无人值守”,例如,当设备关闭时,用户按下“关闭”按钮。
    • 在这个过渡期,只要打电话 SystemIdleTimerReset() 告诉设备不要关机
    • 再次发生转换时重复
    • 关机时,请拨打 PowerPolicyNotify() 要退出无人值守模式,请释放具有 ReleasePowerRequirement() 停止接收电源通知 StopPowerNotifications() .
        2
  •  1
  •   kgiannakakis    17 年前

    首先看看这个 blog entry 为了了解各种功率状态。您基本上需要的是强制屏幕关闭状态。请看一下setSystemEmpowerState函数。

    推荐文章