[TVTest + TvtPlay] 朝?起きるとモニタが輝いていた。TvtPlay 再生の終了時はサスペンド(モニターオフ・スリープ)させたい。

基本的には、「消してから寝ましょう」(^◇^;

ながら見してて、そのまま寝てしまうと電気代が無駄なので・・・お前が言うか(゚〇゚;)
省エネしましょ。

TvtPlayで再生終了時の判定拾ってサスペンドさせたいわけです。
どこかに設定があるのかもしれない。

探すのが面倒です・・・(~0~)ネムイ

—-
さっくりできた。作者様に感謝したい。C++わからない私でもでけたにょ~ヽ(*^。^*)ノ

サスペンド設定は普通にこんな感じ。
(こうしないと今回の手法は使えません)
TopMost(最前面)が有効でも、TVTestWindowがアクティブでなくなると省エネ抑止条件から外れる。


TvtPlayのソースを弄る場所はここ。
リピートがないときに、画面が止まったままになるので、ここに、アクティブウィンドウをデスクトップに渡す処理を入れるだけ。

HWND dHwnd = GetDesktopWindow(); // デスクトップのハンドル取得
SetForegroundWindow(dHwnd); // デスクトップにフォーカスを移す

いい仕事した。(_ _).。o○
しばらく使ってみてまた修正するとします。

xtne6f/TvtPlay
https://github.com/xtne6f/TvtPlay

TvtPlay25 – 2018.02.22版

—-2018.11.22 動作変更と最適化とか拡張命令とか

何度かうたたねをして動作確認して、復帰してF11で全画面閉じようとしたらフォーカスが来ていないと・・・ヘ(゚∀゚ヘ)アヒャ
終了時は全画面をやめるように修正してみた。

■ C++はコンパイル時にオプションを指定することができます。
ビルド環境で、AVX2の突っ込みがあったのでコメント画像つけてみた。誤差です。演算量的に体感できるものではありませんので好きなもの使ってください(^◇^;

これでまた少し様子を見る。
※ウィンドウフォーカスの変更は一番最後にする

—-また弄りたいときの・・・(._.) φ メモメモ
case WM_QUERY_CLOSE_NEXT:
/*
pThis->Close();
if (pThis->m_playlist.Next(pThis->IsAllRepeat())) pThis->OpenCurrent();
return 0;
*/

pThis->Close();
if (pThis->m_playlist.Next(pThis->IsAllRepeat())) {
pThis->OpenCurrent();
}
else {
// 再生終了時の処理
/* フルスクリーンをやめてみる→サスペンド無効のままでモニターオフにもならない */
if (pThis->m_pApp->GetFullscreen()) {
pThis->m_pApp->SetFullscreen(false);
}
/* アクティブウィンドウのフォーカスをデスクトップに移す(アクティブ時のみサスペンド抑制にチェックを入れるとこで、終了時に省電力設定が有効になる) */
HWND dHwnd = GetDesktopWindow(); // デスクトップのハンドル取得
SetForegroundWindow(dHwnd); // デスクトップにフォーカスを移す
}
/*
MESSAGE_GETFULLSCREEN, // 全画面表示の状態を取得
MESSAGE_SETFULLSCREEN, // 全画面表示の状態を設定
MESSAGE_GETSTANDBY, // 待機状態であるか取得
MESSAGE_SETSTANDBY, // 待機状態を設定

bool GetFullscreen()
bool SetFullscreen(bool fFullscreen)
bool GetStandby()
bool SetStandby(bool fStandby)
// 常に最前面表示の状態を設定する
bool SetAlwaysOnTop(bool fAlwaysOnTop)

*/

return 0;
case WM_QUERY_SEEK_BGN:
pThis->SeekToBegin();
return 0;
—-