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

Воскресенье, 20. Ноябрь 2011
Раздел: C/C++, Windows, автор:

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

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

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

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


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

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

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

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

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

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

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

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

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

 Обсудить на форуме


Получать обновления на почту:     

Комментариев: 15 к “Пишем простой cкринсейвер”


  1. Cracker :

    Наконец-то ежедневный рефреш этого блога принес какие-то плоды.

    [Ответить]

    Игорь:

    Советую подписать на RSS ленту ;)

    [Ответить]

    Cracker:

    Я не ищу легких путей

    [Ответить]


  2. Redemption :

    Просто Крякер петушок

    [Ответить]

  3. Слушай напиши мне на почту Kaimi
    есть предложение.

    [Ответить]

    Kaimi:

    Я не пользуюсь почтой, если что-то надо - пиши в icq.

    [Ответить]


  4. fucking shit :

    каими, а почему не заюзал opengl?

    [Ответить]

    Kaimi:

    Я сначала думал его использовать, но потом передумал. Нет конкретной причины.

    [Ответить]


  5. Анатолий Косынкин :

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

    [Ответить]

    Анатолий Косынкин:

    btw, win7 pro x64

    [Ответить]

    azesmbog:

    в настройках цвет RGB хотя бы больше 40 выстави.
    Не глюк - а фича получается))

    [Ответить]

  6. У меня тоже не работает... RGB выставил

    [Ответить]

    Kaimi:

    Не везет. На XP SP3 x86, Win 7 SP1 x64 с одним монитором проблем не наблюдается.
    На Vista x64 с двумя мониторами тоже.

    [Ответить]


  7. Player :

    Win7 x64 просто черный екран

    [Ответить]

    Kaimi:

    А у миня норм

    [Ответить]


Оставьте ваш комментарий