Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Написать инсталяционный плагин к IE на Дельфи, проблемы при uninstall'е программы 
:(
    Опции темы
sousouiti36
Дата 4.5.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Привет всем! 
Надо было напсать инсталяционный плагин к IE на Дельфи, основная цель доделана осталось только пользовательская часть для этого достаточно интегрировать одну кнопку в IE, нашел в форумах вот эту статью:

Если надо создать кнопку в IE, то вот готовые решение 
---------------------------------------------------------------------


ButtonText = Всплывающая подсказка к кнопке 
MenuText = Текст, который будет использован для пункта в меню "Сервис" 
MenuStatusbar = *Ignore* 
CLSID = Ваш уникальный classID. Для создания нового CLSID (для каждой кнопки) можно использовать GUIDTOSTRING. 
Default Visible := Показать ей. 
Exec := Путь к Вашей программе. 
Hoticon := иконка из shell32.dll когда мышка находится над кнопкой 
Icon := иконка из shell32.dll 



Код

procedure CreateExplorerButton;
const
  TagID = '\{10954C80-4F0F-11d3-B17C-00C0DFE39736}';
var
  Reg: TRegistry;
  ProgramPath: string;
  RegKeyPath: string;
begin
  ProgramPath := 'c:\folder\exename.exe';
  Reg := TRegistry.Create;
  try
    with Reg do
    begin
      RootKey := HKEY_LOCAL_MACHINE;
      RegKeyPath := 'Software\Microsoft\Internet Explorer\Extensions';
      OpenKey(RegKeyPath + TagID, True);
      WriteString('ButtonText', 'Your program Button text');
      WriteString('MenuText', 'Your program Menu text');
      WriteString('MenuStatusBar', 'Run Script');
      WriteString('ClSid', '{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}');
      WriteString('Default Visible', 'Yes');
      WriteString('Exec', ProgramPath);
      WriteString('HotIcon', ',4');
      WriteString('Icon', ',4');
    end
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;
 

Этот код решил задачу в какой то степени, но так как плагин инсталяционный после uninstall'а эта кнопка остается в IE, эт потому
что после uninstall'а в реестре не удаляются те значения которые указанны в коде.
Еще одна проблемка в том что я не могу ни как добратся до события этой кнопки, это мне нужно
для того чтоб сделать еще дополнительные действия при нажатии этой кнопки.
 
PM MAIL   Вверх
Rouse_
Дата 5.5.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: нет
Всего: 29



Ну во первых ты не показал где у тебя находиться инсталяционные данные. Если это тот код который ты привел - то тут большое заблуждение с твоей стороны. 
Во вторых: в процессе деинсталяции для удаления кнопки просто удали ветвь созданную в OpenKey(RegKeyPath + TagID, True);
В третьих: ты и не должен добираться до событий кнопки, ибо это просто картинка отображаемая на панели браузера. Он при щелчке в координатах заданной тобой кнопки активизирует твой СОМ-сервер или приложение который(ое) и получает на себя управление. Работай уже в нем. Самое первое событие (которое ты сможешь обработать) будет как раз результат нажатия кнопки.
В четвертых: всеже добраться до кнопок можно, но придется работать с ShellExtensions и вызывать их методы. Начинай с IInputObject 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
sousouiti36
Дата 5.5.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Заранее спасибо вам и приношу свои извинение если мой ответ вас заденит smile !

Цитата(Rouse_ @  5.5.2006,  01:04 Найти цитируемый пост)
Ну во первых ты не показал где у тебя находиться инсталяционные данные. Если это тот код который ты привел - то тут большое заблуждение с твоей стороны. 


Во первых вы разясните какие данные?, до инсталяции или после? Если вы имеете ввиду до инсталяции то какая разница где находятся инсталяцыонные данные? И кроме того с помощью этого кода я сделал кнопку в IE (это не тот код).

 

Цитата(Rouse_ @  5.5.2006,  01:04 Найти цитируемый пост)
Во вторых: в процессе деинсталяции для удаления кнопки просто удали ветвь созданную в OpenKey(RegKeyPath + TagID, True);

Вопрос таков как добратся до процесса деинсталяции?

Цитата(Rouse_ @  5.5.2006,  01:04 Найти цитируемый пост)
В третьих: ты и не должен добираться до событий кнопки, ибо это просто картинка отображаемая на панели браузера. Он при щелчке в координатах заданной тобой кнопки активизирует твой СОМ-сервер или приложение который(ое) и получает на себя управление. Работай уже в нем. Самое первое событие (которое ты сможешь обработать) будет как раз результат нажатия кнопки.

Задача такова: при нажатии этой кнопки я должен скопировать в буфер обмена УРЛ которое находится в IE и поставить его в текстбокс запускаемого приложения.



Цитата(Rouse_ @  5.5.2006,  01:04 Найти цитируемый пост)
В четвертых: всеже добраться до кнопок можно, но придется работать с ShellExtensions и вызывать их методы. Начинай с IInputObject 

Нахожу самой полезной четвертую причину так как в нем есть уже какие то предложения решения этой задачи smile 

Вопрос таков: Как и откуда мне добратся до IInputObject, ShellExtensions и как работать с методами  ShellExtensions? 
Если можно дайте ссылки где можно про все это прочитать smile 
 
PM MAIL   Вверх
Rouse_
Дата 5.5.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: нет
Всего: 29



Держи рабочий пример:

Код

unit Unit14;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, SHDocVw, StdCtrls;

type
  TForm14 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  end;

var
  Form14: TForm14;

implementation

{$R *.dfm}

procedure CreateExplorerButton;
var
  ProgramPath: string;
  RegKeyPath: string;
begin
  ProgramPath := '"' + ParamStr(0) + '"';
  with TRegistry.Create do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    RegKeyPath := 'Software\Microsoft\Internet Explorer\Extensions' +
      '\{10954C80-4F0F-11d3-B17C-00C0DFE39736}';
    if OpenKey(RegKeyPath, True) then
    try
      WriteString('ButtonText', 'Your program Button text');
      WriteString('MenuText', 'Your program Menu text');
      WriteString('MenuStatusBar', 'Run Script');
      WriteString('ClSid', '{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}');
      WriteString('Default Visible', 'Yes');
      WriteString('Exec', ProgramPath);
      WriteString('HotIcon', ',4');
      WriteString('Icon', ',4');
    finally
      CloseKey;
    end;
  finally
    Free;
  end;
end;

procedure DeleteExplorerButton;
var
  RegKeyPath: string;
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    RegKeyPath := 'Software\Microsoft\Internet Explorer' +
      '\Extensions\{10954C80-4F0F-11d3-B17C-00C0DFE39736}';
    DeleteKey(RegKeyPath);
  finally
    Free;
  end;
end;

procedure TForm14.FormCreate(Sender: TObject);
var
  iShellWindow: IShellWindows;
  iWB: IWebBrowserApp;
  spDisp: IDispatch;
  I, ExplorerHandle: Integer;
  IsFound: Boolean;
begin
  ExplorerHandle := GetForegroundWindow;
  if ParamCount > 0 then
    case ParamStr(1)[2] of
      'i':
      begin
        CreateExplorerButton;
        ShowMessage('Программа успешно установлена.');
        Halt;
      end;
      'u':
      begin
        DeleteExplorerButton;
        ShowMessage('Программа успешно удалена.');
        Halt;
      end;
    else
      ShowMessage('Используйте следующие параметры командной строки:' + sLineBreak +
        '-i для установки;' + sLineBreak +
        '-u для удаления;' + sLineBreak +
        'Для получения спраки запустите программу без параметров.');
      Halt;
    end;

  iShellWindow := CoShellWindows.Create;
  for I := 0 to iShellWindow.Count - 1 do
  begin
    spDisp := iShellWindow.Item(I);
    if spDisp = nil then Continue;
    spDisp.QueryInterface(IWebBrowserApp, iWB);
    if iWB <> nil then
      if iWB.HWnd = ExplorerHandle then
      begin
        Edit1.Text := iWB.LocationURL;
        Exit;
      end;
  end;
  Halt;
end;

end.
 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.