锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 英语翻译 / 开源技术 / csEXWB-Web浏览控件整体实现(如需技术支持,联系QQ)
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
技术分类
问答讨论
LoadHTMLIntoBrowser with base url
execScript 和 OnBeforeNavigate2
鼠标按钮
视频自动播放中阻塞
1.0.0.4版本更新
HTMLAnchorEvents_ Event_onclick 失效?
AutomationTask PerformSelectList和AutomationTask PerformSelectRadio相关问题
WebBrowser控件
编译csExWBDLMan
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。”需要全文内容也请联系孙老师。


csEXWB-Web浏览控件整体实现


默念学员开发公司产品时遇到分析网页内容的困难,在网页里有script脚本生成内容,这些内容通过WebBrowser找不到,也控制不了。我搜索后发现此开源实例能够解决困难。这个实例能够直接看到script脚本生成内容。

DemoApp main window image - csEXWB.gif
HTMLEditor image - htmleditor.gif

Introduction简介

csEXWB is a C# .NET 2.0 control that creates, hosts and sinks the events of the original Webbrowser control (Not .NET or any other wrapper). Advanced customization and total control over the Webbrowser control are achieved via implementation of a number of interfaces, along with the addition of many methods, properties, events and a COM library. The control has no dependencies on MSHTML interop. All of the interfaces, enums and structs are defined within the project. Here are some of the features of this control:csEXWB是适用于.NET2.0平台(当然高级平台也是没问题的)的控件,它能够创建,加载和截获原形WebBrowser控件(非.NET或任何其它封装过的控件)有的事件。高级定制和总体控制通过一些接口可以实现,还提供很多方法、属性、事件和COM库。控件不依赖于MSHTML。所有接口,枚举和结构在工程内定义。下面是一些特性:

  • Can easily be extended by adding other interfaces and methods, unlike .NET or any other Webbrowser wrapper 容易扩展
  • All the basics expected from a Webbrowser wrapper are implemented. Setting/getting UI, and DL control flags. Handling of context menus, keyboard, registry, security manager, script errors, popups, authentication, security problems, font size, message boxes Webbrowser有的这个基本也有
  • Take over file downloads 接管了文件下载
  • Stop dialogs launched using showModelessDialog() and showModalDialog() JavaScript methods
  • Monitor all HTTP and HTTPS request and response headers with the opportunity to add your own headers. This includes images, sounds, scripts, etc.
  • Built in HTMLDocument and HTMLWindow events
  • Frameset aware. All the relevant routines check for frames
  • Full drag and drop support
  • A comprehensive demo that demonstrates how to use most of the functionality offered by this control beyond the basics. An HTTP and HTTPS request and response header viewer which can be used for web application development. A complete DOM viewer. Multi tab simulation. Cookies and Cache viewer and remover, per site or all, A simple file download viewer. A demo of how to retrieve information from document object. An HTML editor with edit, source, and preview panes. Many editing functionalities, internal and external drag drop, font, color, inserting items such as table, reading and setting properties such as table cell, etc.
  • Refresh begin and end events
  • Create and resolve Internet shortcuts using IShellLink interface
  • Load HTML content specifying BaseURL
  • Added functionality to use the control as an MSHTML editor
  • MSHTML as a UI-less HTML parser helper class

Control控件

This is a basic class derived from Control class. It overrides a number of Control methods in order to create, host and dispose the Webbrowser control. In addition, it handles resize events and forwards keyboard, focus, refresh and visibility events to the hosted Webbrowser control.基类是Control。

csExWBDLMan COM library csExWBDLMan COM库

csExWBDLMan is written in VC++ 6.0 using ATL 3.0. It is compiled with minimum dependencies, i.e. no MFC, std::, CString. The library is used to allow the client to employ the IDownloadManager implementation of csExWBDLMan library. In addition, the library implements the PassthroughAPP package by Igor Tandetnik, which enables the client to intercept all HTTP and HTTPS request and responses. The last functionality offered by the library is the ability to set any of the available windows hooks with the option to cancel a call. This functionality is used to stop dialogs launched using the showModelessDialog() and showModalDialog() methods. The library can be used in any other project that needs to set a global windows hook or view HTTP and HTTPS headers, as long as a valid window handle is supplied. csExWBDLMan开发平台为VC6和ATL3.0。依赖的东西少,不依赖MFC,std::和Cstring。库用来让客户端实施IdownloadManager。另外还实现了PassthroughAPP,它支持了所有HTTP和HTTPS的交互。

