Entwickler-Ecke

Internet / Netzwerk - Browser Helper Object (BHO): Menu im InternetExplorer


hawe - Sa 23.09.06 14:32
Titel: Browser Helper Object (BHO): Menu im InternetExplorer
Hi!

Ich habe ein Programm gesehen, dass in jeder Instanz des IE ein Menu direkt rechts neben dem "?" (also auf oberster Menuebene) einfügt und über die Untereinträge bestimmte Webseiten aufruft. Das wurde mit einem BHO erreicht, und ich habe hier herausgefunden, wie man ein solches in Delphi schreibt:
http://www.bsalsa.com/ie_tools_bho.html

Wie ich nun aber ein Menu hinzufügen könnte bzw. auf deren Klicks reagieren könnte, weiß ich noch nicht. Ich habe einen kleinen Hinweis gefunden, das ich evtl. das IDocHostUIHandler Interface implementieren muß:
http://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_20304590.html

Oder kann ich etwas mit dem Handle (HWND) des Browserfensters anfangen?

Besten Dank für eure Hilfe.


hawe - Mo 25.09.06 21:36

Hallo,

mittlerweile habe ich das Interface IDocHostUIHandler implementiert und unter ShowUI es sogar geschafft an den Menus rumzuspielen. Wie aber kann ich die alten Menupunkte behalten und einfach was neues hinzufügen? Vllt. könnt ihr es mal ausprobieren, Anhang liegt bei.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var mgw: tagOleMenuGroupWidths;
  li: TMenuItem;
  mdesc: HMENU;
begin
  pframe.InsertMenus(HelperForm.MainMenu1.Handle, mgw);

  mdesc := OleCreateMenuDescriptor(HelperForm.MainMenu1.Handle, mgw);
  pFrame.SetMenu(HelperForm.MainMenu1.Handle, mdesc, HelperForm.Handle);


  Result := S_OK;


Nach dem Kompilieren die CLSID registrieren, z.B. Registry-Einträge hinzufügen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FCADDC14-BD46-408A-9842-CDBE1C6D37EB}] 

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\Browser Helper Objects\{FCADDC14-BD46-408A-9842-CDBE1C6D37EB}

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FCADDC14-BD46-408A-9842-CDBE1C6D37EB}\InprocServer32]
@="pfad\zur\DLL"
"ThreadingModel"="Apartment"


Besten Dank.