1

単純なはずだったと思いました。PCを強制的にスクリーンセーバーモードにし、D2006)アプリでチェックインしている条件が満たされたら終了します。うまくいかないようです:

    if ScreenSaverExitRequested then
        begin
        SystemParametersInfoResult := SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @ScreenSaverIsRunning, 0);
        if ScreenSaverIsRunning then
            begin
            SystemParametersInfoResult := SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, UINT(false), nil, SPIF_SENDWININICHANGE);
            end ;
        end ;
....
    if ScreenSaverEntryRequested then
        begin
        SystemParametersInfoResult := SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, 1, nil, SPIF_SENDWININICHANGE) ;
        end ;

SystemParametersInfoResultは、いずれの場合もtrueを返します。SystemParametersInfoの呼び出しは効果がないようです。[コントロールパネルの表示プロパティ]ダイアログの[プレビュー]ボタンを使用してPCをSSモードにした場合、コードを実行しても何も起こりません。

4

1 に答える 1

3

SPI_SETSCREENSAVEACTIVEは、実際にはスクリーンセーバーを開始/停止しません。これは、実際のスクリーンセーバーが呼び出して、実行中または終了中であることをOSに通知するためのものです。スクリーンセーバーを開始するには、WM_SYSCOMMAND / SC_SCREENSAVEメッセージをGetDesktopWindow()ウィンドウに送信してみてください。

于 2010-08-20T02:08:44.853 に答える