Before opening the solution or running the demo, you need to register this library在打开解决方案或运行示例前,你需要注册库

  • Copy csExWBDLMan.dll located in the csExWB\COM_Component_Source_Binaries\ReleaseMinDependency sub folder to your system directory 拷贝csExWB\COM_Component_Source_Binaries\ReleaseMinDependency目录下的csExWBDLMan.dll到系统目录下
  • Register csExWBDLMan.dll using regsvr32.exe 使用regsvr32.exe来注册csExWBDLMan.dll
  • Open the solution 打开解决方案

Example: Assuming the system dir path is 'C:\windows\system32\'示例:假定系统目录是'C:\windows\system32\'

regsvr32.exe C:\windows\system32\csExWBDLMan.dll

Interfaces接口

Each interface mentioned below plays a role in either the hosting or customization process. I decided not to go through a detailed explanation of how to implement and use the interfaces. One can easily find all of the information regarding implementation and functionalities offered by these interfaces from MSDN, or right here on this site.

  • IOleClientSite - required as part of Webbrowser control hosting interfaces
  • IOleInPlaceSite - required as part of Webbrowser control hosting interfaces
  • IDocHostShowUI - to handle ::ShowMessage
  • IDocHostUIHandler - to handle ::ShowContextMenu, ::TranslateAccelerator, ::GetOptionKeyPath, ::GetDropTarget and ::GetHostInfo
  • DWebBrowserEvents2 - to handle Webbrowser events
  • IDropTarget - to handle full drag drop internally
  • IServiceProvider - to handle ::QueryService
  • IHttpSecurity - to handle HTTP-related security problems
  • IWindowForBindingUI - returns a handle via ::GetWindow that is used by MSHTML to display information in client UI
  • INewWindowManager - WinX sp2 and up, to handle popups
  • IAuthenticate - to handle basic and NTLM authentication
  • IOleCommandTarget - to intercept script errors via the ::Exec method
  • IinternetSecurityManager - to handle ::ProcessUrlAction
  • IHTMLEventCallBack - A callback mechanism to pass HTMLDocument and HTMLWindow events to the control and, in turn, to the client
  • IProtectFocus - IE7 + Vista - Queries for permission to grab the focus when loading the page or when a script attempts to focus an element
  • IHTMLOMWindowServices - XP sp2 - Enables applications that are hosting the WebBrowser Control to intercept the window object calls for manipulating the host window coordinates from Dynamic HTML (DHTML) script

