Создание каскадного меню [утилита Cascade Menu Creator]

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Тогда отказываемся от реализации Shift в принципе.
 

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
Ясно.
Будет утилита старше >vista.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Koza Nozdri, погоди, да ладно - что в XP вообще никак нельзя создать дополнительные пункты?
Даже где-нибуть там в "Создать", чтобы всплывающим списком были... ?
 

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
В создать -в рамках пункта "создать".
А остальное с дополнительными средствами,одним реестром кажется не обойтись.
С помощью реестра только обычные пункты.

Сейчас пробую более дотошно разобраться как это работает(((ммм а что думаешь пунктом создать обойтись?
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
ммм а что думаешь пунктом создать обойтись?
а какие там возможности? В "Создать" тоже нельзя добавлять группу, только пункты (XP)?

И вопрос другого плана. В рамках скрипта "Отправка на FTP" и заданного там вопроса,
группа "Отправить" поддерживает создание подгруппы?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Проверял. Не помогает. Файл ложится в папку. Группа не создается.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,398
Реакции
5,988
Баллы
998
Dragokas, не понятно что вы имеете ввиду под "группа не создаётся". Send to это грубо говоря папка с ярлыками. Там вы можете создать ещё папку, положить внутрь ярлык на нужную вам папку например My best script. Потом нажать на любом файле выбрать в Send To подраздел с названием папки в которую вы положили ярлык на папку My best script и таким образом выбранный вами файл отправится (скопируется) в папку My best script.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
regist, я не знаю, как его грамотно назвать.
Сделал, как Вы написали (скрин).
Мне нужно, чтобы при наведении на "Отправить" -> "Group" -> вот здесь
появлялось еще одно всплывающее контекстное меню (группа) с другими пунктами
(в примере - должен был появится пункт SeekHost).
 

Вложения

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
есть идея,проверяю.нет,не получается.
только интеграция в оболочку.
Могу предложить создать свой пункт "создать"
 

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
Емае ну не работает!
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
У regist-а XP. Может, на нем и работает. Пока не на чем проверить.
 

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
На хр есть опция показывать папки каскадным меню,поэтому у него так.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,398
Реакции
5,988
Баллы
998
Koza Nozdri, настройки папок по умолчанию, аналогично это работало и в более старших системах (windows 95, 98), а в более младших как-то не приходилось Send To использовать.
 

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
ну на вин 8 точно не работает.
причем пробовал переписать через глаголы все равно не читает список.
 

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
Привет)

Начал эту затею давненько,пока обдумал что как будет работать,пока алгоритм обмозговал...
На данном этапе некоторые сложности с грамотной проработкой кода bat,так как я хоть и имею опыт но все же порою пишу довольно деревянненько,а кое что могу вообще не смочь)

Итак твикер:

1)Функционал сводится к созданию пункта контексного меню,с выпадающим списокм и подпунктами.
Каждый блок содержит некоторый шаблон,выбрав который мы помещаем определенный текст в буфер обмена.
Задача не сложная,и даже опытный образец собран и проверен в бою.

2)Твикер должен иметь гибкую систему настройки:
  1. Уметь добавлять или удалять каскадные меню и отдельно пункты
  2. Уметь добавлять пункты вместе с соответствующими ему файлами
  3. Записывать имена имеющихся разделов и пунктов в определенном порядке
Как это выглядит.
Добавить пункты несложно,все видно в приведенном ниже коде
Про файлы соответствующие пункту:
Для работы пункта требуется наличие текстового файла в который пользователь поместит нужный текст и bat файла который будет помещать в буфер обмена содержимое текстового файла.
В этой теме http://safezone.cc/threads/obojti-bag-cmd-i-regedit.23857/ мы разобрались с багом консоли и редактора реестра.
Достаточно иметь по одному исходнику,копируя которые твикер может на базе этих шаблонов создавать новые.

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

Прошу взглянуть опытным взглядом.

Пока что макет скрипта выглядит так:
CMD/BATCH:
@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



:::::::::::::  остальное пока не писал,так как пытаюсь имеющееся до ума довести.
 
Последнее редактирование:

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
CMD/BATCH:
: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
Тут создается двойное каскадное меню,здесь потребуется дополнительно копировать и испортировать заготовленный исходник reg файла,иначе пункт не будет работать:
CMD/BATCH:
echo Windows Registry Editor Version 5.00 >"%~dp0ttools\ishodnik\reg.reg"
echo.>>"%~dp0ttools\ishodnik\reg.reg"
echo ^[^HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\%2menu%]>>"%~dp0ttools\ishodnik\reg.reg"

reg import "%~dp0ttools\ishodnik\reg.reg"
Таким образом мы всегда можем создать нужный твик для импорта ,а далее уже работать непосредственно с reg.exe
 

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
Такой алгоритм не годится - на днях представлю новый,надеюсь даже уже рабочий.
 
  • Like
Реакции: dzu

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
Подскажите почему не работает такая конструкция (где то ошибся):
CMD/BATCH:
reg query "%key2%\%onepunkt1%"
if NOT ERRORLEVEL 1 (call :Dublonepunkt1 ) else (

echo Пункт №1
set /p name_onepunkt1="Ведите имя пункта меню и нажмите клавишу Enter: "

echo Введено "%name_onepunkt1%"
pause
copy "%~dp0ttools\ishodnik\reg.reg" "%~dp0ttools\UserReg\%onepunkt1%.reg"
echo Windows Registry Editor Version 5.00 >"%~dp0ttools\UserReg\%onepunkt1%.reg"
echo.>>"%~dp0ttools\UserReg\%onepunkt1%.reg"
echo ^[^HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\%onepunkt1%]>>"%~dp0ttools\UserReg\%onepunkt1%.reg"
reg import "%~dp0ttools\UserReg\%onepunkt1%.reg"
reg add "%key2%\%onepunkt1%" /ve /d "%name_onepunkt1%" /f 
reg add "%key2%\%onepunkt1%" /v "Icon" /t REG_SZ /d "imageres.dll,104" /f
reg add "%key1%\%name%" /v "SubCommands" /d "%onepunkt1%;AddLog;prochee" /f  )
Вместо %name_onepunkt1% я получаю просто кавычки:Paint2:
 
Сверху Снизу