Это казалось обычным вопросом, но после некоторых поисков я не смог найти ответы. Существует статья об этом здесь:Как написать расширение оболочки в C++?
http://www.codeproject.com/KB/shell/shellextguide1.aspx
Но это для очень старой версии Visual Studio. Я использую VS 2008, поэтому инструкции и интерфейсы, похоже, не соответствуют тому, что я вижу.
Я хочу создать простое расширение оболочки, используя C++, который создает контекстное меню для файлов с расширением .GZ. При щелчке правой кнопкой мыши по этим файлам я должен щелкнуть элемент контекстного меню и вызвать обратный вызов в коде для выполнения какой-либо операции над этим файлом.
Другие пункты контекстного меню будут делать такие вещи, как нерешительные диалоги, чтобы принять пользовательский ввод перед выполнением какого-либо действия.
Из того, что я видел, для этого используется ATL, но я никогда не использовал ATL, поэтому все типы объектов и интерфейсы меня очень сбивают с толку. Это было бы не так плохо, если бы у меня был подходящий учебник или документация для чтения.
Может ли кто-нибудь помочь мне? Разве нет какого-то учебника, которому не исполнилось 10 лет?
Это на самом деле особенно трудная вещь. Я разработал пункт контекстного меню, когда пользователь щелкнул правой кнопкой мыши по принтерам. Несмотря на то, что в моем коде было всего 40 или около того, было около 1000 строк сгенерированного кода. Хотел бы я быть более полезным, но я не могу поделиться каким-либо кодом, который у меня есть. В качестве подсказки расширение вашей оболочки должно находиться в DLL, и оно должно иметь свой собственный GUID, а DLL необходимо зарегистрировать в regsvr32. Вы хотите реализовать ** BOTH ** интерфейсы IContextMenu и IShellExtInit COM. Есть способ заставить ВС генерировать большую часть этого для вас, но я не помню, как это сделать. – dreamlax
[IContextMenu] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb776095 (v = vs.85) .aspx) doc, а также [IShellExtInit] (http: // msdn. microsoft.com/en-us/library/windows/desktop/bb775096(v=vs.85).aspx) doc. – dreamlax
@dreamlax Я использовал мастер проекта для проекта ATL, но когда я создаю новый класс, он также создает для него интерфейс - мне не нужен интерфейс, но не просто удалить эту функциональность. Плюс я не уверен, почему нужно создать код. –