[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 4 месяца
  • Сообщений: 331
  • Репутация:7

    [+] [-]
AZJIO,
aa Спасибо за очередную Вашу полезняшку aa
При разборе полётов af возник один вопрос и несколько предложений
Возможно они будут Вам интересны
Вопрос:
В каком формате заводить расширения для пункта "Типы файлов" если этих расширений несколько ?
Например, когда пункт контекстного меню регистрируется для нескольких расширений (например txt, ini, log и т.п.)
Есть ли возможность использовать *.*
Предложения:
1. Добавить пункт "Редактировать" в контекстное меню для конкретных пунктов в окне "Программы"
Конечно, редактировать можно и через реестр напрямую...
Но в самой "SubMenu Windows 7-10" усё-таки будет удобнее и логичнее
И Очень просится клавиша Клавиша "обновить"
Например, если я меняю название пункта контекстного меню (созданного программой) прямо в реестре (например с AkelPad64 на AkelPad64 AZJIO), то при включенной программе в списке программ он не меняется
То же самое, если меняю наименование самого куста в shell (например - из u.AkelPad64 решил сделать u.AkelPad64 AZJIO)
Приходится перезапускать "SubMenu Windows 7-10"
2. Выбор пользовательской иконки для конкретной программы вместо оригинальной иконки программы, как это реализовано сейчас.
Например, если я сделал несколько пунктов к разным сборкам AkelPad, то в контекстном меню проводника они все будут с одной и той же иконкой. А хотелось бы с разными ...
ah
3. Возможность ручной сортировки списка программ
И перетягивание мышкой конкретного пункта окна "Программы" на предназначенное ему место.
Сейчас список программ после перезапуска утилиты автоматом встаёт в алфавитном порядке.
А хотелось бы в том, который нужен мне ...
4. Возможность иметь разделители в списке программ, которые потом будут выводиться в контекстное меню (ну типа полоски между пунктами меню)
Визуальная группировка программ с помощью таких разделителей будет гораздо нагляднее, чем простой список
5. Иметь Возможность регистрировать не один пункт в меню "программы", а сразу несколько
Например с CTRL выделил несколько пунктов в окне "Программы" и зарегистрировал их сразу все.
Сейчас каждый пункт проходить приходится по отдельности


Последний раз редактировалось: rekshd (2021-11-27 04:40), всего редактировалось 6 раз(а)

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
90079Исправил. Удаляется и пустое
Большое спасибо ay
не только за этот момент, а за все доработки (и за программу в целом, само собой))
PS: присоединяюсь к просьбам #3 и #4 товарища rekshd (хотя бы #3), и тоже интересует момент касаемо ввода нескольких расширений, предусмотрено ли это, и если да, то в каком виде их вводить? собственно, именно множественный ввод расширений интересует больше всего

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 4 месяца
  • Сообщений: 331
  • Репутация:7

    [+] [-]
