FAQ VCL
Screen Saver (хранитель экрана)

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как узнать Screen Saver, установленный по умолчанию?

uses
  {...,} IniFiles, ShellAPI;

function GetLongFileName( const FileName: string ): string;
var
  aInfo: TSHFileInfo;
begin
   if SHGetFileInfo( PChar( FileName ), 0, aInfo, SizeOf( aInfo ), SHGFI_DISPLAYNAME ) <> 0 then
      Result := string( aInfo.szDisplayName )
   else
      Result := FileName;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Ini: TIniFile;
  ScreenSaverFile: string;
begin
   Ini := TInifile.Create( 'System.ini' );
   ScreenSaverFile := GetLongFileName( Ini.Readstring( 'boot', 'SCRNSAVE.EXE', '(Нет)' ) );
   Ini.Free;
   ShowMessage( ScreenSaverFile );
end;


Как запустить текущий Screen Saver?

procedure TForm1.Button1Click(Sender: TObject);
begin
   SendMessage( Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0 );
end;


Как определить интервал вызова Screen Saver'a?

procedure TForm1.Button1Click(Sender: TObject);
var
  ScreenSaveTimeOut: integer;
begin
   SystemParametersInfo( SPI_GETSCREENSAVETIMEOUT, 0, @ScreenSaveTimeOut, 0 );
   ShowMessage( IntToStr( ScreenSaveTimeOut div 60 ) );
end;


Как включить Screen Saver?

procedure TForm1.Button1Click(Sender: TObject);
begin
   SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, 1, nil, 0 );
end;


Как отключить Screen Saver?

procedure TForm1.Button1Click(Sender: TObject);
begin
   SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, 0, nil, 0 );
end;


Как предотвратить запуск Screen Saver'a во время работы программы?

// Screen Saver блокируется на время работы приложения

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure AppMessage( var Msg: TMsg; var handled: Boolean );
  end;

procedure TForm1.AppMessage( var Msg: TMsg; var handled: Boolean );
begin
   if ( Msg.Message = WM_SYSCOMMAND ) and ( Msg.wParam = SC_SCREENSAVE ) then
      Handled := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Application.OnMessage := AppMessage;
end;

При использовании материала - ссылка на сайт обязательна