2024/04/24「多機能ファイラーAs/Rの魅力と活用法」を出版、KView32公開

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

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をコピーしました