New Page 1
Валерий Шмелев
Пишем программу на VB для автоматической смены обоев Windows
Предисловие
Для программистов на Visual Basic предлагается руководство по
разработке программы для автоматической смены оформления Windows Desktop.
Пошагово описан процесс разработки инсталлятора, модуля работы с wallpapers и
рассмотрены области применения программы – в частности, для рекламы. Руководство
ориентировано на программистов с начальным уровнем подготовки.
Описание
На самом деле задача состоит в написании не одной, а двух
программ – модуля, располагаемого на компьютере пользователя [1] и в
определенные даты производящего смену оформления рабочего стола Windows и
модуля-инсталлятора [2], размещающего основной модуль на компьютере и
производящего установку необходимых параметров.
Каждый из модулей может быть написан на разных языках
программирования – Visual Basic, Delphi, Java Script, Windows Script, C++. В
данном руководстве описан процесс разработки модулей на Visual Basic 6.0 – для
ОС Windows 2000 и Windows XP нет необходимости с программами на VB
распространять огромную динамическую библиотеку – все вызовы обрабатываются
самой операционной системой (ОС). Модуль [1], располагаемый на компьютере
пользователя и выполняющий замену оформления, выполняется один раз при старте OC
Windows и завершает свою работу.
Модуль [1]
Модуль [1], располагаемый на компьютере пользователя и
выполняющий замену оформления, очень простой. В нем производится проверка
текущей даты и, если она совпадает с заданной, заменяется оформление рабочего
стола Windows.
Private Sub Form_Load()
rundate = Date 'Получить ДАТУ на компьютере
If Mid(rundate, 1, 2) = "30" Then 'Т.е. записывать выполнять каждое 30-е число каждого месяца
ChangeWallPaper "c:\oflameron-1024.bmp", "Center" 'Разместить картинку по центру экрана
End If
End 'Выйти из программы
End Sub
Функция ChangeWallPaper вызывается из модуля Module1.bas (см.
файл wallpaper.zip). Обратите внимание, что графический файл для Desktop должен
быть в формате .bmp.
Здесь предложен самый простой вариант размещаемого модуля.
Для коммерческого продукта следует предусмотреть текстовый файл параметров,
содержащий список файлов обоев, даты загрузки, параметры размещения имиджа на
экране (по центру, во весь экран и т.п.) Кроме того, можно предусмотреть
проверку текущего видеорежима (размера экрана) и подключать графические имиджи,
соответствующие установленному разрешению.
Модуль-инсталлятор [2]
Инсталлятор размещает модуль [1] на компьютере пользователя и
выполняет запись в реестр Windows для его загрузки при старте операционной
системы. Размещение модуля [1] выполняется сразу при загрузке формы Form1.
Private Sub Form_Activate()
AutoSet ' Сделать запись в реестре Windows XP (смотрите далее)
'Создать BAT-файл для копирования и переименования загружаемого модуля
indx = 1
Str1(0) = "copy demo.ttl c:\demo.ttl" 'Скопировать модуль[1] на диск C:\
Str1(1) = "c:"
Str1(2) = "cd c:\"
Str1(3) = "ren demo.ttl demo.exe" 'Переименовать модуль[1] в EXE
For i = 0 To 3 ‘В файле setup.bat будет 4 строки команд
Str1(i) = Str1(i) + Chr$(13) + Chr$(10)
Open "setup.bat" For Binary As #1 Len = Len(Str1(i)) ‘Создать файл setup.bat
Put #1, indx, Str1(i) 'Записать BAT-файл надиск
indx = indx + Len(Str1(i)) 'Номер следующей записи
Close #1 ‘Закрыть setup.bat файл
Next i
Shell ("setup.bat") 'Запустить BAT-файл на исполнение
End Sub
Изначально инсталлируемый модуль (программа [1]) - demo.ttl.
Инсталлятор (программа [2]) записывает на диск командный файл setup.bat
записывает в него стандартные команды (известные еще с MS DOS):
copy demo.ttl c:\demo.ttl - скопировать модуль (программу [1]) на диск C:
c: - сменить текущий диск на C:
cd c:\ - сменить текущий каталог (если предполагается размещать модуль в
подкаталоге)
ren demo.ttl demo.exe - переименовать модуль (программу [1]) в исполняемый файл
Теперь достаточно выполнить командный файл setup.bat :
Эта процедура будет правильно работать только в
компилированном варианте. В режиме интерпретатора VB по умолчанию будет
использоваться некорректный путь на диске (путь к интерпретатору). Задачу
размещения модуля [1] на компьютере можно решить и другими способами, без
использования BAT-файлов. Но продемонстрированный здесь код универсален и может
быть легко переписан на другие языки программирования – Delphi, C++.
Теперь нужно сделать запись в реестре Windows для автозагрузки модуля [1].
Private Sub AutoSet()
'Создать запись в реестре Windows XP или 2000 для запуска модуля при старте Windows
LSkey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" ' Auto RUN
secattr.nLength = Len(secattr) ' size of the structure
secattr.lpSecurityDescriptor = 0 ' default security level
secattr.bInheritHandle = True ' the default value for this setting
'--------------------------------------------------------
retval = RegCreateKeyEx(HKEY_LOCAL_MACHINE, LSkey, 0, "", 0, KEY_WRITE, secattr, hregkey, neworused)
If retval <> 0 Then ' error during open
Debug.Print "Error opening or creating registry key -- aborting."
End ' terminate the program
End If
stringbuffer = "C:\demo.exe" & vbNullChar ' Путь, где располагается модуль (после исполнения setup.bat)
retval = RegSetValueEx(hregkey, "Demo", 0, REG_SZ, ByVal stringbuffer, Len(stringbuffer)) ' write the string
' Close the registry key
retval = RegCloseKey(hregkey)
'-----------------------------
End Sub
Работа с реестром Windows выполняется стандартным способом.
Путь для автозагрузки модуля [1].
stringbuffer = "C:\demo.exe" & vbNullChar
На этом описание минимальной конфигурации инсталлятора
модуля[2] завершена.
Полный проект с листингом модуля-инсталлятора – в файле install.zip.
Как удалить сервис
Для удаления записи автозагрузки модуля [1] demo.exe следует
использовать тот же листинг на Visual Basic, но с "пустой" записью имени
запускаемой программы. Либо использовать следующий JAVA script (текстовый файл с
расширением .js , например clear.js):
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Popup("Снимаем Автозагрузку");
WSHShell.RegWrite("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\Demo", "");
Достаточно просто создать такой файл и исполнить его.
Валерий Шмелев
E-Mail:
cardclub@mail.ru
WWW: www.oflameron.ru