2008-12-03 80 views
2

我想運行一些C++代碼,而Windows Mobile PocketPC(或似乎)被暫停。一個例子我的意思是HTC Home插件顯示(其中包括)HTC Audio Manager可用於播放mp3文件的選項卡。當按下開/關按鈕時,顯示屏變黑,但音頻仍在播放。按照預期,唯一可以重新打開的按鈕是開/關按鈕。如何在暫停時在Windows Mobile上運行代碼?

我到目前爲止所嘗試的是捕捉硬件按鈕按下(工作)並關閉視頻顯示器(工作)。這種方法不起作用的是,當意外地按下設備上的任何按鍵時,視頻顯示被打開。我認爲這不是HTC Audio Manager採用的方法。

我猜測一些低級別的API魔術可以工作,或者播放音頻的代碼在某個中斷級別運行,或者設備進入不同的掛起模式。

回答

4

我發現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()
1

首先看看這個blog entry爲了瞭解各種功率狀態。你基本需要的是強制ScreenOff狀態。查看SetSystemPowerState函數。

+0

它的工作原理,我打電話給SetSystemPowerState(NULL,POWER_STATE_IDLE,0); 不幸的是,任何按下的按鍵都會喚醒系統,而不僅僅是電源開/關按鈕,如博客條目中所述。 – vividos 2008-12-18 17:14:12