利用Visual C++打造自己的IE浏览器档
- 格式:doc
- 大小:111.00 KB
- 文档页数:27
C#制作多标签浏览器(一)Net Framework 提供了WebBrowser控件,作为制作浏览器的基础。
这个控件的常用方法如下:Navigate(string urlString):浏览urlString表示的网址Navigate(System.Uri url):浏览url表示的网址Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders):浏览urlString表示的网址,并发送postData中的消息(通常我们登录一个网站的时候就会把用户名和密码作为postData发送出去) GoBack():后退GoForward():前进Refresh():刷新Stop():停止GoHome():浏览主页常用属性:Document:获取当前正在浏览的文档DocumentTitle:获取当前正在浏览的网页标题StatusText:获取当前状态栏的文本Url:获取当前正在浏览的网址的UriReadyState:获取浏览的状态常用事件:DocumentTitleChanged,CanGoBackChanged,CanGoForwardChanged,DocumentTitleChanged,ProgressChanged,ProgressChanged这几个意思很明显,就不细说了。
Navigating,开始导航Navigated,导航完成并开始装载文档DocumentCompleted:按理应该是整个文档装载完成,即网页完全显示完才发生,但事实上似乎不是,所以还是慎用这个事件。
用ReadyState来判断是否完全装载完成更好。
这些方法、属性、事件,对于实际浏览来说并不够,因为你要能处理弹出新窗口的信息,就算是你要强制所有的链接都在同一窗口内打开,你也要知道使用者点了什么链接吧。
但是WebBrowser竟然没有提供这个事件,有一个NewWindow事件,在使用者点击链接将要弹出新窗口时发生,但是这个事件没有什么有用的参数,你根本就不知道使用者要打开的是什么链接。
C#操作IE操作IE主要使⽤两个Com Dll:1、Microsoft Internet Controls2、Microsoft HTML Object Library使⽤Microsoft Internet Controls取得所有的已经打开的IE(以Tab计算)SHDocVw.ShellWindows IETabs = new SHDocVw.ShellWindows();每个⼀个Tab都可以操作,每个Tab对应Com Object的SHDocVw.InternetExplorerforeach (SHDocVw.InternetExplorer ieTab in IETabs){}取得每个Tab之后,就可以通过InternetExplorer的Document取得每个页⾯的Dommshtml.HTMLDocument dom = ieTab.Document as mshtml.HTMLDocument;取得Dom之后,基本上就已经取得了操作IE的所有权限了,可以继续使⽤HTML Object Library对页⾯进⾏操作或者通过注册JavaScript,对页⾯进⾏操作:mshtml.IHTMLScriptElement script = dom.createElement("script") as mshtml.IHTMLScriptElement; \\创建script标签script.text = "$(\"[name='wd']\").val('刘德华');"; \\通过Jquery,对百度进⾏操作mshtml.HTMLBody body = dom.body as mshtml.HTMLBody; \\取得body对象body.appendChild((mshtml.IHTMLDOMNode)script); \\注册JavaScript完整代码(循环所有ieTab,对百度页⾯操作...搜索刘德华):SHDocVw.ShellWindows IETabs = new SHDocVw.ShellWindows();foreach (SHDocVw.InternetExplorer ieTab in IETabs){if (ieTab.LocationURL.Contains("")){mshtml.HTMLDocument doc = ieTab.Document as mshtml.HTMLDocument;mshtml.IHTMLScriptElement script = doc.createElement("script") as mshtml.IHTMLScriptElement;script.text = "$(\"[name='wd']\").val('刘德华');";mshtml.HTMLBody body = doc.body as mshtml.HTMLBody;body.appendChild((mshtml.IHTMLDOMNode)script);}}园⾥有其他更加详细的参考Blog:个⼈建议:基本接⼊IE,使⽤Com,然后其他业务操作,通过注⼊JavaScript进⾏操作。
vc模板制作教程
当制作VC模板时,可以遵循以下教程来创建一个没有标题的
模板,并确保文中不存在重复的标题文字。
1. 打开VC模板编辑软件,如Adobe After Effects或Final Cut Pro等。
2. 创建一个新的项目,并选择适合的分辨率和帧速率。
3. 在画面中央或其他合适位置放置一个适当大小的文本框,用于显示标题。
4. 在文本框中输入要显示的标题文本。
5. 适当调整文本框的大小和位置,以确保标题显示在合适的位置。
6. 根据需要选择合适的字体、字号和颜色,以使标题看起来吸引人且容易阅读。
7. 使用软件的动画功能,如缩放、淡入淡出、滚动等,为标题添加一些动态效果,增加视觉吸引力。
8. 可以添加背景、图像、视频片段或其他视觉元素来进一步增强模板的效果。
9. 调整动画的速度和时长,确保标题的显示时间在合适的范围内。
10. 导出模板为视频文件或其他可用格式,以便在需要时使用。
使用这个教程,你可以制作一个没有标题的VC模板,并避免
在文中出现重复的标题文字。
记住,模板的创意和设计可以根据个人喜好和需求进行调整和修改。
目录如何使用BHO定制你的Internet Explorer浏览器 (2)一、简介(Introduction) (2)二、关于软件定制(Program Customization) (2)三、什么是BHO? (What Are Browser Helper Objects?) (2)四、BHO的生存周期(The Lifecycle of Helper Objects) (4)五、关于IObjectWithSite接口(The IObjectWithSite Interface) (5)六、构造自己的BHO对象(Writing a Browser Helper Object) (6)七、探测谁在调用这个对象Detecting Who's Calling (7)八、与Web浏览器取得联系Get in Touch with WebBrowser (8)九、从Internet Explorer浏览器取得事件Getting Events from the Browser (9)十、存取文档对象Accessing the Document Object (10)十一、管理代码窗口Managing the Code Window (12)十二、注册BHO对象Registration of Helper Objects (13)十三、总结Summary (13)Browser Helper Objects: The Browser the Way You Want It (13)Introduction(简介) (14)Program Customization(关于软件定制) (14)What Are Browser Helper Objects?(什么是BHO?) (15)The Lifecycle of Helper Objects (BHO的生存周期) (17)The IObjectWithSite Interface(关于IObjectWithSite接口) (19)Writing a Browser Helper Object(构造自己的BHO对象) (20)Detecting Who's Calling(七探测谁在调用这个对象) (22)Get in Touch with WebBrowser(八与Web浏览器取得联系) (23)Getting Events from the Browser(九从Internet Explorer浏览器取得事件) . 24 Accessing the Document Object(十存取文档对象) (25)Managing the Code Window(十一管理代码窗口) (29)Registration of Helper Objects(十二注册BHO对象) (30)Summary(总结) (30)如何使用BHO定制你的Internet Explorer浏览器原文:微软公司 Dino Esposito编译:朱先中原文出处:Browser Helper Objects: The Browser the Way You Want It一、简介(Introduction)有时,你可能需要一个定制版本的浏览器。
在VS2024里建立一个最简单的WCF服务在Visual Studio 2024中创建一个最简单的WCF服务,需要完成以下步骤:第一步,创建新的项目:1. 打开Visual Studio 20242.点击“文件”->“新建”->“项目”。
3. 在“项目类型”中选择“Visual C#”->“WCF”。
4.在“模板”中选择“WCF服务应用程序”。
5.输入项目名称和位置,点击“确定”按钮。
第二步,定义服务契约:1. 在“解决方案资源管理器”中,找到“IService1.cs”文件。
2.打开这个文件,删除其中的所有代码。
3.定义一个简单的服务契约,例如:```csharpusing System.ServiceModel;[ServiceContract]public interface IService1[OperationContract]string GetData(int value);```第三步,实现服务契约:1. 在“解决方案资源管理器”中,找到“Service1.svc.cs”文件。
2.打开这个文件,删除其中的所有代码。
3.实现定义的服务契约,例如:```csharppublic class Service1 : IService1public string GetData(int value)return string.Format("You entered: {0}", value);}```第四步,配置服务:1. 在“解决方案资源管理器”中,找到“Web.config”文件。
2.打开这个文件,删除其中的所有代码。
3.配置服务绑定和终结点,例如:```xml<system.serviceModel><services><service name="WcfService1.Service1"><endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1" /><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /></service></services><bindings><basicHttpBinding><binding name="defaultBinding" /></basicHttpBinding></bindings><behaviors><serviceBehaviors><behavior><serviceDebug includeExceptionDetailInFaults="false" /> </behavior></serviceBehaviors></behaviors><serviceHostingEnvironment multipleSiteBindingsEnabled="true" /></system.serviceModel>```第五步,启动服务:1.点击“调试”->“开始调试”或者按下F5键,启动WCF服务应用程序。
VS2024使用教程(使用VS2024编写C语言程序)VS2024是微软公司推出的一款集成开发环境,可用于编写和调试各种编程语言的程序,包括C语言。
下面是一份简单的VS2024使用教程,以帮助您快速上手。
1.安装和启动VS2024-按照安装向导的指示完成安装。
-安装完成后,启动VS20242.创建新的C语言项目-在VS2024的启动界面,选择“新建项目”。
- 在弹出的对话框中,选择“Visual C++”栏目下的“Win32控制台应用程序”。
-输入项目名称和保存位置,点击“确定”。
-在后续对话框中,保持默认设置,点击“下一步”。
-在下一个对话框中,勾选“空项目”,然后点击“完成”。
3.编写C语言程序代码-在解决方案资源管理器中,找到“源文件”文件夹,右键点击并选择“添加”->“新建项”。
- 在弹出的对话框中,选择“C++文件(.cpp)”。
- 输入文件名称,如“main.c”,然后点击“添加”。
-在新创建的文件中,输入您的C语言程序代码。
4.构建和运行程序- 点击工具栏上的“生成”按钮(绿色三角形),或者使用快捷键“Ctrl + F5”进行构建。
-如果程序编译成功,控制台窗口将弹出,并显示程序的输出结果。
5.调试程序-在代码中设定断点,用于在调试时暂停程序的执行。
-点击工具栏上的“运行”按钮(红色圆圈),或者使用快捷键“F5”进行调试。
-当程序执行到断点处,程序将暂停执行,您可以检查变量的值、查看堆栈信息等。
-使用调试工具栏上的按钮,如“继续”、“单步执行”等,进行具体的调试操作。
6.运行程序的不同方式-通过命令行参数运行:在VS2024的菜单栏中,选择“调试”->“以命令行参数运行”进行设定。
-通过修改属性设置运行:右键点击项目,选择“属性”->“配置属性”->“调试”进行设置。
7.版本控制和协作-使用VS2024的“解决方案资源管理器”可以对项目进行版本控制,如添加、删除和比较文件等。
C#WinForm使⽤⾕歌浏览器内核CefSharp中⽂帮助⽂档在开发过程中经常需要在程序中嵌⼊浏览器控件⽤于访问⽹页,Visual Studio中⾃带了⼀个webbrowser控件,但⽆奈这个控件是调⽤⽤户电脑上的IE浏览器来实现的,如果⽤户装的是低版本IE(⽐如Win7的IE8)很多新的⽹页标准就⽆法得到⽀持,这时使⽤CefSharp来替代webbrowser控件是⼀个不错的选择。
这⾥⽤Visual Studio 2015演⽰CefSharp的使⽤。
⾸先请确保程序的⽬标框架⾄少是.NET Framework 4.5.2,不是的话请双击“解决⽅案资源管理器”⾥的Properties更改⽬标框架。
------------恢复内容开始------------------------恢复内容开始------------在开发过程中经常需要在程序中嵌⼊浏览器控件⽤于访问⽹页,Visual Studio中⾃带了⼀个webbrowser控件,但⽆奈这个控件是调⽤⽤户电脑上的IE浏览器来实现的,如果⽤户装的是低版本IE(⽐如Win7的IE8)很多新的⽹页标准就⽆法得到⽀持,这时使⽤CefSharp来替代webbrowser控件是⼀个不错的选择。
这⾥⽤Visual Studio 2015演⽰CefSharp的使⽤。
原作者使⽤的是vs2015 我使⽤的是vs2019 在安装过程中应该会有些出⼊⾸先请确保程序的⽬标框架⾄少是.NET Framework 4.5.2,不是的话请双击“解决⽅案资源管理器”⾥的Properties更改⽬标框架。
在后⾯安装的程序包中需要⾄少4.5.2版本的⽀持点击项⽬菜单下的“管理NuGet程序包”。
在浏览选项卡下的搜索框⾥搜索“cefsharp”,安装搜索结果⾥的CefSharp.WinForms。
然后再安装mon,⼀般在安装这项的时候还会⾃动安装上cef.redist.x86和cef.redist.x64。
IE浏览器作为微软Windows系统捆绑销售的一个浏览工具,用来浏览千姿百态的网页,目前它已经占据了浏览器市场的半壁江山,成为Windows用户不可或缺的工具。
首先,它的界面设计的很漂亮,如扁平按纽(按钮上的图像为灰色,当鼠标放在按钮上时,按钮突起,这种状态称为手柄,并且其上的图像变得鲜艳醒目)、按钮上的文字说明以及按钮边上的小黑三角形状的下拉箭头(单击时显示下拉菜单)、工具条上的地址输入栏等,都体现了Windows2000的风格;其次,它的收藏栏可以收藏用户喜爱的网络地址,这一切都为IE的流行打下了坚实的基础。
说了那么多,也许读者朋友们感觉到IE实现起来一定非常困难,其实IE也是个"纸老虎",实现它的难点主要是在界面效果和显示收藏夹上,笔者在本实例中有针对性的叙述了IE界面、收藏网页的显示、网页的浏览等功能的实现,仔细看过这篇文章后,相信读者朋友们一定可以打造出一个属于自己的浏览器。
本实例中的程序代码编译运行后的界面效果如图一所示:图一、浏览器的运行界面一、实现方法1、浏览器的界面实现首先启动Visual C++6.0,生成一个名为mfcie单文档项目,注意在此过程中不要选择工具条和状态条选项,这样才能更方便我们在后续工作中用代码实现Windwos2000风格的工具条、状态条;在工具条中添加地址栏;项目的视图类的基类设置为ChtmlView,该类的Navigate2()成员函数专门用来现实超文本格式的文档。
在主框架类CmainFrame中定义CStatusBar m_wndStatusBar(状态条对象)、CToolBar m_wndToolBar(工具栏对象)、CReBar m_wndReBar(、CComboBoxEx m_wndAddress(扩展的组合框对象,用来作为地址栏)、CAnimateCtrl m_wndAnimate(动画控件,用来在工具栏上显示动画)、图像列表对象CImageList img(存放显示在工具栏上的图标)等对象。
向当前项目AVI资源文件,ID标志IDR_MFCAVI,添加Bitmap(位图)资源,ID标志分别为IDB_COLDTOOLBAR、IDB_HOTTOOLBAR,分别如下所示:图二、包含按钮图标的位图1)IE风格工具条IE风格界面的实现主要在主框架类的CMainFrame::OnCreate()函数中实现,它的主要思想如下:CReBar对象用来作为工具条、地址栏、动画控件的容器,CImageList对象然后分别装载工具栏上按钮的热点图像和正常状态下显示的图像,并将该对象附给工具条对象,使之建立关联。
为了显示扁平工具栏,需要用CreateEx()函数创建CToolBar对象m_wndToolBar,用ModifyStyle()函数将工具栏的风格设为扁平类型,注意这里不能用CToolBar::Create()或CToolBar:: SetBarStyle()设置这种新风格。
CToolBar 类不支持TBSTYLE_FLAT,要解决这个问题,必须绕过CToolBar类,使用CWnd::ModifyStyle()。
要将某一个工具栏按钮设置为附带有下拉按钮,可以调用SetButtonInfo()设置按钮的风格为TBSTYLE_DROPDOWN。
至于按钮带有中文提示,用工具栏的SetButtonText()就可以轻松实现了。
下面是实现IE风格界面的代码和注释:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){CImageList img; //图像列表对象;CString str; //字符串对象;if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;if (!m_wndReBar.Create(this)) //创建CReBar对象;{ TRACE0("Failed to create rebar\n");return -1; }if (!m_wndToolBar.CreateEx(this)) //使用CreateEx()函数创建工具条对象;{ TRACE0("Failed to create toolbar\n");return -1; }//设置工具栏中的按钮最大最小尺寸;m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50, 150);//设置工具栏上的按钮支持下拉箭头风格;m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);//向图像列表装载热点图像资源,IDB_HOTTOOLBAR为热点图像资源IDimg.Create(IDB_HOTTOOLBAR, 22, 0, RGB(255, 0, 255));m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);img.Detach();//图象列表装载正常状态的图像资源,IDB_COLDTOOLBAR为图像资源IDimg.Create(IDB_COLDTOOLBAR, 22, 0, RGB(255, 0, 255));m_wndToolBar.GetToolBarCtrl().SetImageList(&img);img.Detach();//设置工具条为扁平风格m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);//设置工具条上的按钮个数为9个;m_wndToolBar.SetButtons(NULL, 9);// 装载字符串资源,设置按钮上的文本和按钮的标识号;m_wndToolBar.SetButtonInfo(0, ID_GO_BACK, TBSTYLE_BUTTON, 0);str.LoadString(IDS_BACK);m_wndToolBar.SetButtonText(0, str);m_wndToolBar.SetButtonInfo(1, ID_GO_FORWARD, TBSTYLE_BUTTON, 1);str.LoadString(IDS_FORWARD);m_wndToolBar.SetButtonText(1, str);m_wndToolBar.SetButtonInfo(2, ID_VIEW_STOP, TBSTYLE_BUTTON, 2);str.LoadString(IDS_STOP);m_wndToolBar.SetButtonText(2, str);m_wndToolBar.SetButtonInfo(3, ID_VIEW_REFRESH, TBSTYLE_BUTTON, 3);str.LoadString(IDS_REFRESH);m_wndToolBar.SetButtonText(3, str);m_wndToolBar.SetButtonInfo(4, ID_GO_START_PAGE, TBSTYLE_BUTTON, 4);str.LoadString(IDS_HOME);m_wndToolBar.SetButtonText(4, str);m_wndToolBar.SetButtonInfo(5, ID_GO_SEARCH_THE_WEB, TBSTYLE_BUTTON, 5); str.LoadString(IDS_SEARCH);m_wndToolBar.SetButtonText(5, str);m_wndToolBar.SetButtonInfo(6, ID_FAVORITES_DROPDOWN,TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 6);str.LoadString(IDS_FAVORITES);m_wndToolBar.SetButtonText(6, str);m_wndToolBar.SetButtonInfo(7, ID_FILE_PRINT, TBSTYLE_BUTTON, 7);str.LoadString(IDS_PRINT);m_wndToolBar.SetButtonText(7, str);m_wndToolBar.SetButtonInfo(8, ID_FONT_DROPDOWN, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 8);str.LoadString(IDS_FONT);m_wndToolBar.SetButtonText(8, str);// 设置工具栏上的按钮尺寸和显示在按钮上的图标尺寸;CRect rectToolBar;m_wndToolBar.GetItemRect(0, &rectToolBar);m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(30,20));//创建组合框,用来作为地址栏;if (!m_wndAddress.Create(CBS_DROPDOWN | WS_CHILD, CRect(0, 0, 200, 120), this, AFX_IDW_TOOLBAR + 1)){ TRACE0("Failed to create combobox\n");return -1; }//创建动画控件对象,并打开AVI资源IDR_MFCAVI;m_wndAnimate.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 10, 10), this,AFX_IDW_TOOLBAR + 2);m_wndAnimate.Open(IDR_MFCAVI);//将工具条、地址栏、动画控件等添加到CReBar对象中;m_wndReBar.AddBar(&m_wndToolBar);m_wndReBar.AddBar(&m_wndAnimate, NULL, NULL, RBBS_FIXEDSIZE |RBBS_FIXEDBMP);str.LoadString(IDS_ADDRESS);m_wndReBar.AddBar(&m_wndAddress, str, NULL, RBBS_FIXEDBMP | RBBS_BREAK); //再次设置工具条风格,使之有工具栏提示功能;m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_SIZE_FIXED);//设置状态条;if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))){ TRACE0("Failed to create status bar\n");return -1; }…….//实现"Favorites"菜单的部分,该部分在第二部分介绍;return 0;}2)工具条上的下拉菜单当用户点击按钮上的下拉箭头时,将出现相应的菜单,为了实现这个功能,首先需要在CMainFrame.cpp文件的消息映射中添加消息映射:ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR, OnDropDown);在CmainFrame.h文件中添加消息映射函数声明:afx_msg void OnDropDown(NMHDR* pNotifyStruct, LRESULT* pResult);最后添加下面的代码:void CMainFrame::OnDropDown(NMHDR* pNotifyStruct, LRESULT* pResult){NMTOOLBAR* pNMToolBar = (NMTOOLBAR*)pNotifyStruct;CRect rect;// 得到下拉箭头的位置;m_wndToolBar.GetToolBarCtrl().GetRect(pNMToolBar->iItem, &rect);rect.top = rect.bottom;::ClientToScreen(pNMToolBar->hdr.hwndFrom, &rect.TopLeft());if(pNMToolBar->iItem == ID_FONT_DROPDOWN)//判断是否为选择字体的下拉箭头;{CMenu menu;CMenu* pPopup;menu.LoadMenu(IDR_FONT_POPUP);pPopup = menu.GetSubMenu(0);pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, rect.left, rect.top + 1, AfxGetMainWnd());}else if(pNMToolBar->iItem == ID_FAVORITES_DROPDOWN){//判断是否为显示收藏网页的下拉箭头;CMenu* pPopup;pPopup = GetMenu()->GetSubMenu(3);pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, rect.left,rect.top + 1, AfxGetMainWnd());}*pResult = TBDDRET_DEFAULT;}3)工具条上的动画实现为了美化程序的界面,程序的复合工具条上放置了一个动画控件,用来在适当的时机播放一个动画片段,实现动画效果。