26

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

wisgest пишет:

• В статье базы знаний Microsoft говорится, что, если существует ключ реестра
HKEY_CLASSES_ROOT\lnkfile\shell,
то могут возникнуть трудности с запуском ярлыков с панели ярлыков MS Office 2000 (? — Microsoft Office Shortcut Bar). Подробнее в этом вопросе я не разбирался.

Far Manager стал выполнять действие «FindTarget» вместо стандартного «Open» для *.lnk, хотя именно «Open» визуально оставался глаголом по умолчанию. Пользуется он обычным ShellExecuteEx, а вот глагол использует неверный (можно сказать, перестарался):

GetShellAction(…)
…
…
…
// Если RetPtr==NULL - мы не нашли default action.
// Посмотрим - есть ли вообще что-нибудь у этого расширения
…
// ... а теперь все остальное, если "open" нету
…
// Проверим наличие "команды" у этого ключа
…

тут и получается «FindTarget». Лечится пока созданием

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\lnkfile\Shell\Open\Command]
@="\"%1\""

P.S. http://forum.farmanager.com/viewtopic.p … 049#p26049

27 (изменено: wisgest, 2008-09-28 22:05:57)

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

alexii, спасибо за замечание! Если бы это я обнаружил сам, то не понял бы в чём дело.
Признаюсь, Ваш способ исправления мне не очень понравился — меню ярлыков строится на основании меню их конечных объектов, а у тех действием по умолчанию может быть и не «Open». Да и не хочется засорять реестр. Хотя, может быть, Ваше решение будет полезно в других случаях.

Я пока установил в самом Far'е ассоциацию для *.lnk:

rundll32.exe shell32,ShellExec_RunDLL "!.!"

/* Исправлено 28.09.2008: Взял !.! в кавычки, т.к. без них не работало с ярлыками, содержащими в имени пробелы. */

Возможно, я что-то не учёл или наоборот можно сделать проще, но вроде работает.

28

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

Я искал хоть что-то, что бы работало , ориентируясь на текст функции. Ну, и, решение было конкретно под *.lnk.

А насчёт Вашего решения — я думаю, это более правильный подход.

29 (изменено: emergency, 2008-10-27 01:42:12)

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

прошу прощения, попробовал воспользоваться вашим скриптом, вылезает
http://smages.com/t/a6/a4/a6a43ea99b9b4dee5767b1a43f39215d.jpg
подскажите в чем может быть проблема... свойство папки я думаю тут не причем

30

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

Мне удалось воспроизвести эту ошибку, удалив ключ реестра
[HKEY_CLASSES_ROOT\lnkfile\shell\FindTarget\command]

Возможно, Вы создали только
[HKEY_CLASSES_ROOT\lnkfile\shell\FindTarget]

Давайте порпробуем так: Вы сообщите точный путь, по которому Вы сохранили скрипт, а я напишу Вам reg-файл для его регистрации в системе.

31

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

Выложите сюда содержимое ветки реестра HKEY_CLASSES_ROOT\lnkfile.

32 (изменено: emergency, 2008-10-27 03:52:34)

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

alexii пишет:

Выложите сюда содержимое ветки реестра HKEY_CLASSES_ROOT\lnkfile.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\lnkfile]
@="Ярлык"
"EditFlags"=dword:00000001
"IsShortcut"=""
"NeverShowExt"=""

[HKEY_CLASSES_ROOT\lnkfile\CLSID]
@="{00021401-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\lnkfile\shell]

[HKEY_CLASSES_ROOT\lnkfile\shell\FindTarget]
@="&Найти объект"

[HKEY_CLASSES_ROOT\lnkfile\shell\FindTarget\command]

[HKEY_CLASSES_ROOT\lnkfile\shellex]

[HKEY_CLASSES_ROOT\lnkfile\shellex\ContextMenuHandlers]

[HKEY_CLASSES_ROOT\lnkfile\shellex\ContextMenuHandlers\Offline Files]
@="{750fdf0e-2a26-11d1-a3ea-080036587f03}"

[HKEY_CLASSES_ROOT\lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}]

[HKEY_CLASSES_ROOT\lnkfile\shellex\DropHandler]
@="{00021401-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\lnkfile\shellex\IconHandler]
@="{00021401-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\lnkfile\shellex\PropertySheetHandlers]

[HKEY_CLASSES_ROOT\lnkfile\shellex\PropertySheetHandlers\ShimLayer Property Page]
@="{513D916F-2A8E-4F51-AEAB-0CBC76FB1AF8}"
wisgest пишет:

Мне удалось воспроизвести эту ошибку, удалив ключ реестра
[HKEY_CLASSES_ROOT\lnkfile\shell\FindTarget\command]

Возможно, Вы создали только
[HKEY_CLASSES_ROOT\lnkfile\shell\FindTarget]

Давайте порпробуем так: Вы сообщите точный путь, по которому Вы сохранили скрипт, а я напишу Вам reg-файл для его регистрации в системе.

G:\findobject\findobject.js


текст рег файла (изменил только путь)

REGEDIT4

[HKEY_CLASSES_ROOT\lnkfile\shell\FindTarget]
@="&Найти объект"
[HKEY_CLASSES_ROOT\lnkfile\shell\FindTarget\command]
@="C:\\WINDOWS\\System32\\WScript.exe \"G:\findobject\findobject.js\" \"%1\""

исходный текст рег файла взял вот отсюда http://forum.script-coding.com/viewtopic.php?id=2253 из примера копипастом

33

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

Надо заэкранировать слэш «\» как «\\», то есть что-то вида

…\"G:\\findobject\\findobject.js\"…

34 (изменено: wisgest, 2008-10-27 04:05:58)

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

Ошибка в строке

@="C:\\WINDOWS\\System32\\WScript.exe \"G:\findobject\findobject.js\" \"%1\""

В итоге эта строка игнорировалась и, как можно заметить, в выложенной Вами ветке реестра этой строки нет.

В reg-файлах надо «\» заменять на «\\».
Правильно будет

@="C:\\WINDOWS\\System32\\WScript.exe \"G:\\findobject\\findobject.js\" \"%1\""

(Собственно, alexii уже об этом сказал несколькими минутами ранее:))

35

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

спасибо, работает!

36

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

2wisgest: можем укладываться на покой ?

37 (изменено: major1101, 2010-03-29 22:29:36)

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

Спасибо!:D

38 (изменено: alexii, 2010-03-29 22:33:59)

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

Берёте код «FindTarget.js» из Серый форум / WSH: Пункт «Найти объект» в контекстном меню ярлыков в Проводнике, проделываете манипуляции с реестром, описанные там же от слов:

Для появления его в меню, создайте ключ реестра…

Уже разобрались?

39

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

а как перед надписью "найти объект" создать иконку (как у WinRAR)?

40

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

Писать свой Context Menu Handler .

В принципе, под Windows 7 сие можно проделать уже просто через реестр: How to Add Icons to Custom Right-Click Menu (Context Menu) in Windows 7 - The Winhelponline Blog.

41

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

alexii пишет:

Писать свой Context Menu Handler

а можно подробнее в WinXP (sp3) !

42

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

Creating Context Menu Handlers (Windows)

43

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

на русском языке есть?

44 (изменено: wisgest, 2018-01-06 23:35:31)

Re: WSH(+ Реестр): «Найти объект...» в контекстном меню ярлыков

alexii пишет:

Far Manager стал выполнять действие «FindTarget» вместо стандартного «Open» для *.lnk…

Столкнулся с таким же поведением в Take Command Console (точнее в её бесплатном выпуске — TCC/LE). Затруднение преодолевается так же просто как и с Far: TCC позволяет сопоставлять расширениям файлов свои обработчики — через переменные окружения:

set .lnk=rundll32.exe shell32,ShellExec_RunDLL

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

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

[HKEY_CLASSES_ROOT\lnkfile\shell]
@="none"

— по крайней мере поведение Far и TCC исправилось.

Значение «none» я подсмотрел в «живом» реестре. Внятного описания найти не смог, кроме обрывочных упоминаний, например:

user456803 пишет:

Set 'none' as default action allows to add contextmenu items without changing windows default behaviour.