2024/06/03 電子書籍「電子書籍出版・技術文書作成を劇的に加速!秀丸エディタ + Markdown + Pandocの驚異」を出版

スクリーンセーバーの起動の禁止

C++Builder

アプリケーションからスクリーンセーバーを禁止するには、Timerイベントの中で以下のコードを記述する事で可能でしたが、Windows10では禁止出来なくなっていました。

    // スクリーンセーバーの起動の禁止
    POINT pos;

    ::GetCursorPos(&pos);
    ::SetCursorPos( pos.x, pos.y );
}

様々な情報を調査した結果、SetThreadExecutionStatea関数を利用することでスクリーンセーバの起動を防ぐことが可能であることがわかりました。以下に、アプリケーションからスクリーンセーバの起動を禁止する方法を説明します。

SetThreadExecutionStatea関数を使用したスクリーンセーバーの禁止

以下の様に、Timerイベントの中からSetThreadExecutionStatea関数を定期的に呼ぶ事で、スクリーンセーバーを禁止する事か可能でした。

void __fastcall TSDIAppForm::Timer1Timer(TObject *Sender)
{
    // スクリーンセーバーの起動の禁止
    SetThreadExecutionState(ES_DISPLAY_REQUIRED);
}

SetThreadExecutionState関数のヘルプ

SetThreadExecutionState関数のヘルプです。

SetThreadExecutionState 関数 (winbase.h) - Win32 apps
アプリケーションが使用中であることをシステムに通知し、アプリケーションの実行中にシステムがスリープ状態に入ったり、ディスプレイをオフにしたりできないようにすることができます。

参考URL

以下のURLも参照ください。

タイトルとURLをコピーしました