Что нового

контекстное меню

gilgul

Новичок
Сообщения
6
Репутация
1
Можно ли с помощью AutoIt добавить своё подменю в контекстное меню windows? Как это сделано например в WinRar (скриншот в прицепе)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Можно. Для этого, необходимо прописаться в реестре.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
gilgul
А конкретнее можно, какой пункт контекстного меню Вам нужен, и какое действие по этому пункту.
 
Автор
G

gilgul

Новичок
Сообщения
6
Репутация
1
madmasles сказал(а):
gilgul
А конкретнее можно, какой пункт контекстного меню Вам нужен, и какое действие по этому пункту.
Мне нужен не дополнительный пункт, а дополнительное меню как на скриншоте


Добавлено:
Сообщение автоматически объединено:

Garrett сказал(а):
Можно. Для этого, необходимо прописаться в реестре.
можно подробнее?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Обычной правкой реестра тут не обойстиль.
Я для этой цели использую внешний модуль Fast Explorer (рус.). Как оно интегрируется в AutoIt можно посмотреть в моей утилите Toggle Hidden Files & Files Extension .
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
gilgul сказал(а):
Garrett сказал(а):
Можно. Для этого, необходимо прописаться в реестре.
можно подробнее?
У вас какая версия Windows?
Для семёрки есть решение, по добавлению в контекстное меню выпадающего каскадного меню. Для XP я сейчас затрудняюсь сказать, нужно полазить в реестре :smile:
Однако вот пример для XP, простое добавление пунктов в контекстное меню:


Добавлено:
Сообщение автоматически объединено:

CreatoR
Интересная ссылочка, надо глянуть :smile:
 
Автор
G

gilgul

Новичок
Сообщения
6
Репутация
1
CreatoR сказал(а):
Обычной правкой реестра тут не обойстиль.
Я для этой цели использую внешний модуль Fast Explorer (рус.). Как оно интегрируется в AutoIt можно посмотреть в моей утилите Toggle Hidden Files & Files Extension .
Про Fast Explorer знал, но как использовать догадаться не мог, :smile: , спасибо! :ok:
 
Автор
G

gilgul

Новичок
Сообщения
6
Репутация
1
Ещё вопрос, а можно ли отловить появление контекстного меню, чтобы на лету менять название своего пункта? Например при вызове его на какой-нибудь папке или файле в названии пункта было имя папки или файла
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
gilgul [?]
при вызове его на какой-нибудь папке или файле в названии пункта было имя папки или файла
Для этого нужно назначить несколько разных пунктов, в реестре на папки и на файлы это разные ветки. Почитай документацию к Fast Explorer, там должно быть сказано как это сделать.
 

Fever

Скриптер
Сообщения
308
Репутация
112
Creator

Извените, но я так и не понял что делает Ваша программа, никаких изменений в меню не заметил
ОС: Windows Vista
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486

Fever

Скриптер
Сообщения
308
Репутация
112
Должны появится пункты в меню проводника (меню по «Shift + F10» к примеру).

Значит на висте ваш код не работает

OffTopic:
Старые версии Fast Explorer на висте также не работают, только новая
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Fever [?]
Старые версии Fast Explorer на висте также не работают, только новая
А что мешает обновить её в программе?

В аттаче исходники с обновлённой версией.
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Указанные в документации дополнительные параметры, конкретно субменю и другие не работают... или я не понял как их сделать рабочими.

CreatoR
Нужно было подсказать, что скрипт всего лишь конфигурирует ini и регистрирует dll. В эксплорере свойство, пока не перегрузить оболочку она НЕ будет использовать новые данные о регистрации DLL, и два часа в реестре искал пункты и dll перепотрошил, а она из донлоад зарегистрировалась, а новый каталог (C:\Program Files) игнорирует и все пункты использует из донлоад, где первый раз зарегистрировалась.

С помощью установочного дистрибутива Fast-Explorer всё настроил в том числе суб-меню. А в качестве параметров поддерживается %1, а значит для скрипта можно получить путь/имя файла...
Недостатки: сильно тормозит открытие меню за счёт чтения файла конфигурации с харда.
 

aleratorio

Осваивающий
Сообщения
85
Репутация
43
Вот вариант:

Код:
;Проверяем есть ли параметры командной строки (передаются системой при выборе пункта)
$message = "Выбран "
If $CmdLine[0] <> 0 Then
	Switch $CmdLine[1]
		Case "-folder"
			$message &= "каталог: "
		Case "-drive"
			$message &= "диск: "
		Case "-file"
			$message &= "файл: "
		Case "-txtfile"
			$message &= "текстовый файл: "
	EndSwitch
	MsgBox(0,"", $message & $CmdLine[2])
Else
	;Проверяем интеграцию в меню
	If RegRead("HKCR\Directory\shell\Для каталога\command", "") = "" Then
		If MsgBox(32 + 1, "", "Добавить пункты в контекстное меню?") = 2 Then Exit
                            ;Собственно добавление пунктов меню:
		RegWrite("HKCR\Directory\shell\Для каталога\command", "", "REG_SZ",  @ScriptDir & '\testmenu.exe -folder "%1"')
		RegWrite("HKCR\Drive\shell\Для диска\command", "", "REG_SZ", @ScriptDir & '\testmenu.exe -drive "%1"')
		RegWrite("HKCR\*\shell\Для всех файлов\command", "", "REG_SZ", @ScriptDir & '\testmenu.exe -file "%1"')
		RegWrite("HKCR\txtfile\shell\Для текстового файла\command", "", "REG_SZ", @ScriptDir & '\testmenu.exe -txtfile "%1"')
	Else
		If MsgBox(32 + 1, "", "Удалить пункты из контекстного меню?") = 2 Then Exit
		RegDelete("HKCR\Directory\shell\Для каталога")
		RegDelete("HKCR\Drive\shell\Для диска")
		RegDelete("HKCR\*\shell\Для всех файлов")
		RegDelete("HKCR\txtfile\shell\Для текстового файла")
	EndIf
EndIf

только надо скомпилировать скрипт под именем testmenu.exe, т.к. записи в реестре ссылаются на testmenu.exe

Картинка:

В Windows 7 (Не знаю, может и в Vista) можно сделать так:
Код:
RegWrite("HKCR\txtfile\shell\Для текстового файла", "MUIVerb", "REG_SZ", "Открыть ->")
RegWrite("HKCR\txtfile\shell\Для текстового файла", "Icon", "REG_SZ", @WindowsDir & "\write.exe")
RegWrite("HKCR\txtfile\shell\Для текстового файла", "SubCommands", "REG_SZ", "notepad;wordpad")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell\notepad", "", "REG_SZ", "В блокноте")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell\wordpad", "", "REG_SZ", "В wordpad-e")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell\notepad", "icon", "REG_SZ", @WindowsDir & "\notepad.exe")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell\wordpad", "icon", "REG_SZ", @ProgramFilesDir & "\Windows NT\Accessories\wordpad.exe")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell\notepad\command", "", "REG_SZ", @WindowsDir & '\notepad.exe "%1"')
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell\wordpad\command", "", "REG_SZ", @ProgramFilesDir & '\Windows NT\Accessories\wordpad.exe "%1"')

Картинка:
 
Верх