Написав расширение оболочки Windows (ContextMenuHandler), и зарегистрировав его в
HKCR\*\shellex\ContextMenuHandlers\MyExtension,
я обнаружил, что при щелчке правой кнопки мыши на ярлыке, моему расширению передается не имя ярлыка, а имя объекта, на который этот ярлык ссылается, хотя хотелось бы, чтобы просто передавалось имя ярлыка.
Попробовал зарегистрировать расширение так:
HKCR\*\shellex\ContextMenuHandlers\MyExtension
HKCR\lnkfile\shellex\ContextMenuHandlers\MyExtension.
Вроде сработало, для ярлыка стал передавать его имя (в Windows XP). Однако обнаружилось, что в Windows 98 при щелчке правой конпкой на ярлыке в контекстном меню появляется аж два одинаковых пункта меню. Судя по всему, проводник инициализирует расширение два раза — один раз для объекта *, а второй — для lnkfile, так как при выборе одного пункта передается имя ярлыка, а при выборе второго — имя объекта, на который ярлык ссылается.
Уже долго ищу как решить эту проблему, буду благодарен, если кто-нибудь подскажет способ.
17.02.06 15:31: Перенесено модератором из 'Прочее' — Hacker_Delphi
Здравствуйте, Oleg_Krq, Вы писали:
так не регистрируйся на *
O_K>17.02.06 15:31: Перенесено модератором из 'Прочее' — Hacker_Delphi
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, Hacker_Delphi, Вы писали:
H_D>Здравствуйте, Oleg_Krq, Вы писали:
H_D>так не регистрируйся на *
O_K>>
Большое спасибо за совет, правда я не понимаю смысла в таких советах. Если вам нечего сказать, лучше просто ничего не пишите
Здравствуйте, <Аноним>, Вы писали:
А>Большое спасибо за совет, правда я не понимаю смысла в таких советах. Если вам нечего сказать, лучше просто ничего не пишите
А попробовать сперва реализовать совет не пробовал?
цитата:
HKCR\*\shellex\ContextMenuHandlers\MyExtension
HKCR\lnkfile\shellex\ContextMenuHandlers\MyExtension.
Вроде сработало, для ярлыка стал передавать его имя (в Windows XP). Однако обнаружилось, что в Windows 98 при щелчке правой конпкой на ярлыке в контекстном меню появляется аж два одинаковых пункта меню. Судя по всему, проводник инициализирует расширение два раза — один раз для объекта *, а второй — для lnkfile, так как при выборе одного пункта передается имя ярлыка, а при выборе второго — имя объекта, на который ярлык ссылается.
Имелось в виду — не регистрируйся в ключ, который выделен жирным шрифтом.
Наверняка от этого не перестанет работать под XP, а под 98 перестанет дублировать...
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, Hacker_Delphi, Вы писали:
H_D>Здравствуйте, <Аноним>, Вы писали:
А>>Большое спасибо за совет, правда я не понимаю смысла в таких советах. Если вам нечего сказать, лучше просто ничего не пишите
H_D>А попробовать сперва реализовать совет не пробовал?
H_D>цитата:
H_D>H_D>HKCR\*\shellex\ContextMenuHandlers\MyExtension
H_D>HKCR\lnkfile\shellex\ContextMenuHandlers\MyExtension.
H_D>Вроде сработало, для ярлыка стал передавать его имя (в Windows XP). Однако обнаружилось, что в Windows 98 при щелчке правой конпкой на ярлыке в контекстном меню появляется аж два одинаковых пункта меню. Судя по всему, проводник инициализирует расширение два раза — один раз для объекта *, а второй — для lnkfile, так как при выборе одного пункта передается имя ярлыка, а при выборе второго — имя объекта, на который ярлык ссылается.
H_D>Имелось в виду — не регистрируйся в ключ, который выделен жирным шрифтом.
H_D>Наверняка от этого не перестанет работать под XP, а под 98 перестанет дублировать...
Прошу прощения, не так понял. Дело в том, что здесь * убрать нельзя. Расширение должно быть зарегистрировано для всех файлов/директорий, в том числе и для ярлыков. Проблема в том, что без lnkfile передается не имя ярлыка, а имя файла, на который ярлык ссылается. Я искал способ, чтобы именно имя ярлыка передавалось.
Здравствуйте, <Аноним>, Вы писали:
А>Прошу прощения, не так понял. Дело в том, что здесь * убрать нельзя. Расширение должно быть зарегистрировано для всех файлов/директорий, в том числе и для ярлыков. Проблема в том, что без lnkfile передается не имя ярлыка, а имя файла, на который ярлык ссылается. Я искал способ, чтобы именно имя ярлыка передавалось.
Тогда надо динамически как-то разобраться, для кого тебя вызывают...
Я когда-то писал расширения для меню, но уже почти все забыл и не уверен, что можно как-то это разрулить...
Проверяй... а каким образом — непонятно

... может перебирать меню и если пункт уже есть — не добавлять его?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))