Properties属性

  • WBDOCDOWNLOADCTLFLAG - get set - DOC_DOWNLOAD_CONTROL_FLAGS
  • DownloadImages - get set - shortcut for DOCDOWNLOADCTLFLAG.DLIMAGES
  • DownloadSounds - get set - shortcut for DOCDOWNLOADCTLFLAG.BGSOUNDS
  • DownloadActiveX - get set - shortcut for DOCDOWNLOADCTLFLAG.NO_DLACTIVEXCTLS
  • DownloadJava - get set - shortcut for DOCDOWNLOADCTLFLAG.NO_JAVA
  • DownloadFrames - get set - shortcut for DOCDOWNLOADCTLFLAG.NO_FRAMEDOWNLOAD
  • DownloadScripts - get set - shortcut for DOCDOWNLOADCTLFLAG.NO_SCRIPTS
  • WBDOCHOSTUIFLAG - get set - DOC_HOST_UI_FLAGS
  • Border3DEnabled - get set - Webbrowser 3D border
  • ScrollBarsEnabled - get set - Webbrowser Scrollbars
  • WBDOCHOSTUIDBLCLK - get set - DOC_HOST_UI_DBLCLK
  • TextSize - get set - Webbrowser zoom property
  • CanGoBack - get - can navigate backward
  • CanGoForward - get - can navigate forward
  • WebbrowserObject - get - Document object of Webbrowser control
  • SendSourceOnDocumentCompleteWBEx - get set - fires DocumentCompleteEX event rather than DocumentComplete. DocumentCompleteEX event has one additional parameter that contains the source of the pDisp document object at the time DocmentComplete was called
  • IEServerHwnd - get - Internet Explorer_Server HWND
  • ShellEmbedingHwnd - get - ShellEmbedding HWND
  • ShellDocObjectHwnd - get - ShellDocObject HWND
  • RegisterAsDropTarget - get set - Webbrowser default drag drop
  • RegisterForInternalDragDrop - get set - Instructs the control to take over drag drop. Uses WBDragxxx and WBDropxxx events to notify the client
  • RegisterAsBrowser - get set - Registers Webbrowser as a top-level browser for target name resolution
  • Silent - get set - whether the Webbrowser control can show dialog boxes
  • LocationName - get - name of the resource that Webbrowser control is currently displaying
  • LocationUrl - get set - URL of the resource that Webbrowser control is currently displaying
  • Busy - get - indicating whether the Webbrowser control is engaged in a navigation or downloading operation
  • OffLine - get set - currently operating in offline mode
  • ReadyState - get - retrieves Readystate of the Webbrowser control
  • ThumbImage - get - Contains a thumb image of the Webbrowser or null
  • ObjectForScripting property. Allows JavaScript functions in an HTML page to call methods and properties of a an instance class passed to this property. Same as ObjectForScripting of C# Webbrowser wrapper control. An example of how to use this property has been provided in WinExternal class of frmMain
  • DocumentTitle - Sets or retrieves the title of the document
  • DocumentSource - Sets or retrieves the HTML source of the document
  • UseInternalDownloadManager - Set to true, default, to allow the control to take over file downloads. FileDownloadExxxx events are fired instead of FileDownload event. This functionality is achieved via COM library which implements IDownloadManager interface. The download routines account for redirect and Content_Disposition header
  • FileDownloadDirectory Default file download directory. Set to users MyDocuments folder by default. Used only if UseInternalDownloadManager property is set to true

Methods方法

Basic

These methods are self explanatory

  • public void Navigate(string URL)
  • public void Navigate(string URL, BrowserNavConstants Flags)
  • public void Navigate(string URL, BrowserNavConstants Flags, string TargetFrameName)
  • public void Navigate(string URL, BrowserNavConstants Flags, string PostData)
  • public void Navigate(string URL, string PostData)
  • public void Navigate(string URL, byte[] PostData)
  • public void Navigate2(string URL)
  • public void Stop()
  • public bool GoBack()
  • public bool GoForward()
  • public void GoHome()
  • public void GoSearch()
  • public void Refresh2(RefreshConstants Level)
  • public bool SelectAll()
  • public bool Clear()
  • public bool ClearSelection()
  • public bool Copy()
  • public bool Paste()
  • public bool Cut()
  • public bool Undo()
  • public bool Redo()
  • public bool Delete()
  • public bool PasteSpecial()
  • public bool Spell()
  • public bool NewWindow()
  • public bool Print()
  • public bool Print2()
  • public bool Properties()
  • public bool PrintPreview()
  • public bool PrintPreview2()
  • public bool PageSetup()
  • public void SaveAs()
  • public bool Find()
  • public bool IEOptions()
  • public bool ViewSource()
  • public void OrganizeFavorites()
  • public void PrivacySettings()
  • public void LanguageDialog()
  • public void ProgramAccessAndDefaults()
  • public void AddToFavorites()
  • public void ImportExport()
  • public void SendLinkByEmail()
  • public void SendPageByEmail()
  • public void SendShortcutToDesktop()

Extended

