图
()将工程和单元文件依次保存为DIEMonitordpr和UIEMonitorpas切换到UIEMonitorpas单元文件编辑TIEMonitor的定义形式如下:
TIEMonitor = class(TComObject IDispatch IObjectWithSite)
public
function GetTypeInfoCount(out Count:Integer):HResult;stdcall;
function GetTypeInfo(IndexLocaleID:Integer;out TypeInfo):HResult;stdcall;
function GetIDsOfNames(const IID:TGUID;Names:Pointer;NameCountLocaleID:Integer;DispIDs:Pointer):HResult;stdcall;
function SetSite(const pUnkSite:IUnknown):HResult;stdcall;
function GetSite(const riid:TIID;out site:IUnknown):HResult;stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult ExcepInfo ArgErr: Pointer): HResult; stdcall;
private
IEThis:IWebBrowser;
Cookie:Integer;
protected
end;
注意在UIEMonitorpas单元文件的Uses中需要手动加入对SHDOCVW Dialogs SysUtils Forms的引用
其中主要是对IObjectWithSite接口的SetSite()方法和IDispatch接口的Invoke()方法的实现:首先通过SetSite()方法获得IE的WebBrowser接口然后寻找连接点并且通过调用Advise()方法建立COM自身与连接点的连接当连接建立成功后IE在事件引发后会调用连接到自身的IDispatch接口对象的Invoke方法不同的事件对应不同的DispID编码因此可以通过在程序中判断DispID对不同的事件做出相应的处理系统主要对BeforeNavigateDownLoadComplete和OnQuit三个事件进行处理它们对应的DispID分别为和在Invoke()方法中根据DispID分别调用DoBeforeNavigate()DoDownLoadComplete()和DoOnQuit()函数实现相关处理和控制功能
()编译工程生成DIEMonitordll文件
注册/卸载COM对象
注册COM对象包括注册COM对象以及将COM对象的有关信息写入到IE浏览器扩展功能指定的注册表位置下面分别对其注册方法进行介绍卸载方法分别和注册方法相对应
()注册/卸载COM对象一种方法是在Delphi开发环境下运行Run|Register ActiveX Server/Run|Unregister ActiveX Server自动完成COM对象的注册/卸载;另一种方法是通过调用MS Windows操作系统提供的regsvrexe命令进行注册
() 注册/卸载COM对象的有关信息到IE浏览器扩展功能指定的注册表位置将COM对象的CLSID写入到IE浏览器扩展功能指定的注册表位置后当IE浏览器启动时就通过该CLSID查找COM对象有关信息(如文件路径)从而实现了COM对象嵌入式功能扩展为了实现这个目的只需要在注册表的[HKEY_LOCAL_MACHINE\Software\Microsoft\ Windows\CurrentVersion\Explorer\Browser Helper Objects]项下建立一个名称为COM对象的CLSID的注册表项目即可
[] [] []