Створення меню, що розкривається з декількома рівнями укладення
Вище я продемонстрував, як створити спливаюче меню зі списком пунктів. Ці пункти теж можна зробити розкриваються, тобто можливе створення вкладених меню, як показано на малюнку нижче:
Як бачите, в меню є пункт «Диск», який в свою чергу розкриває меню з утилітами для обслуговування диска. Він відділений від інших пунктів роздільником, хоча це не дуже добре видно на малюнку, оскільки пункт виділений. Далі я розповім, як створити таке меню на основі вже викладеного вище матеріалу.
У розділі реєстру HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ CommandStore \ Shell створіть ярлики для двох нових пунктів (Дефрагментація диска і Очищення диска), слідуючи інструкціям в розділі статті «Реєстрація команд в реєстрі». Я назвав підрозділи defrag і cleanmgr.
У тому ж розділі реєстру створіть підрозділ disk-menu (назва може бути будь-яким). Далі все буде дуже схоже на те, що ви проходили в першому розділі статті.
У підрозділі disk-menu створіть строкові параметри:
- MUIVerb для назви меню, наприклад, зі значенням Диск
- Icon для значка меню, наприклад зі значенням imageres.dll, 31
- SubCommands для ярликів цього меню (в даному випадку зі значенням defrag; cleanmgr)
Якщо ви хочете використовувати роздільник, створіть параметр REG_DWORD з ім'ям CommandFlags і шістнадцятковим значенням:
- 20 для розміщення роздільник над пунктом меню
- 40 для розміщення роздільник під пунктом меню
Я задав значення 40, оскільки планую зробити меню першим пунктом і відокремити його від інших.
У реєстрі повинна вийти така картина:
Вкладене меню готове, і залишилося лише вказати на нього посилання в батьківському меню, як було описано в розділі статті «Створення меню, що розкривається і додавання в нього пунктів». Слідуючи за моїм прикладом, в розділі
параметр SubCommands повинен прийняти такий вигляд:
Якщо ви заплуталися або у вас щось не виходить, видаліть створені розділи і параметри, а потім імпортуйте наведений нижче REG-файл.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT \ CLSID \\ shell \ Menu1]
"MUIVerb" = "Система"
"SubCommands" = "disk-menu; regedit; taskmgr; devmgr"
"Icon" = "imageres.dll, 104"
"Position" = "Bottom"
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ CommandStore \ shell \ taskmgr]
@ = "Диспетчер завдань"
"Icon" = "taskmgr.exe"
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ CommandStore \ shell \ devmgr]
@ = "Диспетчер пристроїв"
"Icon" = "devmgr.dll, 4"
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ CommandStore \ shell \ devmgr \ command]
@ = Hex (2): 25,00,53,00,79,00,73,00,74,00,65,00,6d, 00,52,00,6f, 00,6f, 00,74,00 , 25, \
00,5c, 00,73,00,79,00,73,00,74,00,65,00,6d, 00,33,00,32,00,5c, 00,6d, 00,6d, 00, \
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ CommandStore \ shell \ cleanmgr]
@ = "Очищення диска"
"Icon" = "cleanmgr.exe"
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ CommandStore \ shell \ defrag]
@ = "Дефрагментація диска"
"Icon" = "dfrgui.exe"
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ CommandStore \ shell \ disk-menu]
"MUIVerb" = "Диск"
"Icon" = "imageres.dll, 31"
"CommandFlags" = dword: 00000040
"SubCommands" = "defrag; cleanmgr"
Упорядкування пунктів контекстного меню робочого столу і комп'ютера
Якщо ви додасте в контекстне меню робочого столу або комп'ютера кілька окремих пунктів і / або розкриваються меню, то, можливо, у вас виникне ідея розташувати їх в певному порядку. Вище я розповідав, як задати розташування пункту в меню за допомогою параметра Position. Але він впливає на позицію вашого пункту щодо стандартних (вбудованих) пунктів контекстного меню, тобто дозволяє помістити пункт під ними, над ними або десь в середині меню.
Я також розповідав, що порядок окремих пунктів меню, що розкривається можна задати за допомогою параметра SubCommands, перерахувавши їх там в бажаному порядку. Можна сортувати пункти меню, що розкриваються, і я покажу, як це зробити двома різними способами.
Меню робочого столу
Я розберу найскладніший випадок сортування, внизу меню, де крім своїх пунктів грають роль вбудовані. В меню робочого столу у мене створені три меню (Система, Адміністрування та Стандартні програми).
У всіх них задано однакове розташування внизу контекстного меню за допомогою параметра Position.
Примітка. В меню робочого столу упорядкування працює тільки внизу (Position = Bottom) і в середині (Position відсутня).
Однак мої меню перемежовуються зі стандартними пунктами (Дозвіл екрану, Гаджети і Персоналізація), що не дуже зручно. Це відбувається тому, що пункти шикуються в алфавітному порядку відповідних їм підрозділів реєстру.
Щоб змінити порядок меню, потрібно прописати його в якості значення для параметра (За замовчуванням) в розділі
Двічі клацніть параметр (За замовчуванням) і введіть назви розділів меню в реєстрі в бажаному порядку через кому:
Якщо ви хочете прибрати стандартні пункти з меню, доведеться видалити відповідні їм розділи, але я не рекомендую цього робити, звичайно.
Аналогічним способом можна змінити порядок окремих пунктів і розкриваються з контекстного меню комп'ютера. З тією лише різницею, що параметр (За замовчуванням) змінюється в розділі
Однак при цьому в меню комп'ютера стандартний пункт Відкрити зміщується вниз і не виділяється жирним, оскільки порушується вбудований в систему порядок пунктів меню.
Якщо вас це не влаштовує, просто видаліть параметр (За замовчуванням). Він буде відновлений без значення, і пункт Відкрити повернеться на своє місце.
Можна впорядкувати пункти інакше, використовуючи алфавітний порядок назв розділів власних меню. Досить почати назви, наприклад, з останньої букви латинського алфавіту (z) і цифри, що визначає порядок пункту.
В принципі, цей же спосіб можна використовувати і для сортування меню робочого столу.
Готові набори розкривних меню
Я підготував набори REG-файлів, за допомогою яких ви зможете створити будь-який з трьох розкривних меню (або все відразу) в контекстних меню робочого столу і комп'ютера. Меню, що розкриваються мають один рівень вкладеності.
Для управління меню використовується оболонка BS Post Installer.
- створити меню, що розкриваються в контекстному меню робочого столу або комп'ютера
- вибрати, де буде розташовуватися кожне спливаюче меню: вгорі, внизу або посередині контекстного меню
- видалити будь-яке меню, якщо воно вас чимось не влаштує
Я також створив архів з REG-файлами. які використовувалися в статті в якості зразків, включаючи і додатковий рівень вкладеності.