AZJIO,
Заметил пару неясностей в ветке [HKEY_CLASSES_ROOT\*\shell\OpenActions]
Например, в этой ветке был какой-то пункт меню, созданный "SubMenu Windows 7-10"
Если Затем этот пункт был вручную изменён в реестре (например было изменено название пункта),
то программа при дальнейшей работе не удаляет его, а дописывает в реестре следующие пункты меню за этим пунктом и они становятся не видны в контекстном меню проводника
aq
Пример:
Изначально я вбил для "C:\Windows\System32\cmd.exe" название пункта в меню программы "cmd S32"
Затем я переименовал его через реестр в "cmd Sytem32";
поменял и название пункта и название куста в shell (из u.cmd S32 в u.cmd Sytem32) - иначе "SubMenu Windows 7-10" показывала старое наименование программы
"SubMenu Windows 7-10" после перезапуска новое название подхватила, но пункты в контекстном меню проводника были не видны ...
Вот что было в ветке [HKEY_CLASSES_ROOT\*\shell\OpenActions] до переименования
"SubCommands"="u.Virus Total Uploader;u.cmd S32;u.cmd SysWOW64"
После переименования получилось
"SubCommands"="u.Virus Total Uploader;u.cmd S32;u.cmd SysWOW64;u.cmd Sytem32"
Такая конструкция показывает тока первый пункт, Хотя в программе видны все три пункта и программа честно говорит, что усе пункты уже в меню.
Удалил напрямую в реестре переименованный лишний пункт (u.cmd S32;).
Получилось следующее
"SubCommands"="u.Virus Total Uploader;u.cmd SysWOW64;u.cmd Sytem32"
и усё заработало - показывает все три пункта меню и они все рабочие
Добавлено через 1 час 24 минуты 48 секунд:
Усё ! az Выяснил окончательно и пошел спать au
Если из уже имеющего списка программ "Удалить программу из списка", не сделав перед этим для неё "Удалить пункт из меню",
то следовавшие за этой программой пункты меню перестают быть видны в контекстном меню проводника ...
Лечится ручным удалением в реестре остатков записи об этой программе в узле [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\OpenActions] ветка "SubCommands"

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
rekshd
Пока занят новой утилиткой, но возможно сделать кнопку "валидация", то есть проверка исправности параметров. Это частично сравнимо с кнопкой "Экспорт", пробежаться по реестру в поисках всех меню, проверить в них набор программ и проверить что эти программы существуют в разделе списка программ. Изначально зная как устроено система построения меню очень очевидно, что добавив новое название (1 раз) это не заставит появится это в нескольких типах расширений файлов, очевидно что в них есть какая то ссылка на этот пункт, а значит её тоже надо поправлять. То есть либо делать самостоятельно, зная что происходит, либо доверится программе, ведь я же не могу предугадывать и делать кучу защит от неизвестно чего. Также учесть что не я делаю к примеру невидимыми пункты, а винда, так как это движок винды, который она предложила пользователям использовать и требует подчиняться их правилам, а я лишь сделал это программно для удобства, зная, куда что прописать чтобы это работало и не вспоминать каждый раз заново формат этих записей, так как через год начинаешь снова гуглить и читать куда что прописывать, да ещё ручная работа.
На счёт прописать сразу в несколько расширений идея интересная, то есть через запятую указать несколько "txt, ini, cfg, log". Но сейчас как вариант можно сделать экспорт в reg-файл и там тупо дублировать блоки (Ctrl+D) и подменять расширения и разом добавить. Кстати там же можно увидеть и другие косяки, например забыл прописать иконку меню, скопировал строку с пропиской иконки и вставил в каждый блок, где её нет. А потом можно даже иные иконки указать как хотел. Я просто не вижу смысла менять иконки, так как изначально ты их видишь сразу и знаешь что это меню дополнительных программ, а если это будет выглядеть по разному, то путаница.
И кстати на счёт пакетного добавления меню для текстовых файлов "txt, ini, cfg, log" или для медиа, или для архивов, то тут можно подумать как это оформить через ini-файл, в нём указать типы расширений, а в интерфейсе проги предлагать добавить меню одной из групп родственных файлов.

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 4 месяца
  • Сообщений: 331
  • Репутация:7

    [+] [-]
