Пишем простой cкринсейвер

Скринсейвер (или хранитель экрана) - это, по сути, обычная программа, в которой определены несколько специальных процедур для обработки сообщений, посылаемых ОС, при запуске и конфигурировании скринсейвера.
Программы-скринсейверы обычно хранятся в директории %WINDIR%\System32 и обладают расширением .scr. Таким образом, при переходе на страницу выбора заставки, Windows ищет в системной директории все файлы с соответствующим расширением и формирует из них список возможных скринсейверов. Также следует упомянуть несколько важных аспектов написания.

– Скринсейвер должен экспортировать функции ScreenSaverConfigureDialog, ScreenSaverProc.
– Название скринсейвера в окне настройки определяется строковым ресурсом с идентификатором IDS_DESCRIPTION, который должен быть равен 1.
– Идентификатор диалогового окна, которое будет появляться при нажатии клавиши "Параметры", т.е. при попытке настроить скринсейвер, должен быть DLG_SCRNSAVECONFIGURE и равняться числу 2003.
– Программа также должна содержать реализацию функции RegisterDialogClasses.

В принципе, почти всё это описано в MSDN. В нашем скринсейвере будет изображена вращающаяся изометрическая проекция куба. Выглядеть результат будет следующим образом:

Экран выбора скринсейвера


Настройки скринсейвера

Результат работы

Теперь рассмотрим сам код. Для начала подключим необходимые файлы, укажем lib-файлы, необходимые при линковке, и определим несколько констант.

Также неплохо было бы реализовать сохранение настроек, которые мы будем хранить в реестре.

Перейдем к основной процедуре, которая вызывается при запуске скринсейвера.

Теперь функция, которая вызывается при нажатии кнопки "Параметры", и функция RegisterDialogClasses, которая в этом примере не используется и просто возвращает TRUE.

И, наконец, экспортируем необходимые функции через .def-файл.

Внимательный читатель, наверное, заметил, что я не привел содержимое файла ресурсов, но это не имеет особого смысла, так как он был полностью сгенерирован визуальным редактором MSVC за исключением нескольких констант.

Исходный код и бинарник: скачать

Пишем простой cкринсейвер: 17 комментариев

  1. странное дело, на 2х мониторах не работает.
    Т.е. просто включается чёрный экран и всё. Шевелишь мышкой - выключается. Такой вот глюк.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *