PDA

Просмотр полной версии : Расширение контекстного меню проводника Windows


Dobby007
21.03.2009, 19:22
Сразу скажу, что работаю в c++ builder (хотя уже и сам жалею об этом) :)
Нужно добавить свой новый пункт(ы) в конт. меню проводника. WinRar, допустим, делает такую тему...
Прочитал в инете что для этого нужно использовать COM-объекты. Но я честно говоря ни разу с ними нече не пробывал делать и следовательно здесь тоже не знаю в какую сторону копать. Вообщем, может кто кинет ссылку на статейку (желательно по данной теме, а не обобщенный материал по COM или ACtiveX) или примерчик какой-нить? Нагуглил ссылку: http://www.rsdn.ru/article/winshell/shlext1.xml , но там, во-первых, нужен VCC, во-вторых, насколько я смог понять, материал немного подустарел...
P.S. Видел еще в инете, что можно проделать что-то подобное просто добавляя несколько записей в реестре. Но там сильно не раскрутишься т.е. submenu, иконки сделать не получится, плюс "слишком просто" че-то это для меня :D Что-то уже новое узнать хотелось бы...
Вообщем, помогите кто чем может. :rolleyes:

Algol
21.03.2009, 21:21
P.S. Видел еще в инете, что можно проделать что-то подобное просто добавляя несколько записей в реестре. Но там сильно не раскрутишься т.е. submenu, иконки сделать не получится, плюс "слишком просто" че-то это для меня :D Что-то уже новое узнать хотелось бы...
Вообщем, помогите кто чем может. :rolleyes:

Именно через реестр это и делается, и иконки там сделать можно.

slesh
22.03.2009, 00:35
Вообще есть очень хороший пример этого для Delphi
От дельфы до билдера не далеко, так что быстро сможешь переписать.
Описано всё тут:
http://delphiworld.narod.ru/base/add_ie_menu_item.html
или как вариант - запроса в поисковик: "Пример добавления пункта в контекстное меню Windows Explorer"

Dobby007
22.03.2009, 16:46
Вообще есть очень хороший пример этого для Delphi
От дельфы до билдера не далеко, так что быстро сможешь переписать.
Описано всё тут:
http://delphiworld.narod.ru/base/add_ie_menu_item.html
или как вариант - запроса в поисковик: "Пример добавления пункта в контекстное меню Windows Explorer"
Спс за линк. +1...
Тут начал уже переводить код. Не так уж и просто оказалось заниматься этим. Три функции пока только портанул... Вообщем такой вопросец. Никто не подскажет как такое можно "перевести" в c++?
type
TContextMenuFactory = class(TComObjectFactory)
public
.................
override;
end;

TContextMenu = class(TComObject, IShellExtInit, IContextMenu)
..................
end;

Пытался сделать как-то так:
class TContextMenuFactory : public TComObjectFactory
{
public:
void recount();
};
Но компилятор ругается: [BCC32 Error] Main.cpp(16): E2029 'TComObjectFactory' must be a previously defined class or struct

slesh
22.03.2009, 21:13
точно не помню, но по аналогии форма в билдере делается. вот и смотри как описывается класс формы, так и опиши этот )

Dobby007
22.03.2009, 23:18
точно не помню, но по аналогии форма в билдере делается. вот и смотри как описывается класс формы, так и опиши этот )
Ну так я по аналогии как раз с формой и описывал:
class TContextMenuFactory : public TComObjectFactory
{
public:
void recount();
};

Но компилятор ругается: [BCC32 Error] Main.cpp(16): E2029 'TComObjectFactory' must be a previously defined class or struct
:(

slesh
23.03.2009, 00:08
В том примере юниты поключались, ты их подключи и в своём коде

slesh
23.03.2009, 00:10
TComObjectFactory описан в ComObj

Dobby007
23.03.2009, 20:21
В том примере юниты поключались, ты их подключи и в своём коде
Да я в принципе практически сразу, как начал портировать, подключил все модули, которые были в том коде.
#include <vcl.h>
#include <windows.h>
#include <ComServ.hpp>

#include <ComObj.hpp>

#include <ActiveX.hpp>
#include <ShlObj.h>
#include <ShlObj.hpp>
#include <Menus.hpp>
#include <ShellAPI.hpp>
#include <SysUtils.hpp>
#include <registry.hpp>
#pragma hdrstop
TComObjectFactory описан в ComObj
Это в дельфях, а билдере инклуд ComObj.h как видно не к чему не ведет... :confused: :confused: :confused:

Dobby007
24.03.2009, 16:21
Все. Разобрался. Все работает безотказно.
P.S. Как будет время напишу ФАК или статейку по этому делу... Т.к. думаю, что не у одного меня была такая проблема...

Добавлено через 4 дня :) :
Ну вот... Как обещал: ;)
http://forum.antichat.ru/showthread.php?p=1194736#post1194736