возможно сделать кнопку "валидация", то есть проверка исправности параметров
Это самое то, что нужно ay
На счёт прописать сразу в несколько расширений идея интересная, то есть через запятую указать несколько "txt, ini, cfg, log"
Точнее не сформулируешь bs
Кстати, снимаю вопрос по *.* поскольку в пункте "все файлы*" уже сейчас можно спокойно прописать любую программу и у любых файлов она окажется в меню
Я просто не вижу смысла менять иконки, так как изначально ты их видишь сразу и знаешь что это меню дополнительных программ, а если это будет выглядеть по разному, то путаница.
Ну у меня, например, ручками сделаны в контекстном меню ссылки на три разные сборки AkelPad, которые я использую для разных задач. И у каждого пункта своя иконка и название, чтоб быстро можно было визуализировать чем открывать просматриваемый или редактируемый файл. Если б я не сделал через реестр эти разные иконки, то эти пункты пришлось бы различать тока по названиям. Родная иконка то у AkelPad одна и таже.
на счёт пакетного добавления меню для текстовых файлов "txt, ini, cfg, log" или для медиа, или для архивов, то тут можно подумать как это оформить через ini-файл, в нём указать типы расширений, а в интерфейсе проги предлагать добавить меню одной из групп родственных файлов.
ДА, так будет оптимально
Добавлено через 7 минут 16 секунд:
Также учесть что не я делаю к примеру невидимыми пункты, а винда, так как это движок винды, который она предложила пользователям использовать и требует подчиняться их правилам, а я лишь сделал это программно для удобства,
Я вообще не могу и не имею претензий к Вам. Вы делаете отличное дело.
Но раз уж Винда по своей натуре любит делать нам подлянки, то есть смысл учесть этот момент в Вашей программе.
И кнопка Валидация параметров будет самое то af
Сейчас то я найду в регфайле этот косяк сразу, а первоначально пришлось поиграть в игру "Найди 10 отличий" пока я не понял где винда сделала подлянку. ag
Благо играть в такие игры я люблю
Добавлено через 26 минут 56 секунд:
А как насчёт управляемого порядка следования пунктов в меню "Программы" ?
В своё время мне подобную операцию пришлось это делать через ручную правку регфайла.
У себя для трех разных AkelPad-ов сделал три узла
[b]HKEY_CLASSES_ROOT\*\shell\Z1[/b]
[b]HKEY_CLASSES_ROOT\*\shell\Z2[/b]
[b]HKEY_CLASSES_ROOT\*\shell\Z3[/b]
Теперь эти пункты в контекстном меню проводника всегда идут в том порядке, который я им указал
Я это финт с реестром подсмотрел у Sodrumа ah
Ведь SubMenu Windows 7-10 уже сейчас добавляет префикс u к программе
Насколько сложно интегрировать такой управляемый порядок пунктов ?
Тогда пункты как в меню "Программы", так и в генерируемом контекстном меню будут в том порядке,
который выбрал конкретный пользователь. А не в том, который нам навязывают господа из MS

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
rekshd
Пункты в том порядке в котором они добавлялись. Чтобы изменить порядок надо изменить их порядок в параметре SubCommands. То есть можно было бы экспортировать данные и изменять порядок или при добавлении проги нажать кнопку "Смотреть последнюю запись в реестре" и править в самом реестре, в том числе удалить добавленную прогу, которая добавлена, чтобы прога сделала запись в реестр и можно было прыгнуть в неё. Хотя можно сделать лишнюю кнопку, чтобы прыгнуть в реестр выбрав расширение файла. В любом случае изменение порядка не проблема. Если делать это типа программно, то будет много когда, а прибыток не большой, то есть создавать вызов дочернего окна, в нём элемент списка, парсить строку по элементам, выдать в список, прописать функций перетягивания элементов в окне (рассказать пользователю что такое возможно) или сделать кнопки вверх/вниз для перемещения элемента, прописать эти события по работе с новым окном в основной цикл событий, разделив события по принадлежности окна. В общем всё возможно, только насколько стоит эта игра свеч.
уже сейчас добавляет префикс u к программе
это сделано для того чтобы моя программа не добавляла в свой интерфейс другие программы созданые авторами других прог, в том числе и виндовые, там список в разы больше, какой смысл добавлять этот мусор, который будет мешать выбирать ваши проги?
Кстати можно сделать копию проги и в настройках изменить префикс и значок и имя меню, тогда можно генерировать второе меню.

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 4 месяца
  • Сообщений: 331
  • Репутация:7

    [+] [-]
