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

Koza Nozdri, погоди, да ладно - что в XP вообще никак нельзя создать дополнительные пункты?
Даже где-нибуть там в "Создать", чтобы всплывающим списком были... ?
 
В создать -в рамках пункта "создать".
А остальное с дополнительными средствами,одним реестром кажется не обойтись.
С помощью реестра только обычные пункты.

Сейчас пробую более дотошно разобраться как это работает(((ммм а что думаешь пунктом создать обойтись?
 
Последнее редактирование:
ммм а что думаешь пунктом создать обойтись?
а какие там возможности? В "Создать" тоже нельзя добавлять группу, только пункты (XP)?

И вопрос другого плана. В рамках скрипта "Отправка на FTP" и заданного там вопроса,
группа "Отправить" поддерживает создание подгруппы?
 
Проверял. Не помогает. Файл ложится в папку. Группа не создается.
 
Dragokas, не понятно что вы имеете ввиду под "группа не создаётся". Send to это грубо говоря папка с ярлыками. Там вы можете создать ещё папку, положить внутрь ярлык на нужную вам папку например My best script. Потом нажать на любом файле выбрать в Send To подраздел с названием папки в которую вы положили ярлык на папку My best script и таким образом выбранный вами файл отправится (скопируется) в папку My best script.
 
regist, я не знаю, как его грамотно назвать.
Сделал, как Вы написали (скрин).
Мне нужно, чтобы при наведении на "Отправить" -> "Group" -> вот здесь
появлялось еще одно всплывающее контекстное меню (группа) с другими пунктами
(в примере - должен был появится пункт SeekHost).
 

Вложения

  • Context_Group.png
    Context_Group.png
    51.9 KB · Просмотры: 94
есть идея,проверяю.нет,не получается.
только интеграция в оболочку.
Могу предложить создать свой пункт "создать"
 
Сделал, как Вы написали (скрин).
алаверды, смотрим скрин
33a5d0e47eee0a908c3356e2d3407efd.jpg
 
Koza Nozdri, настройки папок по умолчанию, аналогично это работало и в более старших системах (windows 95, 98), а в более младших как-то не приходилось Send To использовать.
 
ну на вин 8 точно не работает.
причем пробовал переписать через глаголы все равно не читает список.
 
Привет)

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

Итак твикер:

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

2)Твикер должен иметь гибкую систему настройки:
  1. Уметь добавлять или удалять каскадные меню и отдельно пункты
  2. Уметь добавлять пункты вместе с соответствующими ему файлами
  3. Записывать имена имеющихся разделов и пунктов в определенном порядке
Как это выглядит.
Добавить пункты несложно,все видно в приведенном ниже коде
Про файлы соответствующие пункту:
Для работы пункта требуется наличие текстового файла в который пользователь поместит нужный текст и bat файла который будет помещать в буфер обмена содержимое текстового файла.
В этой теме https://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



:::::::::::::  остальное пока не писал,так как пытаюсь имеющееся до ума довести.
 
Последнее редактирование:
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
 
Подскажите почему не работает такая конструкция (где то ошибся):
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:
 
Назад
Сверху Снизу