Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Автозамена ключа в реестре
RushДата: Суббота, 06 Июня 2009, 15:07 | Сообщение # 1
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Баловался тут с ММВ и в ходе этого баловства получилось и кое-что полезное. :)
Собственно, в примере все описано.
Code
***** Заполнение переменных *****
** ветка реестра (например, автозагрузка)
section$='hkcu\Software\Microsoft\Windows\CurrentVersion\Run'
** ключ
key$='VDMAuto'
** значение (маршрут этого приложения)
value$='<SrcDir>\\'+CBK_AppFileName
** файл (например, заполненной базы, который нужен для работы)
base$='<SrcDir>\base.ini'
***** Собственно, работа *****
** запуск проверки из командной строки (надо писать параметры
** очень тщательно, иначе их легко сделать неработоспособными)
p$='hide,wait /c for /f "tokens=1,3,*" %a in (\'reg query "'+section$+'" /v '+key$+'\') do (echo %a | find /c "'+key$+'" > <Temp>\rq.tmp & echo %b %c | find /i /c "'+value$+'" >> <Temp>\rq.tmp)'
Run("cmd","p$")
** проверка существования ключа
key=VAL(StrFromFile(<Temp>\rq.tmp,1,1))
** проверка значения на нужный маршрут
path=VAL(StrFromFile(<Temp>\rq.tmp,2,1))
** проверка файла на нулевую длину (или существование)
ini$=StrFromFile(base$,1,-1)
lenfile=LEN(ini$)
** запись ключа реестра, если проверка соответствует таким критериям:
**   1) если ключа не существует, а база не нулевая
**   2) если ключ существует, а маршрут не соответствует текущему расположению
If (key<lenfile | path<key) Then
    p$='wait,hide /c reg add "'+section$+'" /v '+key$+' /t reg_sz /d "'+value$+'" /f'
    Run("cmd","p$")
End
** удаление временного файла
Run("cmd","hide /c del <Temp>\rq.tmp /q")
** в принципе, основное здесь - автоматическая замена ключа при изменении
** расположения приложения. Если база не нужна, то вместо key<lenfile
** надо использовать key=0
Прикрепления: arks.zip (1.2 Kb)


Сообщение отредактировал Rush - Суббота, 06 Июня 2009, 15:15
 
  • Страница 1 из 1
  • 1
Поиск: