|
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50
|
|||||||||||
Написание расширений оболочки в MS Windows22.02.2014, 16:59. Показов 2311. Ответов 3
Метки нет (Все метки)
Доброго времени суток. Суть задачи состоит вот в чём: "Добавления пунктов в контекстное меню для всех файлов в проводнике Windows."
Программу пытался написать по руководству: "Руководство полного идиота по написанию расширений оболочки" 1 строка в google. Проблема в том, что, создаётся dll, она регистрируется через regsvr32, данные заносятся в реестр, но в контекстном меню не появляется дополнительная строка. Пробовал перезагружать проводник, проверял программу на XP и Win 8.1, но результат везде один. Кто-нибудь может помочь? SimpleShlExt.h: Кликните здесь для просмотра всего текста
SimpleShlExt.cpp: Кликните здесь для просмотра всего текста
SimpleExt.rgs: Кликните здесь для просмотра всего текста
HKCR
{ NoRemove txtfile { NoRemove ShellEx { NoRemove ContextMenuHandlers { ForceRemove SimpleShlExt = s '{5E2121EE-0300-11D4-8D3B-444553540000}' } } } } SimpleShlExt.rgs: Кликните здесь для просмотра всего текста
HKCR
{ SimpleExt.SimpleShlExt.1 = s 'SimpleShlExt Class' { CLSID = s '{5E2121EE-0300-11D4-8D3B-444553540000}' } SimpleExt.SimpleShlExt = s 'SimpleShlExt Class' { CLSID = s '{5E2121EE-0300-11D4-8D3B-444553540000}' CurVer = s 'SimpleExt.SimpleShlExt.1' } NoRemove CLSID { ForceRemove {5E2121EE-0300-11D4-8D3B-444553540000} = s 'SimpleShlExt Class' { ProgID = s 'SimpleExt.SimpleShlExt.1' VersionIndependentProgID = s 'SimpleExt.SimpleShlExt' ForceRemove 'Programmable' InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } 'TypeLib' = s '{5E2121E1-0300-11D4-8D3B-444553540000}' } } NoRemove txtfile { NoRemove ShellEx { NoRemove ContextMenuHandlers { ForceRemove SimpleShlExt = s '{5E2121EE-0300-11D4-8D3B-444553540000}' } } } }
0
|
|||||||||||
| 22.02.2014, 16:59 | |
|
Ответы с готовыми решениями:
3
Написание оболочки для тестирования Написание программы для нахождения выпуклой оболочки по алгоритму Грэхема Написание оболочки для UPX (GUI-UPX) |
|
Ушел с форума
|
||||||||||||
| 22.02.2014, 18:16 | ||||||||||||
|
Во-первых, сделайте какую-нибудь отладочную консоль, и
пусть расширение пишет в нее все вызовы - что передается, какие значения возвращаются и т.п. Во-вторых, я бы советовал начинать с минимального примера. Вам нужно написать простейший COM-объект, лучше пока вообще без ATL, а вручную, с помощью idl-файла и компилятора, больше реально ничего не нужно, и в этом COM-объекте имплементировать два интерфейса (помимо IUnknown) - это IShellExtInit и IContextMenu. IDispatch, например, который в данном примере зачем-то объявлен, там не нужен. И вот только после этого, когда разберетесь что к чему, можно и нужно добавлять всю мощь ATL и других библиотек. Именно в таком порядке, а не наоборот.
сможет загрузить 32-битную dll). И после регистрации/дерегистрации вызывайте SHChangeNotify с кодом SHCNE_ASSOCCHANGED.
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50
|
|
| 22.02.2014, 23:51 [ТС] | |
|
Убежденный, "всех файлов" это ошибка, не заметил. Пункт должен быть для текстовых файлов.
Запускать я пытался под 32-битную XP, ничего не меняется. При компилировании данного проекта под 64, я получаю следующие ошибки: Кликните здесь для просмотра всего текста
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\atlcom.h(2000): error C2259: ATL::CComObject<Base>: невозможно создать экземпляр абстрактного класса
1> with 1> [ 1> Base=CSimpleShlExt 1> ] 1> из-за следующих членов: 1> HRESULT IContextMenu::GetCommandString(UINT_PTR, UINT,UINT *,CHAR *,UINT): абстрактный 1> C:\Program Files (x86)\Windows Kits\8.0\Include\um\shobjidl.h(2732): см. объявление "IContextMenu::GetCommandString" 1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\atlcom.h(1989): при компиляции функции-члена "HRESULT ATL::CComCreator<T1>::CreateInstance(voi d *,const IID &,LPVOID *)" класса шаблон 1> with 1> [ 1> T1=ATL::CComObject<CSimpleShlExt> 1> ] 1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\atlcom.h(2096): см. ссылку на создание экземпляров функции шаблон при компиляции "HRESULT ATL::CComCreator<T1>::CreateInstance(voi d *,const IID &,LPVOID *)" 1> with 1> [ 1> T1=ATL::CComObject<CSimpleShlExt> 1> ] 1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\atlcom.h(2095): см. ссылку на создание экземпляров класса шаблон при компиляции "ATL::CComCreator<T1>" 1> with 1> [ 1> T1=ATL::CComObject<CSimpleShlExt> 1> ] 1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\atlcom.h(2091): при компиляции функции-члена "HRESULT ATL::CComCreator2<T1,T2>::CreateInstance (void *,const IID &,LPVOID *)" класса шаблон 1> with 1> [ 1> T1=ATL::CComCreator<ATL::CComObject<CSim pleShlExt>>, 1> T2=ATL::CComCreator<ATL::CComAggObject<C SimpleShlExt>> 1> ] 1> d:\simpleext\simpleext\SimpleShlExt.h(74 ): см. ссылку на создание экземпляров функции шаблон при компиляции "HRESULT ATL::CComCreator2<T1,T2>::CreateInstance (void *,const IID &,LPVOID *)" 1> with 1> [ 1> T1=ATL::CComCreator<ATL::CComObject<CSim pleShlExt>>, 1> T2=ATL::CComCreator<ATL::CComAggObject<C SimpleShlExt>> 1> ] 1> d:\simpleext\simpleext\SimpleShlExt.h(74 ): см. ссылку на создание экземпляров класса шаблон при компиляции "ATL::CComCreator2<T1,T2>" 1> with 1> [ 1> T1=ATL::CComCreator<ATL::CComObject<CSim pleShlExt>>, 1> T2=ATL::CComCreator<ATL::CComAggObject<C SimpleShlExt>> 1> ] Добавлено через 35 минут Ошибки исправил, но суть остаётся та же Добавлено через 4 часа 50 минут Вопрос решен
0
|
|
| 22.02.2014, 23:51 | |
|
Помогаю со студенческими работами здесь
4
Общая библиотека оболочки Windows Общая библиотека оболочки windows Настройка IIS в Windows 2003 - запуск ISAPI расширений. [AutoHotkey] Снятие галочек с расширений типов файлов в Windows 7 для индексации папки
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|