2

Windows Mobile PocketPC が中断されている (または中断されているように見える) 間に、いくつかの C++ コードを実行したいと考えています。私が意味する例は、HTC Audio Manager を使用して mp3 ファイルを再生できるタブを (とりわけ) 表示する HTC Home プラグインです。オン/オフ ボタンを押すと、ディスプレイは黒くなりますが、オーディオは再生され続けます。オンに戻す唯一のボタンは、予想どおりオン/オフ ボタンです。

これまでに試したことは、ハードウェア ボタンの押下をキャプチャし (動作)、ビデオ ディスプレイをオフにする (動作) ことです。このアプローチでうまくいかないのは、(誤って) デバイスのいずれかのキーを押すと、ビデオ ディスプレイがオンになることです。これは、HTC Audio Manager で採用されているアプローチではないと思います。

これが機能するための低レベルの 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:"、シリアル ポート 1 用の "com1:" などです。
  • メッセージ キューを作成し、次を使用して電源通知を要求します。RequestPowerNotifications(hMsgQueue, PBT_POWERINFOCHANGE | PBT_TRANSITION)
  • 電源通知が送信されるたびに、メッセージ キューは type の構造体で満たされますPOWER_BROADCAST
  • メッセージの種類を探しPBT_TRANSITIONます。ユーザーがオフボタンを押すなどしてデバイスがオフになると、フィールドpPwrBrodcast->SystemPowerStateには「unattended」という文字列が含まれます。
  • この遷移では、電話をかけSystemIdleTimerReset()てデバイスに電源を切らないように指示するだけです
  • トランジションが再び発生したときに繰り返す
  • シャットダウンするときは、電話PowerPolicyNotify()して無人モードを終了し、 でデバイスを解放し、 でReleasePowerRequirement()電源通知の受信を停止しStopPowerNotifications()ます。
于 2009-05-27T19:52:17.103 に答える
1

さまざまな電源状態を理解するために、まずこのブログ エントリをご覧ください。基本的に必要なのは、ScreenOff 状態を強制することです。SetSystemPowerState 関数を見てください。

于 2008-12-03T11:01:08.533 に答える