Привет)
Начал эту затею давненько,пока обдумал что как будет работать,пока алгоритм обмозговал...
На данном этапе некоторые сложности с грамотной проработкой кода bat,так как я хоть и имею опыт но все же порою пишу довольно деревянненько,а кое что могу вообще не смочь)
Итак твикер:
1)Функционал сводится к созданию пункта контексного меню,с выпадающим списокм и подпунктами.
Каждый блок содержит некоторый шаблон,выбрав который мы помещаем определенный текст в буфер обмена.
Задача не сложная,и даже опытный образец собран и проверен в бою.
2)Твикер должен иметь гибкую систему настройки:
- Уметь добавлять или удалять каскадные меню и отдельно пункты
- Уметь добавлять пункты вместе с соответствующими ему файлами
- Записывать имена имеющихся разделов и пунктов в определенном порядке
Как это выглядит.
Добавить пункты несложно,все видно в приведенном ниже коде
Про файлы соответствующие пункту:
Для работы пункта требуется наличие текстового файла в который пользователь поместит нужный текст и bat файла который будет помещать в буфер обмена содержимое текстового файла.
В этой теме
http://safezone.cc/threads/obojti-bag-cmd-i-regedit.23857/ мы разобрались с багом консоли и редактора реестра.
Достаточно иметь по одному исходнику,копируя которые твикер может на базе этих шаблонов создавать новые.
Например для создания каскадного меню копируется исходник reg.reg ,дописывается строчка с именем пункта через переменную,и сохраняется с аналогичным именем.
Таким же образом сохраняется исходник текстовго и бат файла.
Прошу взглянуть опытным взглядом.
Пока что макет скрипта выглядит так:
@echo off
title Установка меню...
:: список goto
:: Menu - основное меню твика
:: install - инсталляция твика
:: reinstall - перезапись раздела или запись при создании пункта
:: Dubl - переименование раздела если обнаружен дубль,который не надо перезаписать
::setting - нстройки меню
::New2Menu - добавление двойного каскадного меню
::reinstall2 - перезапись раздела или запись при создании пункта двойного каскадного меню
:: остальные пока в процессе
::Блок заданных переменных
set name=KZNZDR
set name2=2menu
set n=0
set key1=HKCR\DesktopBackground\Shell
set key2=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell
:: Основное меню твика
:Menu
echo.
echo Установить или удалить пункт меню?
echo (Введите цифру и нажмите клавишу Enter)
echo.
echo 1. Установить пункт
echo 2. Настроить меню
echo 3. Удалить пункт
echo.
set /p "ch=Ваш выбор: "
if "%ch%"=="1" (goto install || (
echo Ошибка установки.
echo Обратитесь за поддержкой на форум.
pause
exit /b))
if "%ch%"=="2" (goto setting)
if "%ch%"=="2" (goto DelMenu)
if not Defined VerbName (cls
echo Вы выбрали неверное значение.
echo Попробуйте еще раз^:^)
goto Menu)
:: Инсталляция твика
:install
reg query "%key1%" /s /f %name% /k /e
if NOT ERRORLEVEL 1 goto Dubl else call :reinstall
:reinstall
set /p NameMenu="Ведите имя пункта меню: "
echo Введено "%NameMenu%"
copy "%~dp0ttools\ishodnik\reg.reg" "%~dp0ttools\UserReg\%name%.reg"
echo Windows Registry Editor Version 5.00 >"%~dp0ttools\UserReg\%name%.reg"
echo.>>"%~dp0ttools\UserReg\%name%.reg"
echo ^[^HKEY_CLASSES_ROOT\DesktopBackground\Shell\%name%]>>"%~dp0ttools\UserReg\%name%.reg"
reg import "%~dp0ttools\UserReg\%name%.reg"
reg add "%key1%\%name%" /v MUIVerb /d %NameMenu% /f
reg add "%key1%\%name%" /v "SubCommands" /d "redmi;AddLog;prochee" /f
reg add "%key1%\%name%" /v "Icon" /d "imageres.dll,104" /f
pause
exit /b
:: Если при создании меню обнаружилось что такой раздел уже существует
:: Тут требуется доработка в плане рекурсии проверки и выводить в экхо
:: значение параметра /v MUIVerb /d %NameMenu%
:: не получается у меня сделать так что бы проверка была рекурсивной и юыла возможность неоднократно изменять имя раздела
:Dubl
echo Раздел %name% уже существует,перезаписать его или создать новый?
echo.
echo (Введите цифру и нажмите клавишу Enter)
echo.
echo 1. Перезаписать
echo 2. Создать новый
set /p "ch=Ваш выбор: "
if "%ch%"=="1" (
reg delete "%key1%\%name%" /f
call :reinstall
exit /b)
if "%ch%"=="2"(
set /a n+=1
set NewName=%name%_%n&
echo %NewName%
copy "%~dp0ttools\ishodnik\reg.reg" "%~dp0ttools\UserReg\%NewName%.reg"
echo Windows Registry Editor Version 5.00 >"%~dp0ttools\UserReg\%NewName%.reg"
echo.>>"%~dp0ttools\UserReg\%NewName%.reg"
echo ^[^HKEY_CLASSES_ROOT\DesktopBackground\Shell\%NewName%]>>"%~dp0ttools\UserReg\%NewName%.reg"
reg import "%~dp0ttools\ishodnik\%NewName%.reg"
pause
exit /b)
if not Defined VerbName (cls
echo Вы выбрали неверное значение.
echo Попробуйте еще раз^:^)
goto Dubl)
::Настройки меню
:setting
echo.
echo 1. Добавить двойные раскрывающиеся меню? (Не более трех)
echo 2. Добавить объект меню
echo 3. Выполнить настройку объктов меню
echo 4. Удалить объект меню
set /p "ch=Ваш выбор: "
if "%ch%"=="1" (goto New2Menu)
if "%ch%"=="2" (goto NewObject)
if "%ch%"=="3" (goto SettingObject)
if "%ch%"=="4" (goto DelObject)
if not Defined VerbName (cls
echo Вы выбрали неверное значение.
echo Попробуйте еще раз^:^)
goto setting)
:: Добавление двойного раскрывающегося меню
:: Здесь такая же ситуация с дублями разделов,надо научится их переименовывать при необходимости
:New2Menu
pause
reg query "%key2%" /s /f %2menu% /k /e
pause
if NOT ERRORLEVEL 1 goto Dubl else goto reinstall2
:reinstall2
set /p NameMenu="Ведите имя пункта меню: "
echo Введено "%NameMenu2%"
reg add "%key2%\%2menu%" /f
reg add "%key2%\%2menu%" /v "MUIVerb" /t REG_SZ /d %NameMenu% /f
reg add "%key2%\%2menu%" /v "SubCommands" /d "redmi;AddLog;prochee" /f
reg add "%key2%\%2menu%" /v "Icon" /d "imageres.dll,104" /f && cls
goto setting
pause
exit /b
::::::::::::: остальное пока не писал,так как пытаюсь имеющееся до ума довести.