Дата публикации статьи: 09.08.2005 13:42

New Page 1

Валерий Шмелев
Пишем программу на VB для автоматической смены обоев Windows

  • Предисловие

  • Описание

  • Модуль [1]

  • Модуль-инсталлятор [2]

  • Как удалить сервис

  • [Скачать] wallpaper.zip

  • [Скачать] install.zip

  • [Форум] Обсудить в форуме

  • Предисловие

    Для программистов на 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 :

    Shell ("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