Если делать это типа программно, то будет много когда, а прибыток не большой
Если кодировать много, то тогда под себя буду править ручками в реестре. не беда ar

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
rekshd, идейка следующая: чтобы упростить кодирование, не создавая дочерних окон если при указании расширения файла будет префикс "=" например "=архивы", то прога из ini возьмёт данные параметра "архивы", то есть архивы=zip,rar. Если в строке есть запятая, то идёт перечисление расширений. Также надо сделать возможность множественного выбора программ в списке, тогда будет за раз сформировано меню. Но тогда непонятно как установить порядок прог в меню. Пробелы в строке будут удалятся, так что они мешать не будут, а может и их использовать как разделитель.
Может в ini добавить список путей к прогам? И добавить кнопку импортирования прог, тогда формирование списка прог будет тоже автоматизировано. Прога только проверяет существование файлов и добавляет существующие. То есть можно добавить очень много прог, чтобы на любом компе все необходимое было добавлено. Ну и добавить флаг "спрашивать", чтобы при перечислении добавляемых соглашаться (enrer) или пропускать.

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 4 месяца
  • Сообщений: 331
  • Репутация:7

    [+] [-]
AZJIO,
идейка следующая: чтобы упростить кодирование, не создавая дочерних окон если при указании расширения файла будет префикс "=" например "=архивы", то прога из ini возьмёт данные параметра "архивы", то есть архивы=zip,rar. Если в строке есть запятая, то идёт перечисление расширений.
Как говорят - Просто и со вкусом.
af
Но тогда непонятно как установить порядок программ в меню. Пробелы в строке будут удалятся, так что они мешать не будут, а может и их использовать как разделитель.
А можно для этого использовать цифры ? Ведь префикс то уже есть.
То есть сейчас, например, пишется так:
u.программа1
u.программа2
и т.д.
А если сделать так:
u1.программа1
u2.программа2
и т.д.
То проги и будут в установленном пользователем порядке
Получится такая конструкция ? ah

@@@@@@@

Добавлено через 16 минут 23 секунды:
Может в ini добавить список путей к прогам? И добавить кнопку импортирования прог, тогда
формирование списка прог будет тоже автоматизировано. Прога только проверяет существование файлов и добавляет существующие. То есть можно добавить очень много прог, чтобы на любом компе все необходимое было добавлено. Ну и добавить флаг "спрашивать", чтобы при перечислении добавляемых соглашаться (enrer) или пропускать.
А вот так будет вообще круто. Делаешь пресет к порташкам один раз и усё !!! ar

@@@@@@@

Добавлено через 33 минуты 4 секунды:
Пробелы в строке будут удалятся, так что они мешать не будут, а может и их использовать как разделитель.
Лишние пустоты в виде разделителя увеличат вертикальный размер контекстного меню, что не есть гуд...
Может Лучше вот так сделать ?

Эти разделители перед и после тотала реализованы через реестр следующим регфайлом:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Total Commander]
"Icon"="D:\\Portable\\Total Commander\\Totalcmd.ico"
"Position"="Top"
@="Total Commander 8.51a"
"SeparatorBefore"=""
"SeparatorAfter"=""
[HKEY_CLASSES_ROOT\*\shell\Total Commander\Command]
@="D:\\Portable\\Total Commander\\Totalcmd.exe /O /T /P=L \"%1\""
Правда, для вложенных меню синтаксис будет немного другой...
Тама должно быть для появления разделителя кажись так:
"CommandFlags"=dword:00000020
Пример - полный регфайл для очистки ревизитов папки :
Windows Registry Editor Version 5.00
; Очистить все файловые атрибуты
[HKEY_CLASSES_ROOT\Directory\shell\Attributes\shell\003flyout]
"MUIVerb"="Удалить все атрибуты только для папки"
[HKEY_CLASSES_ROOT\Directory\shell\Attributes\shell\003flyout\command]
@="cmd /c attrib -r -a -s -h -i \"%1\""
[HKEY_CLASSES_ROOT\Directory\shell\Attributes\shell\004flyout]
"CommandFlags"=dword:00000020
"MUIVerb"="Удалить все атрибуты для папки, вложенных папок и файлов"
[HKEY_CLASSES_ROOT\Directory\shell\Attributes\shell\004flyout\command]
@="cmd /c attrib -r -a -s -h -i \"%1\" & attrib -r -a -s -h -i \"%1\\*.*\" /s /d"

@@@@@@@

ah Прошу перечитать пост, поскоку я его подредактировал и уточнил некоторые мысли ... ah


