Как написать Screen Saver

Основные требования, предъявляемые к созданию хранителей экранов следующие:

  1. В свойствах вашего приложения необходимо указать заголовок вашего приложения в следующем виде:
      SCRNSAVE: имя

    Где 'имя' - это название вашего хранителя, которое будет отображаться в списке хранителей экранов диалогового окна панели управления Экран (вкладка Заставка). Учтите, что это не заголовок вашего окна, а заголовок приложения, и, соответственно, должен записываться в свойствах проекта.

  2. Используйте расширение .SCR вместо стандартного .EXE, когда компилируете программу. Помещать откомпилированную программу следует в каталог Windows\System (вообще-то, можено её с таким же успехов поместить в каталог Windows, но System приоритетней).

  3. При запуске вашей программы необходимо проверить, единственная ли её копия запущена. Если нет, выгрузите программу из памяти:
       Sub Form_Load()
         If App.PrevInstance Then
            Unload Me ' NEVER use END!
            Exit Sub
         End If
      End Sub
    
  4. В программу будут передаваться следующие ключи (их необходимо корректным образом обрабатывать):

    /c режим настройки - появляется, когда пользователь нажимает кнопку Настройка в диалоговом окне выбора хранителя экрана. (Замечание: когда пользователь нажимает правой кнопкой мыши на файле с расширением .SCR (файл хранителя экрана) и выбирает Сonfigure (Настроить) в программу передаётся пустая командная строка).
    /s режим теста - собственно запускает хранитель экрана
    /p nnn режим предварительного просмотра, где "nnn" - это хэндл на окно предварительного просмотра в диалоговом окне настройки хранителей экранов
    /a nnn защита хранителя экрана паролем, где "nnn" - хэндл на диалоговое окно свойств экрана

 

Когда вы запускаете Screen Saver (ключ /s)

  1. Вам не нужен заголовок окна на форме хранителя экрана. Установите свойство BorderStyle вашей формы в 0 - None.
  2. Вы должны развернуть вашу форму на весь экран. Это можно сделать несколькими путями. Например:
    • Установите свойство WindowState формы в 2 - Maximized
    • В процедуре Form_Load формы запишите следующий код:

      Move 0, 0, Screen.Width, Screen.Height
  3. Вам необходимо спрятать курсор. Для этого используйте следующий код:

    Поместите данную декларационную строку в модуль, либо в вашу форму, но тогда замените ключевое слово Public на Private:
       Public Declare Function  ShowCursor& Lib "user32" (ByVal bShow&)

    И поместите следующий код в процедуру Form_Load формы:

        Do
       Loop Until ShowCursor(False) < -5
    
    

    Замечания: Windows поддерживается счётчик вызовов отображения курсора, число которого увеличивается при вызове данной функции со значением TRUE параметра bShow и уменьшается при вызове функции со значением FALSE. Курсор будет отображаться, если значение счётчика не менее 0.

    Но если же вы работаете в сеансе MS-DOS, когда подходит время для запуска хранителя экрана, вам необходимо хотя бы раз 5 повторить вызов данной функции, чтобы курсор действительно исчез.

  4. Не забудьте вновь отобразить курсор после окончания работы программы:

    В процедуру Form_Unload формы поместите следующий код:

       Do
      Loop Until ShowCursor(True) > 5

    Замечание: Я проверил и оказалось, что необходимо вызывать функцию ShowCursor(True) до тех пор, пока она не возвратит значение, равное 0, тем не менее, если вы хотите быть уверены на все сто, что курсор появится, повторите вызов этой функции ещё раз 5.

  5. Выгружайте Screen Saver из памяти, когда пользователь нажмёт какую-либо клавишу клавиатуры или мыши, либо передвинет указатель мыши. Для этого в процедуры Form_KeyDown и Form_MouseDown формы поместите следующую строку кода:

       Unload Me

    Если вы поместите данную строку кода в процедуруForm_MouseMove формы, то никогда не сможете запустить вашу программу. При загрузке форм раз или два происходит событие MouseMove, таким образом их необходимо игнорировать. В этом вам поможет к примеру следующая интерпретация кода:

       Dim nMouseMove As Long
    
       Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
                                  X As Single, Y As Single)
          If nMouseMove > 2 Then Unload Me
          nMouseMove = nMouseMove + 1
       End Sub
    
Статьи