Note: In a frameset, the bTopLevel parameter determines whether to use the top level document or to attempt to find and use the active document

  • public bool LoadUrlIntoBrowser(String url) - Loads a URL into browser using IPersistMoniker interface
  • public bool LoadHtmlIntoBrowser(string html, string sBaseUrl) - Loads HTML content into browser using LoadHTMLMoniker class and IPersistMoniker interface, allowing client to set the baseurl
  • public bool LoadHtmlIntoBrowser(string html) - Loads HTML content into browser using IPersistStreamInit interface, baseurl, is set to about:blank by MSHTML
  • public void ShowCertificateDialog() - If available, displays certificate for current website
  • public Image DrawThumb(int W, int H, System.Drawing.Imaging.PixelFormat pixFormat) - Uses IE_Server HWND to draw a thumb image of the Webbrowser control. Faster than other methods with one draw back. It only works if the Webbrowser control is in front of Zorder
  • public Image DrawThumb2(int W, int H, System.Drawing.Imaging.PixelFormat pixFormat) - Uses IViewObject interface obtained from IHTMLDocument2 to draw a thumb image of the Webbrowser control
  • public void SaveBrowserImage(string sFileName, System.Drawing.Imaging.PixelFormat pixFormat, System.Drawing.Imaging.ImageFormat format) - Saves Webbrowser image
  • public bool HasFocus()
  • public void SetFocus()
  • public void SetFocusBody()
  • public bool FindInPage(string sFind, bool DownWard, bool MatchWholeWord, bool MatchCase, bool ScrollIntoView) - Finds a match. Returns true if found, else false. In a frameset, it attempts to find and use the active document.
  • public int FindAndHightAllInPage(string sFind, bool MatchWholeWord, bool MatchCase, int cbackColor, int cForeColor) - Finds and highlights all matches. Returns number of matches found. In a frameset, it attempts to find and use the active document.
  • public int FindAndHightAllInPage(string sFind, bool MatchWholeWord, bool MatchCase, string cbackColor, string cForeColor)
  • public int FindAndHightAllInPage(string sFind, bool MatchWholeWord, bool MatchCase, Color cbackColor, Color cForeColor)
  • public bool IsCommandEnabled(string sCmdId) - Wrapper for IHTMLDocument2::queryCommandEnabled
  • public bool SetDesignMode(string sMode)
  • public string GetDesignMode()
  • public IHTMLElement GetActiveElement() - Returns the active element or null. Accounts for frames
  • public IHTMLDocument2 GetActiveDocument() - Returns the active document or null. Accounts for frames
  • public string GetTitle(bool bTopLevel) - Wrapper for IHtmlDocument2::title
  • public string GetTitle(IWebBrowser2 thisBrowser)
  • public string GetText(bool bTopLevel) - Wrapper for IHTMLDocument3::outerText
  • public string GetText(IWebBrowser2 thisBrowser)
  • public string GetSource(bool bTopLevel) - Wrapper for IHTMLDocument3::outerHTML
  • public string GetSource(IWebBrowser2 thisBrowser)
  • public IHTMLElementCollection GetImages(bool bTopLevel) - Wrapper for IHTMLDocument2::images
  • public IHTMLElementCollection GetAnchors(bool bTopLevel) - Wrapper for IHTMLDocument2::anchors
  • public string GetSelectedText(bool bTopLevel, bool ReturnAsHTML) - Returns selection as plain text or HTML.
  • public IHTMLElement ElementFromPoint(bool bTopLevel, int X, int Y) - Wrapper for IHTMLDocument2::elementFromPoint
  • public bool ExecCommand(bool bTopLevel, string CmdId) - Wrapper for IHTMLDocument2::execCommand
  • public bool QueryCommandState(bool bTopLevel, string CmdId) - Wrapper for IHTMLDocument2::queryCommandState
  • public bool OleCommandExec(bool bTopLevel, MSHTML_COMMAND_IDS CmdID) - Wrapper for IHTMLDocument2::IOleCommandTarget::Exec
  • public object QueryCommandValue(string CmdID) - Wrapper for IHTMLDocument2::queryCommandValue
  • public bool QueryCommandState(bool bTopLevel, string CmdId) - Wrapper for IHTMLDocument2::queryCommandState
  • public IHTMLElement GetElementByID(bool bTopLevel, string idval) - Wrapper for IHTMLDocument3::getElementById
  • public IHTMLElementCollection GetElementsByTagName(bool bTopLevel, String tagname) - Wrapper for IHTMLDocument3::getElementsByTagName
  • public IHTMLElementCollection GetElementsByName(bool bTopLevel, string elemname) - Wrapper for IHTMLDocument3::getElementsByName
  • public object execScript(bool bTopLevel, string ScriptName, string ScriptLanguage) - Wrapper for IHTMLWindow2::execScript
  • public bool OleCommandExec(bool bTopLevel, MSHTML_COMMAND_IDS CmdID, object pvaIn) - Wrapper for IHTMLWindow2::execScript, which accepts a parameter
  • public object InvokeScript(string ScriptName, object[] Data) - Invokes a script within the HTML page
  • public object InvokeScript(IWebBrowser2 wb, string ScriptName, object[] Data) - Invokes a script within the HTML page
  • public bool IsFrameset()
  • public int FramesCount()
  • public List<IWebBrowser2> GetFrames() - Returns a List populated with the IWebbrowser interfaces of the frames
  • public bool CreateInternetShortCut(string LocalFileName, string URL, string Description, string IconFileName, int IconIndex) - Attempts to create an Internet shortcut
  • public string ResolveInternetShortCut(string InternetShortCutPath) - Attempts to resolve an Internet shortcut
  • public bool ClearHistory() - Clears IE history
  • public void ActivateHTMLEvents(HTMLEventType EventType, int[] HTMLEventDispIds) - Activates either HTMLdocument or HTMLWindow events
  • public void DeactivateHTMLEvents(HTMLEventType EventType) - Deactivates previously activated HTMLDocument or HTMLwindow events
  • public int DownloadFile(string Url) Attempts to download a file asynch. FileDownloadExXXX events are used for notifications. Return value is a unique ID for this download that can be used to stop the download
  • public void StopFileDownload(int dlUID) Stops a file download that was started by calling the DownloadFile method
  • public void StartHTTPAPP() Call to start receiving HTTP request and response headers via ProtocolHandlerOnResponse and ProtocolHandlerOnBeginTransaction events
  • public void StopHTTPAPP() Call to stop ProtocolHandlerOnResponse and ProtocolHandlerOnBeginTransaction events for HTTP protocol
  • public void StopHTTPSAPP() Call to stop ProtocolHandlerOnResponse and ProtocolHandlerOnBeginTransaction events for HTTPS protocol
  • public void StartHTTPSAPP() Call to start receiving HTTPS request and response headers via ProtocolHandlerOnResponse and ProtocolHandlerOnBeginTransaction events
  • void SetAllowHTMLDialogs() - default true - set allow or disallow flag for HTML dialogs launched using showModelessDialog() and showModalDialog() methods using CBT Window Hook
  • bool GetAllowHTMLDialogs() - get allow or disallow flag for HTML dialogs launched using showModelessDialog() and showModalDialog() methods using CBT Window Hook
  • public bool AutomationTask_PerformClickButton(string btnname) - Performs a click on a Button element with given name
  • public bool AutomationTask_PerformClickLink(string linkname) - Performs a click on a Link element with given name
  • public bool AutomationTask_PerformEnterData(string inputname, string strValue) - Enters strValue into an input element with given name
  • public bool AutomationTask_PerformEnterDataTextArea(string inputname, string strValue) - Enters strValue into a textarea element with given name
  • public bool AutomationTask_PerformSubmitForm(string formname) - Submits a form with given name
  • public bool AutomationTask_PerformSelectList(string selectname, string listitemvalue) - Selects a list item element with given listitemvalue
  • AutomationTask_PerformSelectRadio(string radioname) - Selects a radio or checkbox element with given radioname