Последний раз редактировалось: rekshd (2021-11-30 22:35), всего редактировалось 1 раз

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
Тестовая версия (на яндексе), сильно не тестил, те функции которые изменял конечно же проверял. Ещё предстоит улучшение.
1. Сообщения пока не убирал, но если добавлять пакетно приходится жать Enter, например для 10 расширений добавляем 5 пунктов, соответственно жмём 50 раз, а то и 100. Также если запись уже есть то тоже сообщение что прога есть в списке, надо флаг "по тихому".
2. Удаление тоже пакетно. Для теста экспортируем в рег-файл все свои меню, и далее можно обнулить разными методами либо укзав список раширения программе, либо как я перед путями разделов реестра добавил минус [-HK... а потом стал добавлять/удалять группами. Работает перечисление расширений "wav mp3", работает из ini, то есть "=музыка", аналогично и удаление. Два плюсика - импорт прог из ini.
3. Текст заголовка указания расширений не умещается. Буду изменять.
Еще хотел "Дублировать расширение", тут выбираем допустим txt как исходное и например log как назначение, полезно в случае если меню уже добавлено, но надо добавить для какого нибудь нового расширения. То есть ничего не настраивая просто скопировать SubCommands реестра из одного в другое.
Подумываю кнопку "Удалить все меню" - полезно для эксперимента и может для дела, чтобы переделать заново.
90138@@@@
убери лишние, у меня теперь тема расширилась на 2 экрана, чтобы читать надо горизонтальный ползунок двигать то вправо то влево на каждой строке. У меня шрифт крупный, а экран 1280
Ещё обновил, добавил флаг NoMultiMB=1, который запрещает показ диалоговых окон для пакетных обработок.

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 4 месяца
  • Сообщений: 331
  • Репутация:7

    [+] [-]
AZJIO,
убери лишние
Так лучше стало ? Извиняюсь - не подумал о меньших разрешениях экрана... У меня то 1920...
Строчку этих цветных собак сделал, чтоб визуально разделить разные мысли в одном посте.
Если этот разделитель будет коротким (как сейчас), то будет ли так удобно ?
Пошёл тестить обнову af
Добавлено через 45 минут 54 секунды:
Пути тестовая версия сканирует корректно.
Имеющиеся у меня программы она нашла. неИмеющиеся - не добавила.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
rekshd, в крайнем случае можно через десять пробелы вставлять, тогда хотя бы они будут на новую строку переносится.
Ещё обновил, пункт "Удалить программу из списка" тоже удаляет все выделенные. И функцию удалить/добавить пункт объединил в одну, разделив действия флагами, всего то 2 кб сэкономил, но и логику писать для одной функции легче.

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 4 месяца
  • Сообщений: 331
  • Репутация:7

    [+] [-]
После переключения NoMultiMB = с 1 на 0 в SubMenuWin7_10_x64.ini и при наличии уже имеющегося списка программ SubMenu Windows 7-10 x64 при запуске сразу вылетает с ошибкой.
После удаления ручками в реестре этих записей программа запускается.
Эта же версия для "все файлы" меню создаёт прекрасно, а вот для "Типы файлов" ни в какую ...


Последний раз редактировалось: rekshd (2021-11-30 23:45), всего редактировалось 1 раз

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
90176 при запуске сразу вылетает с ошибкой
Точнее напиши как воспроизвести проблему. Я удаляю пункты, добавляю, у меня ничего не падает. При NoMultiMB = 0

[Цитировать]

    rekshd
  • 19892
  • Стаж: 5 лет 4 месяца
  • Сообщений: 331
  • Репутация:7

    [+] [-]
Точнее напиши как воспроизвести проблему. Я удаляю пункты, добавляю, у меня ничего не падает. При NoMultiMB = 0
Да это какой то глюк был. Сейчас перегрузил машину (она у меня заморожена так что все изменения анулируются)
Завёл снова с регфайла старый список из версии от 261121. Без вылетов ...

Страница 3 из 12


Показать сообщения:    

Текущее время: 25-Апр 14:58

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы