Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
VBS

Смена иконки в контекстном меню

16.07.2020, 22:57. Показов 5668. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При использовании этого скрипта в контекстном меню создаётся пункт "Показать расширения" и ему присваивается иконка.
При клике по этому пункту наименование пункта "Показать расширения" меняется на "Скрыть расширения", и обратно.
Помогите, если это возможно, сделать так, что бы иконка тоже менялась.

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
' Если скрипт запущен с каким-то параметром, то...
If WScript.Arguments.Count>0 Then
    ' Проверяем значение в реестре и в зависимости от него либо отображаем расширения, либо наоборот скрываем.
    If WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt") = 0 then
    ' Скрываем расширения
    WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt", "1", "REG_DWORD"
    ' Добавляем пункт в контекстное меню
    ' В поле command прописываем путь до текущего скрипта с параметром (не важно каким, главное, чтобы он был), чтобы..
    ' ..скрипт понял, что ему нужно не удалить ветку реестра, а изменить
    WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\", "Показать расширения", "REG_SZ"
    WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\command\", "WScript.exe """&WScript.ScriptFullName&""" -argument", "REG_SZ"
    ' Обновляем окно эксплорера, чтобы увидеть результат
    WSHShell.SendKeys "{F5}"
    Else
    ' Показываем расширения
    WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt", "0", "REG_DWORD"
    ' Добавляем пункт в контекстное меню
    WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\", "Скрыть расширения", "REG_SZ"
    WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\command\", "WScript.exe """&WScript.ScriptFullName&""" -argument", "REG_SZ"
    ' Обновляем окно эксплорера, чтобы увидеть результат
    WSHShell.SendKeys "{F5}"
    End If
Else
    ' Если запись в реестре есть, то удаляем наш раздел
    If WSHShell.Run("cmd.exe /C REG QUERY ""HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt""", 0, True)=0 Then
        WSHShell.Run "cmd /C REG DELETE ""HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt"" /f", 0
    Else
        ' Иначе запускаем этот скрипт с параметром (какой параметр - значения не имеет, главное его наличие)
        WSHShell.Run """"&WScript.ScriptFullName&""" -argument"
        ' И ещё добавим иконочку для красоты
        WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\Icon", "%SystemRoot%\System32\imageres.dll,406", "REG_SZ"
    End If
End if
Set WSHShell = Nothing
WScript.Quit(0)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.07.2020, 22:57
Ответы с готовыми решениями:

Иконки в контекстном меню
Уже обсуждалась тема добавление пункта в контекстное меню. https://www.cyberforum.ru/vb-net/thread550270.html Я так и не понял как...

Смена флажка (CheckBox) в контекстном меню
Итак, есть у меня контекстное меню (ContexMenu) в котором имеются несколько разделов. У каждого раздела я хотел бы видеть флажок при...

Как сделать каскадное меню в контекстном меню Internet Explorer
Доброго времени суток уважаемые форумчане! Подскажите как сделать каскадное меню в контекстном меню Internet Explorer. В интернете куча...

40
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 09:56
Студворк — интернет-сервис помощи студентам
Здрасьте, приехали. А как тогда понимать это?:
Цитата Сообщение от BKPB Посмотреть сообщение
Как всегда, Спасибо.
"Не название пункта не меняется" — т. е. название меняется? И проблема именно в иконке и выполнении команды?
При этом выполняется всё на Раб. столе?
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 10:02  [ТС]
Первую задачу ведь решили.
А со вторым у меня ничего не получалось, и я уже хотел бросить, поэтому так и написал.
А сегодня решил, что нужно доделать.

Добавлено через 5 минут
Скрипт HideFileExt работает и на Рабочем столе и в папке.
При клике по пункту Показать расширение, меняется икона и название пункта на Скрыть расширение и обратно.
Как мне и нужно.
А Hide, ничего этого не делает, ни каких изменений.
Единственное, что он делает, это добавляет в меню пункт и иконку.
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 10:15
Цитата была ответом на мой:
Цитата Сообщение от FlasherX Посмотреть сообщение
Нет такого отличия, отличия в другом.
Это означает, что у вас неверный код, иначе бы вы увидили совсем уную разницу.
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 10:17  [ТС]
Дайте пожалуйста, тот который работает.
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 10:21
Суть обоих скриптов одна и та же. Разница только в названиях ключа, пунктов меню и индекса свойства GetSetting. В остальном то же самое. Сделайте копипаст и проверьте ещё раз.
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 10:28  [ТС]
У меня не работает, а у вас ?
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 10:36
У меня из-за определённых системных особенностей оба работать не будут, поэтому я даже не смогу их проверить.
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 10:56  [ТС]
А у вас есть возможность посмотреть через удалённый доступ ?
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 12:43
BKPB, выяснил причину. Дело в том, что GetSetting для 1 почему-то смотрит свойство в админской учётке. Убрал:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit: Dim K, W, I
Const Hive1 = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden"
Const Hive2 = "HKCU\Software\Classes\Directory\Background\shell\Hidden"
 
With CreateObject("WScript.Shell")
If WSH.Arguments.Count Then
   If .Regread(Hive1) = 1 Then K = 0: W = "Не п": I = 2 Else K = 1: W = "П": I = 1
   .RegWrite Hive1, K, "REG_DWORD"
   .RegWrite Hive2 & "\", W & "оказывать скрытые файлы и папки", "REG_SZ"
   .RegWrite Hive2 & "\command\", "WScript.exe """ & WSH.ScriptFullName & """ 1", "REG_SZ"
   .RegWrite Hive2 & "\Icon", "%WinDir%\RRT\" & I & ".ico", "REG_SZ"
   .SendKeys "{F5}"
Else
   On Error Resume Next: .Regread Hive2
   If Err.Number = 0 Then .RegDelete Hive2 & "\" Else .Run """" & WSH.ScriptFullName & """ 1"
End If
End With
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 13:03  [ТС]
FlasherX, сейчас иконка меняется, название пункта в меню меняется, а скрытые файлы всё равно не отображаются.

Добавлено через 15 минут
Вот скрипт который работает, им я пользуюсь сейчас.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
' Если скрипт запущен с каким-то параметром, то...
If WScript.Arguments.Count>0 Then
    ' Проверяем значение в реестре и в зависимости от него либо отображаем скрытые папки, либо наоборот убираем.
    If WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden") = 1 then
    ' Скрываем папки
    WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden", "0", "REG_DWORD"
    WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden", "2", "REG_DWORD"
    ' Добавляем пункт в контекстное меню
    ' В поле command прописываем путь до текущего скрипта с параметром (не важно каким, главное, чтобы он был), чтобы..
    ' ..скрипт понял, что ему нужно не удалить ветку реестра, а изменить
    WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\", "Показать скрытые файлы", "REG_SZ"
    WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\command\", "WScript.exe """&WScript.ScriptFullName&""" -argument", "REG_SZ"
    ' Обновляем окно эксплорера, чтобы увидеть результат
    WSHShell.SendKeys "{F5}"
    Else
    ' Скрываем папки
    WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden", "1", "REG_DWORD"
    WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden", "1", "REG_DWORD"
    ' Добавляем пункт в контекстное меню
    WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\", "Не показывать скрытые файлы", "REG_SZ"
    WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\command\", "WScript.exe """&WScript.ScriptFullName&""" -argument", "REG_SZ"
    ' Обновляем окно эксплорера, чтобы увидеть результат
    WSHShell.SendKeys "{F5}"
    End If
Else
    ' Если запись в реестре есть, то удаляем наш раздел
    If WSHShell.Run("cmd.exe /C REG QUERY ""HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden""", 0, True)=0 Then
        WSHShell.Run "cmd /C REG DELETE ""HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden"" /f", 0
    Else
        ' Иначе запускаем этот скрипт с параметром (какой параметр - значения не имеет, главное его наличие)
        WSHShell.Run """"&WScript.ScriptFullName&""" -argument"
        ' И ещё добавим иконочку для красоты
        WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\Icon", "%SystemRoot%\System32\imageres.dll,406", "REG_SZ"
    End If
End if
Set WSHShell = Nothing
WScript.Quit(0)
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 13:07
Цитата Сообщение от BKPB Посмотреть сообщение
а скрытые файлы всё равно не отображаются.
Дело не в этом. Просто перепутал местами названия:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit: Dim K, W, I
Const Hive1 = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden"
Const Hive2 = "HKCR\Directory\Background\shell\Hidden"
 
With CreateObject("WScript.Shell")
If WSH.Arguments.Count Then
   If .Regread(Hive1) = 1 Then K = 0: W = "П": I = 1 Else K = 1: W = "Не п": I = 2
   .RegWrite Hive1, K, "REG_DWORD"
   .RegWrite Hive2 & "\", W & "оказывать скрытые файлы и папки", "REG_SZ"
   .RegWrite Hive2 & "\command\", "WScript.exe """ & WSH.ScriptFullName & """ 1", "REG_SZ"
   .RegWrite Hive2 & "\Icon", "%WinDir%\RRT\" & I & ".ico", "REG_SZ"
   .SendKeys "{F5}"
Else
   On Error Resume Next: .Regread Hive2
   If Err.Number = 0 Then .RegDelete Hive2 & "\" Else .Run """" & WSH.ScriptFullName & """ 1"
End If
End With
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 13:09  [ТС]
Всё равно не отображаются.

---------------------------
Windows Script Host
---------------------------
Сценарий: C:\Users\Администратор ПК\Desktop\Hide ieframe.dll.vbs
Строка: 9
Символ: 4
Ошибка: Неверная ссылка на корень в разделе реестра "HKCR\Directory\Background\shell\Hidden" .
Код: 80070005
Источник: WshShell.RegWrite

---------------------------
ОК
---------------------------
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 13:12
Т. е. если на рабочем столе разместить скрытый файл, потом в нём жать ПКМ и выбирать этот пункт меню, то ничего не произойдёт?
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 13:15  [ТС]
Нет не так, если кликать на Рабочем столе или внутри папки, то должны отображаться скрытые файлы.
Это тоже самое, что во вкладке окна Вид поставить галочку на пункт Скрытые файлы.
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 13:20
Я в курсе. Вот это странно: "Ошибка: Неверная ссылка на корень в разделе реестра"
На 7-ке подобного нет. Скрипт там отрабатывает на обычной учётке — свитч срабатывает.
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 13:32  [ТС]
Сейчас попробую перезпгрузиьься

Добавлено через 9 минут
А у вас есть возможность посмотреть через удалённый доступ ?
Что бы вы увидели сто да как
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 13:43
Давайте пока так ещё попробуем:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option Explicit: Dim Hive1, Hive2, K, W, I, x
Hive1 = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
Hive2 = "HKCR\Directory\Background\shell\Hidden"
 
On Error Resume Next
With CreateObject("WScript.Shell")
   .Regread Hive2: If Err.Number <> 0 Then Err.Clear:_
   Hive2 = "HKCU\Software\Classes\Directory\Background\shell\Hidden"
If WSH.Arguments.Count Then
   If .Regread(Hive1 & "Hidden") = 1 Then K = 0: W = "П": I = 1 Else K = 1: W = "Не п": I = 2
   For Each x in Split(" ShowSuper"): .RegWrite Hive1 & x & "Hidden", K, "REG_DWORD": Next
   .RegWrite Hive2 & "", W & "оказывать скрытые файлы и папки", "REG_SZ"
   .RegWrite Hive2 & "\command", "WScript.exe """ & WSH.ScriptFullName & """ 1", "REG_SZ"
   .RegWrite Hive2 & "\Icon", "%WinDir%\RRT" & I & ".ico", "REG_SZ"
   .SendKeys "{F5}"
Else
   .Regread Hive2
   If Err.Number = 0 Then .RegDelete Hive2 & "" Else .Run """" & WSH.ScriptFullName & """ 1"
End If
End With
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 13:47  [ТС]
Нет приложения, сопоставленного с этим файлом для выполнения этого действия. Установите приложение или, если оно уже установлено, создайте связь на странице параметров приложений по умолчанию.
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
18.07.2020, 14:00
Лучший ответ Сообщение было отмечено BKPB как решение

Решение

Форум опять крайние бэкслэши потёр.
Дубль два:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option Explicit: Dim Hive1, Hive2, K, W, I, x
Hive1 = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\"
Hive2 = "HKCR\Directory\Background\shell\Hidden"
 
On Error Resume Next
With CreateObject("WScript.Shell")
   .Regread Hive2: If Err.Number <> 0 Then Err.Clear:_
   Hive2 = "HKCU\Software\Classes\Directory\Background\shell\Hidden"
If WSH.Arguments.Count Then
   If .Regread(Hive1 & "Hidden") = 1 Then K = 0: W = "П": I = 1 Else K = 1: W = "Не п": I = 2
   For Each x in Split(" ShowSuper"): .RegWrite Hive1 & x & "Hidden", K, "REG_DWORD": Next
   .RegWrite Hive2 & "\", W & "оказывать скрытые файлы и папки", "REG_SZ"
   .RegWrite Hive2 & "\command\", "WScript.exe """ & WSH.ScriptFullName & """ 1", "REG_SZ"
   .RegWrite Hive2 & "\Icon", "%WinDir%\RRT\" & I & ".ico", "REG_SZ"
   .SendKeys "{F5}"
Else
   .Regread Hive2
   If Err.Number = 0 Then .RegDelete Hive2 & "\" Else .Run """" & WSH.ScriptFullName & """ 1"
End If
End With
1
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 269
18.07.2020, 14:09  [ТС]
FlasherX, работает !!!
Благодарю вас от всей души.

Добавлено через 4 минуты
Спрошу на последок, в этом скрипте команда просто Hidden или SuperHidden ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.07.2020, 14:09

Меню поиска в контекстном меню Windows 7
Привет! У меня такая проблема. Я работаю с текстовыми файлами, которые находятся в разных папках. Раньше в WinXP я вызывал контекстное меню...

Посторонний текст и иероглифы в меню "Параметры" и в контекстном меню в Word 2007
Здравствуйте! Проблема такая, когда вставляю любой текст в ворд 2007, то когда нужно выбрать пункт &quot;сохранить только текст&quot;...

Х64 в контекстном меню
В контекстном меню 64-битные программы &quot;прячутся&quot; в подменю Х64. Часть из них создает свои пункты и там, и тут. А некоторые, например,...

Иконка в контекстном меню
Здравствуйте! Пытаюсь прилепить картинку к контекстному меню MenuItem mnuEdit = new MenuItem(); mnuEdit.Name = &quot;contEdit&quot;; ...

Иероглифы в контекстном меню
Добрый день! во общем нуждаюсь в вашей помощи, в контекстном меню появились эти самые китайские иероглифы,


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru