- 浏览: 1613549 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (603)
- T_java (145)
- T_script&ASP (51)
- T_C/C++ (25)
- T_PowerBuilder (11)
- T_Database (53)
- T_odoo (7)
- T_应用服务器 (50)
- T_专_条形码 (6)
- T_专_负载均衡器 (4)
- T_操作系统 (94)
- T_信息安全 (41)
- T_专_搜索引擎 (14)
- T_L_PHP (58)
- T_L_Delphi (18)
- T_L_.NET、C#、VisualStudio (25)
- T_L_Objective-C (6)
- T_移动开发 (53)
- T_网络 (109)
- T_大数据 (2)
- T_嵌入式 (2)
- T_小众技术 (24)
- T_未分类 (58)
- L_旅游印记 (1)
- L_生活随笔 (48)
- L_中国文化 (18)
- L_户外与生存 (0)
最新评论
-
csbean4004:
不知道哪传来得恶习,发帖子不好好发,故意弄错一些东西,很讨厌
让HTML5支持后置摄像头 -
withthewind:
终于找到一个可以用的了。。。
如何用VBA取得Word文档中的标题前面的序号 -
busbby:
兄弟,无法下载,说文件不完整
一个好用的Outlook ost格式文件转pst文件的工具 -
yijavakevin:
密码啊~解压密码多少?
一个二维条形码组件 -
vipbooks:
你给的那个链接根本无法下载,跳到官网看了下最新版12M,但点下 ...
十步以内完成精细web打印
把代码贴上(注意:中间省掉了一些类似 DoTitleChange 之类空函数,使用时请自行补齐):
unit IEHelperUnit; {$WARN SYMBOL_PLATFORM OFF} interface uses Windows, Comobj, ActiveX, SHDOCVW, {MSHTML,} Dialogs, StdVcl, StrUtils; type TIEHelperFactory = class(TComObjectFactory) private procedure AddKeys; procedure RemoveKeys; public procedure UpdateRegistry(Register: Boolean); override; end; TIEHelper = class(TComObject, IDispatch, IObjectWithSite) public function GetTypeInfoCount(out Count: Integer): HResult; stdcall; function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall; function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall; function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall; function SetSite(const pUnkSite: IUnknown): HResult; stdcall; function GetSite(const riid: TIID; out site: IUnknown): HResult; stdcall; private IE: IWebbrowser2; Cookie: Integer; end; const Class_IEHelper: TGUID = '{3D898C55-74CC-4B7C-B5F1-45913F368388}'; implementation uses ComServ, Registry, SysUtils; procedure DoBeforeNavigate2(const pDisp: IDispatch; var URL: OleVariant; var Flags: OleVariant; var TargetFrameName: OleVariant; var PostData: OleVariant; var Headers: OleVariant; var Cancel: WordBool); var oldHeader, MyHeader: String; newHeader: OleVariant; begin MyHeader := 'register-code: 123456;'; if AnsiContainsStr(URL, 'sheng.iteye.com') then begin oldHeader := Headers; // Showmessage('正在浏览的HTTP头:' + Headers ); // Showmessage('你正在浏览的站点:' + BoolToStr(AnsiContainsStr(oldHeader, MyHeader))); if not AnsiContainsStr(oldHeader, MyHeader) then begin newHeader := oldHeader + MyHeader; // Showmessage('正在浏览的HTTP头:' + Headers + '修改后的HTTP头:' + newHeader ); Cancel:=True; (pDisp as IWebbrowser2).Stop(); (pDisp as IWebbrowser2).Navigate2(URL, Flags, TargetFrameName, PostData, newHeader); end end; end; procedure BuildPositionalDispIds(pDispIds: PDispIdList; const dps: TDispParams); var i: integer; begin Assert(pDispIds <> nil); for i := 0 to dps.cArgs - 1 do pDispIds^[i] := dps.cArgs - 1 - i; if (dps.cNamedArgs <= 0) then Exit; for i := 0 to dps.cNamedArgs - 1 do pDispIds^[dps.rgdispidNamedArgs^[i]] := i; end; function TIEHelper.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; type POleVariant = ^OleVariant; var dps: TDispParams absolute Params; bHasParams: boolean; pDispIds: PDispIdList; iDispIdsSize: integer; begin Result := DISP_E_MEMBERNOTFOUND; pDispIds := nil; iDispIdsSize := 0; bHasParams := (dps.cArgs > 0); if (bHasParams) then begin iDispIdsSize := dps.cArgs * SizeOf(TDispId); GetMem(pDispIds, iDispIdsSize); end; try if (bHasParams) then BuildPositionalDispIds(pDispIds, dps); case DispId of 102: begin DoStatusTextChange(dps.rgvarg^[pDispIds^[0]].bstrval); Result := S_OK; end; 108: begin DoProgressChange(dps.rgvarg^[pDispIds^[0]].lval, dps.rgvarg^[pDispIds^[1]].lval); Result := S_OK; end; 105: begin DoCommandStateChange(dps.rgvarg^[pDispIds^[0]].lval, dps.rgvarg^[pDispIds^[1]].vbool); Result := S_OK; end; 106: begin DoDownloadBegin(); Result := S_OK; end; 104: begin DoDownloadComplete(); Result := S_OK; end; 113: begin DoTitleChange(dps.rgvarg^[pDispIds^[0]].bstrval); Result := S_OK; end; 112: begin DoPropertyChange(dps.rgvarg^[pDispIds^[0]].bstrval); Result := S_OK; end; 250: begin DoBeforeNavigate2(IDispatch(dps.rgvarg^[pDispIds^[0]].dispval), POleVariant(dps.rgvarg^[pDispIds^[1]].pvarval)^, POleVariant(dps.rgvarg^[pDispIds^[2]].pvarval)^, POleVariant(dps.rgvarg^[pDispIds^[3]].pvarval)^, POleVariant(dps.rgvarg^[pDispIds^[4]].pvarval)^, POleVariant(dps.rgvarg^[pDispIds^[5]].pvarval)^, dps.rgvarg^[pDispIds^[6]].pbool^); Result := S_OK; end; 251: begin DoNewWindow2(IDispatch(dps.rgvarg^[pDispIds^[0]].pdispval^), dps.rgvarg^[pDispIds^[1]].pbool^); Result := S_OK; end; 252: begin DoNavigateComplete2(IDispatch(dps.rgvarg^[pDispIds^[0]].dispval), POleVariant(dps.rgvarg^[pDispIds^[1]].pvarval)^); Result := S_OK; end; 259: begin DoDocumentComplete(IDispatch(dps.rgvarg^[pDispIds^[0]].dispval), POleVariant(dps.rgvarg^[pDispIds^[1]].pvarval)^); Result := S_OK; end; 253: begin DoOnQuit(); Result := S_OK; end; 254: begin DoOnVisible(dps.rgvarg^[pDispIds^[0]].vbool); Result := S_OK; end; 255: begin DoOnToolBar(dps.rgvarg^[pDispIds^[0]].vbool); Result := S_OK; end; 256: begin DoOnMenuBar(dps.rgvarg^[pDispIds^[0]].vbool); Result := S_OK; end; 257: begin DoOnStatusBar(dps.rgvarg^[pDispIds^[0]].vbool); Result := S_OK; end; 258: begin DoOnFullScreen(dps.rgvarg^[pDispIds^[0]].vbool); Result := S_OK; end; 260: begin DoOnTheaterMode(dps.rgvarg^[pDispIds^[0]].vbool); Result := S_OK; end; end; finally if (bHasParams) then FreeMem(pDispIds, iDispIdsSize); end; end; function TIEHelper.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; begin Result := E_NOTIMPL; end; function TIEHelper.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; begin Result := E_NOTIMPL; pointer(TypeInfo) := nil; end; function TIEHelper.GetTypeInfoCount(out Count: Integer): HResult; begin Result := E_NOTIMPL; Count := 0; end; function TIEHelper.GetSite(const riid: TIID; out site: IUnknown): HResult; begin // Result := S_OK; if Assigned(IE) then result:=IE.QueryInterface(riid, site) else Result:= E_FAIL; end; function TIEHelper.SetSite(const pUnkSite: IUnknown): HResult; var cmdTarget: IOleCommandTarget; Sp: IServiceProvider; CPC: IConnectionPointContainer; CP: ICOnnectionPoint; begin if Assigned(pUnkSite) then begin cmdTarget := pUnkSite as IOleCommandTarget; Sp := CmdTarget as IServiceProvider; if Assigned(Sp)then Sp.QueryService(IWebbrowserApp, IWebbrowser2, IE); if Assigned(IE) then begin IE.QueryInterface(IConnectionPointContainer, CPC); CPC.FindConnectionPoint(DWEBbrowserEvents2, CP); CP.Advise(Self, Cookie) end; end; Result := S_OK; end; procedure TIEHelperFactory.AddKeys; var S: string; begin S := GUIDToString(CLASS_IEHelper); with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; if OpenKey('Software\Microsoft\Windows\CurrentVersion\explorer\Browser Helper Objects\' + S, TRUE) then CloseKey; finally free; end; end; procedure TIEHelperFactory.RemoveKeys; var S: string; begin S := GUIDToString(CLASS_IEHelper); with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; DeleteKey('Software\Microsoft\Windows\CurrentVersion\explorer\Browser Helper Objects\' + S); finally free; end; end; procedure TIEHelperFactory.UpdateRegistry(Register: Boolean); begin inherited UpdateRegistry(Register); if Register then AddKeys else RemoveKeys; end; initialization TIEHelperFactory.Create(ComServer, TIEHelper, Class_IEHelper, 'IEHelper', '', ciMultiInstance, tmApartment); end.
发表评论
-
FastReport中如何实现自定义预览窗口关闭事件
2018-06-22 02:05 1353.... interface uses ... ... -
Chrome核心的自定义浏览器
2017-07-04 17:19 833以Chrome为核心的自定义浏览器源代码,有时候可能用得到,保 ... -
一个基于Chrome核心的浏览器源代码(delphi)
2017-05-12 11:27 2801有时候难免会需要自己做个个性化浏览器玩玩,基于IE或Edg ... -
Delphi开发ActiveForm,FEvents=nil的解决
2013-06-13 12:44 1532使用Delphi开发一个ActiveForm,其他功能都没 ... -
Delphi在二进制文件头部加数据或删除数据
2013-04-05 22:05 1886今天想要在一个二进制文件头部加上一个特殊标志,在后续处理时又 ... -
AES加密算法实现
2013-04-04 20:40 2010http://en.wikipedia.org/wiki/AE ... -
收藏几个条码组件的地址
2013-03-30 22:10 1546http://www.codeproject.com/Ar ... -
在Delphi中使用Zebra条码打印机打印中文
2013-03-15 13:53 2786在Delphi中使用条码打印机打印中文标签时,由于多数打印 ... -
一堆非关系数据库
2013-03-04 16:35 1091发现一个网站,里面里堆的非关系数据库,如果全弄熟了,该 ... -
用VB调用Office OCR组件实现图文识别
2011-12-30 11:11 10954Option Explicit '利 ... -
一些利用开源浏览器核心开发专用浏览器的连接
2011-12-02 14:36 3694D-Gecko: http://sourceforge.ne ... -
在Windows服务器上解决SVN不允许修改日志说明的问题
2011-10-28 09:06 3966昨天,我想在SVN上修改一个文件的注释,但提交时提示: DA ... -
演示EmbeddedWB(D5-D2009)组件如何通过GetExternal事件来达到从WEB页面控制浏览器的功能
2010-12-22 23:29 2910本例子是演示EmbeddedWB(D5-D2009)组件如何通 ... -
Delphi实现的网页绝对定位打印控件(自用)
2010-12-21 15:29 1674保存一个Delphi实现的网页绝对定位打印控件,只适用IE。 -
保存一个工具,以后也许能用上
2010-10-29 03:12 1131VclSkin 5.03 Fullsource(源码),谁用谁 ... -
delphi写的一个读写xml格式配置文件的帮助类
2010-09-25 12:04 4599unit U_SystemParams; { ==== ... -
FastReport4.8.11安装
2010-01-03 22:35 37431、把压缩文件内的Fa ...
相关推荐
标题中的"delphi-bho.rar_BHO_bho delphi_delphi IE_delphi bho_delphi ie插件"表明这是一个关于使用Delphi编程语言开发IE浏览器的BHO(Browser Helper Object)插件的教程或示例代码集合。BHO是Windows操作系统中的...
本压缩包文件"Delphi_BHO.rar"包含了一组使用Delphi编程语言编写的Browser Helper Object(BHO)示例代码。BHO是一种Windows应用程序组件,它能够嵌入到Internet Explorer浏览器中,提供扩展功能,如网页增强、广告...
"Delphi BHO 源码"是指使用Delphi编程语言编写的Browser Helper Object(BHO)的原始代码。BHO是一种特殊类型的Windows COM对象,它可以嵌入到Internet Explorer浏览器中,为用户提供自定义的功能,如增强浏览体验、...
在Delphi中开发BHO,开发者可以利用其强大的VCL(Visual Component Library)框架和丰富的库资源,实现与Windows系统和应用程序的深度集成。 **Browser Helper Object (BHO)** BHO是Microsoft IE浏览器的一个扩展...
**Delphi 开发的 BHO (Browser Helper Object) 是一种用于 Internet Explorer 浏览器的扩展组件,它允许开发者在浏览器环境中实现自定义功能。**BHO 通常以 DLL(动态链接库)的形式存在,通过注册到 Windows 系统中...
在本文中,我们将深入探讨如何使用Delphi编写BHO代码以及相关知识点。 **1. BHO的概念与作用** BHO是Windows系统中的一个COM对象,它能够嵌入到Internet Explorer进程中,提供如网页增强、工具栏、广告拦截等自定义...
在本压缩包文件"自己编写的BHO.zip"中,包含了开发一个BHO所需的基本元素,让我们来详细了解一下。 首先,**IEBHO.dpr**文件是Delphi项目的主文件,用于启动项目并包含程序的入口点。在这个文件中,开发者会声明BHO...
DEPHI BHO源程序是Delphi编程语言中创建Browser Helper Object(BHO)的源代码集合。...不过,需要注意的是,由于BHO直接与浏览器交互,因此对安全性和性能的要求较高,开发者在编写BHO时应确保代码的健壮性和安全性。
文章还提到编写BHO来截获并替换百度、谷歌等搜索引擎的搜索表单。实现这一功能,程序员需要编写代码来监听浏览器事件,然后在适当的时机替换掉原有的表单,插入自定义的表单。这样,用户在使用搜索引擎时会发送请求...
在IE浏览器的标准按钮栏添加图标是一项常见的自定义设置任务,特别是在开发特定的浏览器插件或扩展时。Delphi是一款强大的Windows应用程序开发工具,它提供了丰富的组件库和接口,使得开发者可以方便地与像IE这样的...
在早期的互联网时代,开发者经常使用Delphi这样的集成开发环境(IDE)来构建自定义的浏览器扩展,其中就包括IE工具栏。这种工具栏能够为用户在浏览网页时提供额外的功能,比如快捷按钮、下拉菜单、搜索框等。 ...
在Delphi中,我们可以使用TToolBar组件来创建工具栏,这个组件允许我们添加各种按钮并设置其属性,如图标、点击事件等。 步骤1:启动Delphi IDE 打开Delphi集成开发环境,创建一个新的VCL Forms应用程序项目。在...
在这个项目中,开发者使用Delphi编写源代码来实现IE搜索栏的定制。Delphi的可视化组件库(VCL)提供了一整套用于创建用户界面的组件,使得开发人员能够快速地构建出具有专业外观的应用程序,包括像IE搜索栏这样的...
BHO组件可以在浏览器加载或卸载时自动激活,从而实现各种高级功能,如过滤网页内容、修改HTTP请求/响应头等。 #### 三、何时需要对IE进行扩展 在以下情况下,可能需要考虑使用插件来扩展IE的功能: - **客户端...