Events事件

DWebBrowserEvents2

DocumentComplete has been modified to include an extra parameter, IsTopLevel, which indicates whether or not we have the top-level document.

  • DocumentComplete
  • BeforeNavigate2
  • ClientToHostWindow
  • CommandStateChange
  • DownloadBegin
  • DownloadComplete
  • FileDownload
  • NavigateComplete2
  • NavigateError
  • NewWindow2
  • NewWindow3
  • PrintTemplateInstantiation
  • PrintTemplateTeardown
  • PrivacyImpactedStateChange
  • ProgressChange
  • PropertyChange
  • SetSecureLockIcon
  • StatusTextChange
  • TitleChange
  • WindowClosing
  • WindowSetHeight
  • WindowSetLeft
  • WindowSetResizable
  • WindowSetTop
  • WindowSetWidth
  • UpdatePageStatus

Drag drop拖拉支持

To use internal drag drop functionality, RegisterForInternalDragDrop must be set to true (default)

  • WBDragEnter
  • WBDragLeave
  • WBDragOver
  • WBDragDrop

Extended

FileDownloadExXXX events are activated by setting UseInternalDownloadManager property to true (default)

  • WBKeyDown - Rather than just firing when accelerator keys are used, I have decided to intercept key down and up, which I find to be more useful
  • WBKeyUp
  • WBContextMenu - Handle context menus
  • WBGetOptionKeyPath - Allows the client to set up their own registry settings for Webbrowser control to use
  • WBDocHostShowUIShowMessage - Allows interception of messageboxes
  • DocumentCompleteEX - Setting SendSourceOnDocumentCompleteWBEx property will cause this event to fire instead of DocumentComplete, passing an extra parameter that contains the source of the document
  • WBAuthenticate - Fires for basic and NTLM authentications. For NTLM, client needs to pass credentials as Username = Domain\username
  • WBSecurityProblem - Fires when WinInet encounters a security problem
  • WBEvaluteNewWindow - XPsp2, replaces NewWindowx events
  • RefreshBegin
  • RefreshEnd
  • ScriptError - Fires for script errors. Contains all details in regard to script error
  • ProcessUrlAction - Policy based URL processing
  • HTMLEvent - Only event handler for HTMLDocument and HTMLwindow events
  • FileDownloadExStart - If UseInternalDownloadManager true, notifies client of a request to start a file download. Stop download at any point using a unique ID, save file in the background. Overrides Webbrowser default file download mechanism
  • FileDownloadExEnd - If UseInternalDownloadManager true, notifies client of end of a file download
  • FileDownloadExProgress - If UseInternalDownloadManager true, notifies client of status of a file download
  • FileDownloadExAuthenticate - If UseInternalDownloadManager true, notifies client of a request from server for authentication
  • FileDownloadExError - If UseInternalDownloadManager true, notifies client of an error during a file download
  • ProtocolHandlerOnBeginTransaction Enables the client to view all the HTTP and HTTPS request headers of Webbrowser control
  • ProtocolHandlerOnResponse Enables the client to view all HTTP and HTTPS the response headers of Webbrowser control
  • AllowFocusChange - IE7 Vista - notify client when focus is being changed via implementation of IProtectFocus interface
  • HTMLOMWindowServices_moveTo - IHTMLOMWindowServices implementation - Moves the screen position of the upper-left corner of the application window to the specified coordinates
  • HTMLOMWindowServices_moveBy - IHTMLOMWindowServices implementation - Moves the screen position of the application window by the specified offset values
  • HTMLOMWindowServices_resizeTo - IHTMLOMWindowServices implementation - Changes the current size of the application window by the specified offset values.
  • HTMLOMWindowServices_resizeBy - IHTMLOMWindowServices implementation - Sets the size of the application window to the specified values

