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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Dobby007, 21 Mar 2009.

  1. Dobby007

    Dobby007 Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    52
    Likes Received:
    16
    Reputations:
    1
    Сразу скажу, что работаю в c++ builder (хотя уже и сам жалею об этом) :)
    Нужно добавить свой новый пункт(ы) в конт. меню проводника. WinRar, допустим, делает такую тему...
    Прочитал в инете что для этого нужно использовать COM-объекты. Но я честно говоря ни разу с ними нече не пробывал делать и следовательно здесь тоже не знаю в какую сторону копать. Вообщем, может кто кинет ссылку на статейку (желательно по данной теме, а не обобщенный материал по COM или ACtiveX) или примерчик какой-нить? Нагуглил ссылку: http://www.rsdn.ru/article/winshell/shlext1.xml , но там, во-первых, нужен VCC, во-вторых, насколько я смог понять, материал немного подустарел...
    P.S. Видел еще в инете, что можно проделать что-то подобное просто добавляя несколько записей в реестре. Но там сильно не раскрутишься т.е. submenu, иконки сделать не получится, плюс "слишком просто" че-то это для меня :D Что-то уже новое узнать хотелось бы...
    Вообщем, помогите кто чем может. :rolleyes:
     
  2. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Именно через реестр это и делается, и иконки там сделать можно.
     
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Вообще есть очень хороший пример этого для Delphi
    От дельфы до билдера не далеко, так что быстро сможешь переписать.
    Описано всё тут:
    http://delphiworld.narod.ru/base/add_ie_menu_item.html
    или как вариант - запроса в поисковик: "Пример добавления пункта в контекстное меню Windows Explorer"
     
    1 person likes this.
  4. Dobby007

    Dobby007 Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    52
    Likes Received:
    16
    Reputations:
    1
    Спс за линк. +1...
    Тут начал уже переводить код. Не так уж и просто оказалось заниматься этим. Три функции пока только портанул... Вообщем такой вопросец. Никто не подскажет как такое можно "перевести" в c++?
    Code:
    type
      TContextMenuFactory = class(TComObjectFactory)
      public
      .................
      override;
      end;
    
      TContextMenu = class(TComObject, IShellExtInit, IContextMenu)
      ..................
      end;
    Пытался сделать как-то так:
    Code:
    class TContextMenuFactory : public TComObjectFactory
    {
    	public:
    	void recount();
    };
    Но компилятор ругается: [BCC32 Error] Main.cpp(16): E2029 'TComObjectFactory' must be a previously defined class or struct
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    точно не помню, но по аналогии форма в билдере делается. вот и смотри как описывается класс формы, так и опиши этот )
     
  6. Dobby007

    Dobby007 Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    52
    Likes Received:
    16
    Reputations:
    1
    Ну так я по аналогии как раз с формой и описывал:
    :(
     
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    В том примере юниты поключались, ты их подключи и в своём коде
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    TComObjectFactory описан в ComObj
     
  9. Dobby007

    Dobby007 Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    52
    Likes Received:
    16
    Reputations:
    1
    Да я в принципе практически сразу, как начал портировать, подключил все модули, которые были в том коде.
    Code:
    #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
    Это в дельфях, а билдере инклуд ComObj.h как видно не к чему не ведет... :confused: :confused: :confused:
     
  10. Dobby007

    Dobby007 Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    52
    Likes Received:
    16
    Reputations:
    1
    это всеж-таки случилось... =))

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

    Добавлено через 4 дня :) :
    Ну вот... Как обещал: ;)
    /showthread.php?p=1194736#post1194736
     
    #10 Dobby007, 24 Mar 2009
    Last edited: 28 Mar 2009