Demo application示例程序

I have attempted to make the demo as comprehensive as possible. Here are some of its main features:

  • Multi Tab, Thumb navigation and synchronization of GUI elements
  • Document information
  • DOM information
  • A multi tab HTML editor with source and preview tabs. Offering many functionalities, background and foreground colors, font, font size, alignment, bold, italic, underline, indent, out dent, save, load, print, text back and fore colors. Insert bulleted list, order list, link, image, br, hr, table, table cell properties, source highlighting, a tree populated with most common tags for insertion in source view, full drag drop
  • Full favorites implementation using dynamic menus
  • Cookies and Cache viewer and remover, per site or all
  • Demonstration of just about all DWebBrowserEvents2, including popups.
  • Usage of a static class to share forms and controls within the application
  • Find and highlight in page
  • Authentication
  • Clear cache
  • Loading images from an embedded image strip
  • Search engine query

我们锐英源服务时关注了DOM的显示,通过加载网页后,点击菜单Tools->Document DOM获取网页源文件对应的标签信息,标签是按树形组织的,很容易理解。下面是百度的DOM信息窗口:
DOM

Final note

Although reasonable care has been taken to ensure the correctness of this implementation, expect bugs. This code should never be used in any application without proper verification and testing. When reporting bugs, sending suggestions or requests, or asking a question, please include information regarding IE and OS versions and service packs. Include as much detail as possible. This will be very helpful, not only for me to find and fix bugs or implement requested features, but for others who may be in a similar position.

友情链接
版权所有 Copyright(c)2004-2024 锐英源软件
统一社会信用代码:91410105098562502G 豫ICP备08007559号 最佳分辨率 1440*900
地址:郑州市金水区文化路97号郑州大学北区院内南门附近