Click here to Skip to main content
15,884,237 members
Articles / Programming Languages / C#

WebBrowserControl for the .NET Framework 1.1

Rate me:
Please Sign up or sign in to vote.
3.06/5 (11 votes)
15 Apr 2010CPOL2 min read 98.6K   1.6K   21  
An implementation of a web browser control for the .NET Framework 1.1.
using System;
using System.Runtime;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Security;
using System.Reflection;
using mshtml;
using System.Windows.Forms;

namespace Pajocomo.Windows.Forms
{
	/// <summary>
	/// Defines the types and values for COM-interop.
	/// </summary>
	internal sealed class Interop
	{
		public const int VARIANT_TRUE = -1;
		public const int VARIANT_FALSE = 0;
		public const int DISPID_AMBIENT_DLCONTROL = -5512;
		public const int DISPID_AMBIENT_USERAGENT = -5513;
        public const int INET_E_DEFAULT_ACTION = unchecked((int)0x800C0011);

		private const string IDocHostShowUIClsidString = "C4D244B0-D43E-11CF-893B-00AA00BDCE1A";
		private const string IOleCommandTargetClsidString = "B722BCCB-4E68-101B-A2BC-00AA00404770";
		private const string IOleContainerClsidString = "0000011B-0000-0000-C000-000000000046";
		private const string IOleObjectClsidString = "00000112-0000-0000-C000-000000000046";
		private const string IServiceProviderClsidString = "6d5140c1-7436-11ce-8034-00aa006009fa";
		private const string IProfferServiceClsidString = "cb728b20-f786-11ce-92ad-00aa00a74cd0";
		private const string DWebBrowserEnvents2ClsidString = "34A715A0-6587-11D0-924A-0020AFC7AC4D";
		private const string IAdviseSinkClsidString = "0000010F-0000-0000-C000-000000000046";
		private const string IDocHostUIHandlerClsid = "BD3F23C0-D43E-11CF-893B-00AA00BDCE1A";
		private const string IOleClientSiteClsidString = "00000118-0000-0000-C000-000000000046";
		private const string IWebBrowser2ClsidString = "D30C1661-CDAF-11D0-8A3E-00C04FC9E26E";
		public const string WebBrowserClsidString = "8856f961-340a-11d0-a96b-00c04fd705a2";
		public static readonly Guid DocHostCommandHandlerClsid = new Guid(0xf38bc242,0xb950,0x11d1,0x89,0x18,0x00,0xc0,0x4f,0xc2,0xc8,0x36);

		public sealed class HRESULT
		{
			public const int S_OK = 0;
			public const int S_FALSE = 1;
			public const int FALSE = 0;
			public const int TRUE = 1;
			public const int E_NOTIMPL = unchecked((int)0x80004001L);
			public const int E_NOINTERFACE = unchecked((int)0x80004002L);
		}

		[StructLayout(LayoutKind.Sequential)]
			public class COMRECT
		{
			public int left = 0;
			public int top = 0;
			public int right = 0;
			public int bottom = 0;
		}

		[StructLayout(LayoutKind.Sequential)]
			public class DOCHOSTUIINFO
		{
			public int cbSize = Marshal.SizeOf(typeof(DOCHOSTUIINFO));
			[MarshalAs(UnmanagedType.U4)] public BrowserCapabilities dwFlags = BrowserCapabilities.None;
			public uint dwDoubleClick = 0;
			[MarshalAs(UnmanagedType.BStr)] public string pchHostCss = null;
			[MarshalAs(UnmanagedType.BStr)] public string pchHostNS = null;
		}

		[StructLayout(LayoutKind.Sequential)]
			public sealed class DISPPARAMS
		{
			public IntPtr rgvarg = IntPtr.Zero;
			public IntPtr rgdispidNamedArgs = IntPtr.Zero;
			[MarshalAs(UnmanagedType.U4)]
			public int cArgs = 0;
			[MarshalAs(UnmanagedType.U4)]
			public int cNamedArgs = 0;
			public DISPPARAMS() {}
		}
 
		[StructLayout(LayoutKind.Sequential)]
			public class EXCEPINFO
		{
			[MarshalAs(UnmanagedType.U2)]
			public short wCode = 0;
			[MarshalAs(UnmanagedType.U2)]
			public short wReserved = 0;
			[MarshalAs(UnmanagedType.BStr)]
			public string bstrSource = null;
			[MarshalAs(UnmanagedType.BStr)]
			public string bstrDescription = null;
			[MarshalAs(UnmanagedType.BStr)]
			public string bstrHelpFile = null;
			[MarshalAs(UnmanagedType.U4)]
			public int dwHelpContext = 0;
			public IntPtr pvReserved = IntPtr.Zero;
			public IntPtr pfnDeferredFillIn = IntPtr.Zero;
			[MarshalAs(UnmanagedType.U4)]
			public int scode = 0;
			public EXCEPINFO() {}
		}
 
		/// <summary><para><c>DWebBrowserEvents2</c> interface.</para><para>Web Browser Control events interface</para></summary>
		[Guid(DWebBrowserEnvents2ClsidString)]
			[ComImport]
			[TypeLibType((short)4112)]
			[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
			public interface DWebBrowserEvents2
		{
			/// <summary>
			/// <para><c>StatusTextChange</c> method of <c>DWebBrowserEvents2</c> interface.</para>
			/// <para>Statusbar text changed.</para>
			/// </summary>
			/// <remarks>
			/// <para>An original IDL definition of <c>StatusTextChange</c> method was the following:  <c>HRESULT StatusTextChange (BSTR Text)</c>;</para>
			/// </remarks>
			[DispId(102)]
			void StatusTextChange ([MarshalAs(UnmanagedType.BStr)] string Text);

			/// <summary>
			/// <para><c>ProgressChange</c> method of <c>DWebBrowserEvents2</c> interface.</para>
			/// <para>Fired when download progress is updated.</para>
			/// </summary>
			/// <remarks>
			/// <para>An original IDL definition of <c>ProgressChange</c> method was the following:  <c>HRESULT ProgressChange (long Progress, long ProgressMax)</c>;</para>
			/// </remarks>
			[DispId(108)]
			void ProgressChange (int Progress, int ProgressMax);

			/// <summary><para><c>CommandStateChange</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>The enabled state of a command changed.</para></summary>
			/// <remarks><para>An original IDL definition of <c>CommandStateChange</c> method was the following:  <c>HRESULT CommandStateChange (long Command, VARIANT_BOOL Enable)</c>;</para></remarks>
			[DispId(105)]
			void CommandStateChange (int Command, [MarshalAs(UnmanagedType.VariantBool)] bool Enable);

			/// <summary><para><c>DownloadBegin</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Download of a page started.</para></summary>
			/// <remarks><para>An original IDL definition of <c>DownloadBegin</c> method was the following:  <c>HRESULT DownloadBegin (void)</c>;</para></remarks>
			[DispId(106)]
			void DownloadBegin ();

			/// <summary><para><c>DownloadComplete</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Download of page complete.</para></summary>
			/// <remarks><para>An original IDL definition of <c>DownloadComplete</c> method was the following:  <c>HRESULT DownloadComplete (void)</c>;</para></remarks>
			[DispId(104)]
			void DownloadComplete ();

			/// <summary><para><c>TitleChange</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Document title changed.</para></summary>
			/// <remarks><para>An original IDL definition of <c>TitleChange</c> method was the following:  <c>HRESULT TitleChange (BSTR Text)</c>;</para></remarks>
			[DispId(113)]
			void TitleChange ([MarshalAs(UnmanagedType.BStr)] string Text);

			/// <summary><para><c>PropertyChange</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the PutProperty method has been called.</para></summary>
			/// <remarks><para>An original IDL definition of <c>PropertyChange</c> method was the following:  <c>HRESULT PropertyChange (BSTR szProperty)</c>;</para></remarks>
			[DispId(112)]
			void PropertyChange ([MarshalAs(UnmanagedType.BStr)] string szProperty);

			/// <summary><para><c>BeforeNavigate2</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired before navigate occurs in the given WebBrowser (window or frameset element). The processing of this navigation may be modified.</para></summary>
			/// <remarks><para>An original IDL definition of <c>BeforeNavigate2</c> method was the following:  <c>HRESULT BeforeNavigate2 (IDispatch* pDisp, [in] VARIANT* URL, [in] VARIANT* Flags, [in] VARIANT* TargetFrameName, [in] VARIANT* PostData, [in] VARIANT* Headers, [in, out] VARIANT_BOOL* Cancel)</c>;</para></remarks>
			[DispId(250)]
			void BeforeNavigate2 ([MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object URL, [In] ref object Flags, [In] ref object TargetFrameName, [In] ref object PostData, [In] ref object Headers, [In, Out, MarshalAs(UnmanagedType.VariantBool)] ref bool Cancel);

			/// <summary><para><c>NewWindow2</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>A new, hidden, non-navigated WebBrowser window is needed.</para></summary>
			/// <remarks><para>An original IDL definition of <c>NewWindow2</c> method was the following:  <c>HRESULT NewWindow2 ([in, out] IDispatch** ppDisp, [in, out] VARIANT_BOOL* Cancel)</c>;</para></remarks>
			[DispId(251)]
			void NewWindow2 ([In, Out, MarshalAs(UnmanagedType.IDispatch)] ref object ppDisp, [In, Out, MarshalAs(UnmanagedType.VariantBool)] ref bool Cancel);

			/// <summary><para><c>NavigateComplete2</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the document being navigated to becomes visible and enters the navigation stack.</para></summary>
			/// <remarks><para>An original IDL definition of <c>NavigateComplete2</c> method was the following:  <c>HRESULT NavigateComplete2 (IDispatch* pDisp, [in] VARIANT* URL)</c>;</para></remarks>
			[DispId(252)]
			void NavigateComplete2 ([MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object URL);

			/// <summary><para><c>DocumentComplete</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the document being navigated to reaches ReadyState_Complete.</para></summary>
			/// <remarks><para>An original IDL definition of <c>DocumentComplete</c> method was the following:  <c>HRESULT DocumentComplete (IDispatch* pDisp, [in] VARIANT* URL)</c>;</para></remarks>
			[DispId(259)]
			void DocumentComplete ([MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object URL);

			/// <summary><para><c>OnQuit</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when application is quiting.</para></summary>
			/// <remarks><para>An original IDL definition of <c>OnQuit</c> method was the following:  <c>HRESULT OnQuit (void)</c>;</para></remarks>
			[DispId(253)]
			void OnQuit ();

			/// <summary><para><c>OnVisible</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the window should be shown/hidden</para></summary>
			/// <remarks><para>An original IDL definition of <c>OnVisible</c> method was the following:  <c>HRESULT OnVisible (VARIANT_BOOL Visible)</c>;</para></remarks>
			[DispId(254)]
			void OnVisible ([MarshalAs(UnmanagedType.VariantBool)] bool Visible);

			/// <summary><para><c>OnToolBar</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the toolbar  should be shown/hidden</para></summary>
			/// <remarks><para>An original IDL definition of <c>OnToolBar</c> method was the following:  <c>HRESULT OnToolBar (VARIANT_BOOL ToolBar)</c>;</para></remarks>
			[DispId(255)]
			void OnToolBar ([MarshalAs(UnmanagedType.VariantBool)] bool ToolBar);

			/// <summary><para><c>OnMenuBar</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the menubar should be shown/hidden</para></summary>
			/// <remarks><para>An original IDL definition of <c>OnMenuBar</c> method was the following:  <c>HRESULT OnMenuBar (VARIANT_BOOL MenuBar)</c>;</para></remarks>
			[DispId(256)]
			void OnMenuBar ([MarshalAs(UnmanagedType.VariantBool)] bool MenuBar);

			/// <summary><para><c>OnStatusBar</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the statusbar should be shown/hidden</para></summary>
			/// <remarks><para>An original IDL definition of <c>OnStatusBar</c> method was the following:  <c>HRESULT OnStatusBar (VARIANT_BOOL StatusBar)</c>;</para></remarks>
			[DispId(257)]
			void OnStatusBar ([MarshalAs(UnmanagedType.VariantBool)] bool StatusBar);

			/// <summary><para><c>OnFullScreen</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when fullscreen mode should be on/off</para></summary>
			/// <remarks><para>An original IDL definition of <c>OnFullScreen</c> method was the following:  <c>HRESULT OnFullScreen (VARIANT_BOOL FullScreen)</c>;</para></remarks>
			[DispId(258)]
			void OnFullScreen ([MarshalAs(UnmanagedType.VariantBool)] bool FullScreen);

			/// <summary><para><c>OnTheaterMode</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when theater mode should be on/off</para></summary>
			/// <remarks><para>An original IDL definition of <c>OnTheaterMode</c> method was the following:  <c>HRESULT OnTheaterMode (VARIANT_BOOL TheaterMode)</c>;</para></remarks>
			[DispId(260)]
			void OnTheaterMode ([MarshalAs(UnmanagedType.VariantBool)] bool TheaterMode);

			/// <summary><para><c>WindowSetResizable</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the host window should allow/disallow resizing</para></summary>
			/// <remarks><para>An original IDL definition of <c>WindowSetResizable</c> method was the following:  <c>HRESULT WindowSetResizable (VARIANT_BOOL Resizable)</c>;</para></remarks>
			[DispId(262)]
			void WindowSetResizable ([MarshalAs(UnmanagedType.VariantBool)] bool Resizable);

			/// <summary><para><c>WindowSetLeft</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the host window should change its Left coordinate</para></summary>
			/// <remarks><para>An original IDL definition of <c>WindowSetLeft</c> method was the following:  <c>HRESULT WindowSetLeft (long Left)</c>;</para></remarks>
			[DispId(264)]
			void WindowSetLeft (int Left);

			/// <summary><para><c>WindowSetTop</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the host window should change its Top coordinate</para></summary>
			/// <remarks><para>An original IDL definition of <c>WindowSetTop</c> method was the following:  <c>HRESULT WindowSetTop (long Top)</c>;</para></remarks>
			[DispId(265)]
			void WindowSetTop (int Top);

			/// <summary><para><c>WindowSetWidth</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the host window should change its width</para></summary>
			/// <remarks><para>An original IDL definition of <c>WindowSetWidth</c> method was the following:  <c>HRESULT WindowSetWidth (long Width)</c>;</para></remarks>
			[DispId(266)]
			void WindowSetWidth (int Width);

			/// <summary><para><c>WindowSetHeight</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the host window should change its height</para></summary>
			/// <remarks><para>An original IDL definition of <c>WindowSetHeight</c> method was the following:  <c>HRESULT WindowSetHeight (long Height)</c>;</para></remarks>
			[DispId(267)]
			void WindowSetHeight (int Height);

			/// <summary><para><c>WindowClosing</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the WebBrowser is about to be closed by script</para></summary>
			/// <remarks><para>An original IDL definition of <c>WindowClosing</c> method was the following:  <c>HRESULT WindowClosing (VARIANT_BOOL IsChildWindow, [in, out] VARIANT_BOOL* Cancel)</c>;</para></remarks>
			[DispId(263)]
			void WindowClosing ([MarshalAs(UnmanagedType.VariantBool)] bool IsChildWindow, [In, Out, MarshalAs(UnmanagedType.VariantBool)] ref bool Cancel);

			/// <summary><para><c>ClientToHostWindow</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired to request client sizes be converted to host window sizes</para></summary>
			/// <remarks><para>An original IDL definition of <c>ClientToHostWindow</c> method was the following:  <c>HRESULT ClientToHostWindow ([in, out] long* CX, [in, out] long* CY)</c>;</para></remarks>
			[DispId(268)]
			void ClientToHostWindow ([In, Out] ref int CX, [In, Out] ref int CY);

			/// <summary><para><c>SetSecureLockIcon</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired to indicate the security level of the current web page contents</para></summary>
			/// <remarks><para>An original IDL definition of <c>SetSecureLockIcon</c> method was the following:  <c>HRESULT SetSecureLockIcon (long SecureLockIcon)</c>;</para></remarks>
			[DispId(269)]
			void SetSecureLockIcon (int SecureLockIcon);

			/// <summary><para><c>FileDownload</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired to indicate the File Download dialog is opening</para></summary>
			/// <remarks><para>An original IDL definition of <c>FileDownload</c> method was the following:  <c>HRESULT FileDownload ([in, out] VARIANT_BOOL* Cancel)</c>;</para></remarks>
			[DispId(270)]
			void FileDownload ([In, Out, MarshalAs(UnmanagedType.VariantBool)] ref bool Cancel);

			/// <summary><para><c>NavigateError</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when a binding error occurs (window or frameset element).</para></summary>
			/// <remarks><para>An original IDL definition of <c>NavigateError</c> method was the following:  <c>HRESULT NavigateError (IDispatch* pDisp, [in] VARIANT* URL, [in] VARIANT* Frame, [in] VARIANT* StatusCode, [in, out] VARIANT_BOOL* Cancel)</c>;</para></remarks>
			[DispId(271)]
			void NavigateError ([MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object URL, [In] ref object Frame, [In] ref object StatusCode, [In, Out, MarshalAs(UnmanagedType.VariantBool)] ref bool Cancel);

			/// <summary><para><c>PrintTemplateInstantiated</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when a print template is instantiated.</para></summary>
			/// <remarks><para>An original IDL definition of <c>PrintTemplateInstantiated</c> method was the following:  <c>HRESULT PrintTemplateInstantiated (IDispatch* pDisp)</c>;</para></remarks>
			[DispId(225)]
			void PrintTemplateInstantiated ([MarshalAs(UnmanagedType.IDispatch)] object pDisp);

			/// <summary><para><c>PrintTemplateTeardown</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when a print template destroyed.</para></summary>
			/// <remarks><para>An original IDL definition of <c>PrintTemplateTeardown</c> method was the following:  <c>HRESULT PrintTemplateTeardown (IDispatch* pDisp)</c>;</para></remarks>
			[DispId(226)]
			void PrintTemplateTeardown ([MarshalAs(UnmanagedType.IDispatch)] object pDisp);

			/// <summary><para><c>UpdatePageStatus</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when a page is spooled. When it is fired can be changed by a custom template.</para></summary>
			/// <remarks><para>An original IDL definition of <c>UpdatePageStatus</c> method was the following:  <c>HRESULT UpdatePageStatus (IDispatch* pDisp, [in] VARIANT* nPage, [in] VARIANT* fDone)</c>;</para></remarks>
			[DispId(227)]
			void UpdatePageStatus ([MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object nPage, [In] ref object fDone);

			/// <summary><para><c>PrivacyImpactedStateChange</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>Fired when the global privacy impacted state changes</para></summary>
			/// <remarks><para>An original IDL definition of <c>PrivacyImpactedStateChange</c> method was the following:  <c>HRESULT PrivacyImpactedStateChange (VARIANT_BOOL bImpacted)</c>;</para></remarks>
			[DispId(272)]
			void PrivacyImpactedStateChange ([MarshalAs(UnmanagedType.VariantBool)] bool bImpacted);

			/// <summary><para><c>NewWindow3</c> method of <c>DWebBrowserEvents2</c> interface.</para><para>A new, hidden, non-navigated WebBrowser window is needed.</para></summary>
			/// <remarks><para>An original IDL definition of <c>NewWindow3</c> method was the following:  <c>HRESULT NewWindow3 ([in, out] IDispatch** ppDisp, [in, out] VARIANT_BOOL* Cancel, unsigned long dwFlags, BSTR bstrUrlContext, BSTR bstrUrl)</c>;</para></remarks>
			[DispId(273)]
			void NewWindow3 ([In, Out, MarshalAs(UnmanagedType.IDispatch)] ref object ppDisp, [In, Out, MarshalAs(UnmanagedType.VariantBool)] ref bool Cancel, uint dwFlags, [MarshalAs(UnmanagedType.BStr)] string bstrUrlContext, [MarshalAs(UnmanagedType.BStr)] string bstrUrl);
		}

		[
ComImport,
		Guid(IAdviseSinkClsidString),
		InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
			public interface IAdviseSink
		{
			[PreserveSig]
			void OnDataChange(
				[In] object pFormatetc,
				[In] object pStgmed);

			[PreserveSig]
			void OnViewChange(
				int aspect,
				int index);

			[PreserveSig]
			void OnRename(
				[In, MarshalAs(UnmanagedType.Interface)] UCOMIMoniker moniker);

			[PreserveSig]
			void OnSave();

			[PreserveSig]
			void OnClose();
		}
		
		[
			ComImport,
			Guid("BD3F23C0-D43E-11CF-893B-00AA00BDCE1A"),
			ComVisible(true),
			InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
			]
			public interface IDocHostUIHandler
		{
			[PreserveSig]
			int ShowContextMenu(
				int dwID,
				ref tagPOINT ppt,
				[MarshalAs(UnmanagedType.IUnknown)]  object pcmdtReserved,
				[MarshalAs(UnmanagedType.IDispatch)] object pdispReserved);


			void GetHostInfo([In, Out] DOCHOSTUIINFO pInfo);
			void ShowUI(uint dwID, ref object pActiveObject, ref object pCommandTarget, ref object pFrame, ref object pDoc);
			void HideUI();
			void UpdateUI();
			void EnableModeless(int fEnable);
			void OnDocWindowActivate(int fActivate);
			void OnFrameWindowActivate(int fActivate);
			void ResizeBorder(ref tagRECT prcBorder, int pUIWindow, int fRameWindow);


			[PreserveSig]
			int TranslateAccelerator(ref tagMSG lpMsg, ref Guid pguidCmdGroup, uint nCmdID);


			void GetOptionKeyPath([MarshalAs(UnmanagedType.BStr)] ref string pchKey, uint dw);
			object GetDropTarget(ref object pDropTarget);


			void GetExternal([MarshalAs(UnmanagedType.IDispatch)] out object ppDispatch);


			[PreserveSig]
			int TranslateUrl(uint dwTranslate, 
				[MarshalAs(UnmanagedType.BStr)] string pchURLIn,
				[MarshalAs(UnmanagedType.BStr)] ref string ppchURLOut);


			IDataObject FilterDataObject(IDataObject pDO);
		}

        [
            ComImport,
            Guid("C4D244B0-D43E-11CF-893B-00AA00BDCE1A"),
            InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
            ]
            public interface IDocHostShowUI
        {
            [PreserveSig]
            uint ShowMessage(IntPtr hwnd, 
                [MarshalAs(UnmanagedType.LPWStr)] string lpstrText, 
                [MarshalAs(UnmanagedType.LPWStr)] string lpstrCaption, 
                uint dwType, 
                [MarshalAs(UnmanagedType.LPWStr)] string lpstrHelpFile, 
                uint dwHelpContext,
                out int lpResult);

            [PreserveSig]
            uint ShowHelp(
                IntPtr hwnd,
                [MarshalAs(UnmanagedType.LPWStr)] string pszHelpFile, 
                uint uCommand,
                uint dwData, 
                tagPOINT ptMouse, 
                [MarshalAs(UnmanagedType.IDispatch)] object pDispatchObjectHit);               
        }

        [
            ComImport,
            GuidAttribute("79EAC9EE-BAF9-11CE-8C82-00AA004BA90B"),
            InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)
            ]
            public interface IInternetSecurityManager
        {
            [return: MarshalAs(UnmanagedType.I4)]
            [PreserveSig]
			int SetSecuritySite(
				[In] IntPtr pSite);

            [return: MarshalAs(UnmanagedType.I4)]
            [PreserveSig]
            int GetSecuritySite(
				out IntPtr pSite);

            [return: MarshalAs(UnmanagedType.I4)]
            [PreserveSig]
			int MapUrlToZone(
				[In,MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, 
				out UInt32 pdwZone,
				[In] UInt32 dwFlags);

            [return: MarshalAs(UnmanagedType.I4)]
            [PreserveSig]
			int GetSecurityId(
				[In,MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, 
				[Out] IntPtr pbSecurityId, [In, Out] ref UInt32 pcbSecurityId,
				[In] ref UInt32 dwReserved);

            [return: MarshalAs(UnmanagedType.I4)]
            [PreserveSig]
			int ProcessUrlAction(
				[In,MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, 
				UInt32 dwAction,
				IntPtr pPolicy, UInt32 cbPolicy, 
				IntPtr pContext, UInt32 cbContext,
				UInt32 dwFlags, 
				UInt32 dwReserved);

            [return: MarshalAs(UnmanagedType.I4)]
            [PreserveSig]
            int QueryCustomPolicy(
                [In,  MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,  
                ref Guid guidKey,
				out IntPtr ppPolicy, out UInt32 pcbPolicy,
				IntPtr pContext, UInt32 cbContext,
				UInt32 dwReserved);

            [return: MarshalAs(UnmanagedType.I4)]
            [PreserveSig]
			int SetZoneMapping(
				UInt32 dwZone,
				[In,MarshalAs(UnmanagedType.LPWStr)] string lpszPattern, 
				UInt32 dwFlags);

			[return: MarshalAs(UnmanagedType.I4)]
			[PreserveSig]
			int GetZoneMappings(
				[In] UInt32 dwZone,
				out UCOMIEnumString ppenumString, 
				[In] UInt32 dwFlags);
        }

        [
			ComImport,
			Guid("00000118-0000-0000-C000-000000000046"),
			InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
			]
			public interface IOleClientSite
		{
		}

		[
			//ComVisible(true),
			//CLSCompliant(false),
			ComImport,
			Guid("B722BCCB-4E68-101B-A2BC-00AA00404770"),
			InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
			]
			public interface IOleCommandTarget
		{
			//[return: MarshalAs(UnmanagedType.I4)][PreserveSig] int
			void
				QueryStatus(ref Guid pguidCmdGroup, int cCmds, [In, Out] OLECMD prgCmds, [In, Out] IntPtr pCmdText);
			
			[return: MarshalAs(UnmanagedType.I4)]
			[PreserveSig]
			int Exec(
				[In] IntPtr pguidCmdGroup,
				OLECMDID nCmdID,
				int nCmdexecopt,
				[In] IntPtr pvaIn,
				[In] IntPtr pvaOut);
		}
 
		[
			ComImport,
			InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
			Guid("0000011B-0000-0000-C000-000000000046")
			]
			public interface IOleContainer
		{
			[PreserveSig]
			int ParseDisplayName(
				[In, MarshalAs(UnmanagedType.Interface)] object pbc,
				[In, MarshalAs(UnmanagedType.BStr)] string pszDisplayName,
				[Out, MarshalAs(UnmanagedType.LPArray)] int[] pchEaten,
				[Out, MarshalAs(UnmanagedType.LPArray)] object[] ppmkOut);

			[PreserveSig]
			int EnumObjects(
				[In, MarshalAs(UnmanagedType.U4)] int grfFlags,
				out object ppenum);

			[PreserveSig]
			int LockContainer(
				bool fLock);
		}

		[
			ComImport,
			InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
			Guid("00000112-0000-0000-C000-000000000046"),
			SuppressUnmanagedCodeSecurity
			]
			public interface IOleObject
		{
			[PreserveSig]
			int SetClientSite(
				[In, MarshalAs(UnmanagedType.Interface)] Interop.IOleClientSite pClientSite);

			IOleClientSite GetClientSite();

			[PreserveSig]
			int SetHostNames(
				[In, MarshalAs(UnmanagedType.LPWStr)] string szContainerApp,
				[In, MarshalAs(UnmanagedType.LPWStr)] string szContainerObj);

			[PreserveSig]
			int Close(
				int dwSaveOption);

			[PreserveSig]
			int SetMoniker(
				[In, MarshalAs(UnmanagedType.U4)] int dwWhichMoniker,
				[In, MarshalAs(UnmanagedType.Interface)] object pmk);

			[PreserveSig]
			int GetMoniker(
				[In, MarshalAs(UnmanagedType.U4)] int dwAssign,
				[In, MarshalAs(UnmanagedType.U4)] int dwWhichMoniker,
				[MarshalAs(UnmanagedType.Interface)] out object moniker);

			[PreserveSig]
			int InitFromData(
				[In, MarshalAs(UnmanagedType.Interface)] IDataObject pDataObject,
				int fCreation,
				[In, MarshalAs(UnmanagedType.U4)] int dwReserved);

			[PreserveSig]
			int GetClipboardData(
				[In, MarshalAs(UnmanagedType.U4)] int dwReserved,
				out IDataObject data);

			[PreserveSig]
			int DoVerb(
				int iVerb,
				[In] IntPtr lpmsg,
				[In, MarshalAs(UnmanagedType.Interface)] IOleClientSite pActiveSite,
				int lindex,
				IntPtr hwndParent,
				[In] COMRECT lprcPosRect);

			[PreserveSig]
			int EnumVerbs(
				out object e);

			[PreserveSig]
			int OleUpdate();

			[PreserveSig]
			int IsUpToDate();

			[PreserveSig]
			int GetUserClassID(
				[In, Out] ref Guid pClsid);

			[PreserveSig]
			int GetUserType(
				[In, MarshalAs(UnmanagedType.U4)] int dwFormOfType,
				[MarshalAs(UnmanagedType.LPWStr)] out string userType);

			[PreserveSig]
			int SetExtent(
				[In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect,
				[In] object pSizel);

			[PreserveSig]
			int GetExtent(
				[In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect,
				[Out] object pSizel);

			[PreserveSig]
			int Advise(
				IAdviseSink pAdvSink,
				out int cookie);

			[PreserveSig]
			int Unadvise(
				[In, MarshalAs(UnmanagedType.U4)] int dwConnection);

			[PreserveSig]
			int EnumAdvise(
				out object e);

			[PreserveSig]
			int GetMiscStatus(
				[In, MarshalAs(UnmanagedType.U4)] int dwAspect,
				out int misc);

			[PreserveSig]
			int SetColorScheme(
				[In] object pLogpal);
		}

		[
			ComImport,
			Guid("6d5140c1-7436-11ce-8034-00aa006009fa"),
			InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
			]
			public interface IServiceProvider 
		{
			[return: MarshalAs(UnmanagedType.I4)]
			[PreserveSig]
			int QueryService(
				ref Guid guidService,
				ref Guid riid,
				out IntPtr ppvObject);
		}

		[
			ComImport,
			Guid("cb728b20-f786-11ce-92ad-00aa00a74cd0"),
			InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
			]
		public interface IProfferService
		{
			[return: MarshalAs(UnmanagedType.I4)]
			[PreserveSig]
			int ProfferService(ref Guid rguidService, IServiceProvider psp, ref UInt32 pdwCookie);

			[return: MarshalAs(UnmanagedType.I4)]
			[PreserveSig]
			int RevokeService(UInt32 dwCookie);
		}

		/// <summary><para><c>IWebBrowser2</c> interface.</para><para>Web Browser Interface for IE4.</para></summary>
		[Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E")]
			[ComImport]
			[TypeLibType((short)4176)]
			[DefaultMember("Name")]
			[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
			public interface IWebBrowser2
		{
			/// <summary><para><c>GoBack</c> method of <c>IWebBrowser2</c> interface.</para><para>Navigates to the previous item in the history list.</para></summary>
			/// <remarks><para>An original IDL definition of <c>GoBack</c> method was the following:  <c>HRESULT GoBack (void)</c>;</para></remarks>
			[DispId(100)]
			void GoBack ();

			/// <summary><para><c>GoForward</c> method of <c>IWebBrowser2</c> interface.</para><para>Navigates to the next item in the history list.</para></summary>
			/// <remarks><para>An original IDL definition of <c>GoForward</c> method was the following:  <c>HRESULT GoForward (void)</c>;</para></remarks>
			[DispId(101)]
			void GoForward ();

			/// <summary><para><c>GoHome</c> method of <c>IWebBrowser2</c> interface.</para><para>Go home/start page.</para></summary>
			/// <remarks><para>An original IDL definition of <c>GoHome</c> method was the following:  <c>HRESULT GoHome (void)</c>;</para></remarks>
			[DispId(102)]
			void GoHome ();

			/// <summary><para><c>GoSearch</c> method of <c>IWebBrowser2</c> interface.</para><para>Go Search Page.</para></summary>
			/// <remarks><para>An original IDL definition of <c>GoSearch</c> method was the following:  <c>HRESULT GoSearch (void)</c>;</para></remarks>
			[DispId(103)]
			void GoSearch ();

			/// <summary><para><c>Navigate</c> method of <c>IWebBrowser2</c> interface.</para><para>Navigates to a URL or file.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Navigate</c> method was the following:  <c>HRESULT Navigate (BSTR URL, [in, optional] VARIANT* Flags, [in, optional] VARIANT* TargetFrameName, [in, optional] VARIANT* PostData, [in, optional] VARIANT* Headers)</c>;</para></remarks>
			[DispId(104)]
			void Navigate ([MarshalAs(UnmanagedType.BStr)] string URL, [In] ref object Flags, [In] ref object TargetFrameName, [In] ref object PostData, [In] ref object Headers);

			/// <summary><para><c>Refresh</c> method of <c>IWebBrowser2</c> interface.</para><para>Refresh the currently viewed page.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Refresh</c> method was the following:  <c>HRESULT Refresh (void)</c>;</para></remarks>
			[DispId(-550)]
			void Refresh ();

			/// <summary><para><c>Refresh2</c> method of <c>IWebBrowser2</c> interface.</para><para>Refresh the currently viewed page.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Refresh2</c> method was the following:  <c>HRESULT Refresh2 ([in, optional] VARIANT* Level)</c>;</para></remarks>
			[DispId(105)]
			void Refresh2 ([In] ref object Level);

			/// <summary><para><c>Stop</c> method of <c>IWebBrowser2</c> interface.</para><para>Stops opening a file.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Stop</c> method was the following:  <c>HRESULT Stop (void)</c>;</para></remarks>
			[DispId(106)]
			void Stop ();

			/// <summary><para><c>Quit</c> method of <c>IWebBrowser2</c> interface.</para><para>Exits application and closes the open document.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Quit</c> method was the following:  <c>HRESULT Quit (void)</c>;</para></remarks>
			[DispId(300)]
			void Quit ();

			/// <summary><para><c>ClientToWindow</c> method of <c>IWebBrowser2</c> interface.</para><para>Converts client sizes into window sizes.</para></summary>
			/// <remarks><para>An original IDL definition of <c>ClientToWindow</c> method was the following:  <c>HRESULT ClientToWindow ([in, out] int* pcx, [in, out] int* pcy)</c>;</para></remarks>
			[DispId(301)]
			void ClientToWindow ([In, Out] ref int pcx, [In, Out] ref int pcy);

			/// <summary><para><c>PutProperty</c> method of <c>IWebBrowser2</c> interface.</para><para>Associates vtValue with the name szProperty in the context of the object.</para></summary>
			/// <remarks><para>An original IDL definition of <c>PutProperty</c> method was the following:  <c>HRESULT PutProperty (BSTR Property, VARIANT vtValue)</c>;</para></remarks>
			[DispId(302)]
			void PutProperty ([MarshalAs(UnmanagedType.BStr)] string Property, object vtValue);

			/// <summary><para><c>GetProperty</c> method of <c>IWebBrowser2</c> interface.</para><para>Retrieve the Associated value for the property vtValue in the context of the object.</para></summary>
			/// <remarks><para>An original IDL definition of <c>GetProperty</c> method was the following:  <c>HRESULT GetProperty (BSTR Property, [out, retval] VARIANT* ReturnValue)</c>;</para></remarks>
			[DispId(303)]
			object GetProperty ([MarshalAs(UnmanagedType.BStr)] string Property);

			/// <summary><para><c>Navigate2</c> method of <c>IWebBrowser2</c> interface.</para><para>Navigates to a URL or file or pidl.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Navigate2</c> method was the following:  <c>HRESULT Navigate2 ([in] VARIANT* URL, [in, optional] VARIANT* Flags, [in, optional] VARIANT* TargetFrameName, [in, optional] VARIANT* PostData, [in, optional] VARIANT* Headers)</c>;</para></remarks>
			[DispId(500)]
			void Navigate2 ([In] ref object URL, [In] ref object Flags, [In] ref object TargetFrameName, [In] ref object PostData, [In] ref object Headers);

			/// <summary><para><c>QueryStatusWB</c> method of <c>IWebBrowser2</c> interface.</para><para>IOleCommandTarget::QueryStatus</para></summary>
			/// <remarks><para>An original IDL definition of <c>QueryStatusWB</c> method was the following:  <c>HRESULT QueryStatusWB (OLECMDID cmdID, [out, retval] OLECMDF* ReturnValue)</c>;</para></remarks>
			[DispId(501)]
			OLECMDF QueryStatusWB (OLECMDID cmdID);

			/// <summary><para><c>ExecWB</c> method of <c>IWebBrowser2</c> interface.</para><para>IOleCommandTarget::Exec</para></summary>
			/// <remarks><para>An original IDL definition of <c>ExecWB</c> method was the following:  <c>HRESULT ExecWB (OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, [in, optional] VARIANT* pvaIn, [in, out, optional] VARIANT* pvaOut)</c>;</para></remarks>
			[DispId(502)]
			void ExecWB (OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, [In] ref object pvaIn, [In, Out] ref object pvaOut);

			/// <summary><para><c>ShowBrowserBar</c> method of <c>IWebBrowser2</c> interface.</para><para>Set BrowserBar to Clsid</para></summary>
			/// <remarks><para>An original IDL definition of <c>ShowBrowserBar</c> method was the following:  <c>HRESULT ShowBrowserBar ([in] VARIANT* pvaClsid, [in, optional] VARIANT* pvarShow, [in, optional] VARIANT* pvarSize)</c>;</para></remarks>
			[DispId(503)]
			void ShowBrowserBar ([In] ref object pvaClsid, [In] ref object pvarShow, [In] ref object pvarSize);

			/// <summary><para><c>AddressBar</c> property of <c>IWebBrowser2</c> interface.</para><para>Controls whether address bar is shown</para></summary>
			/// <remarks><para>An original IDL definition of <c>AddressBar</c> property was the following:  <c>VARIANT_BOOL AddressBar</c>;</para></remarks>
			bool AddressBar
			{
				[DispId(555)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(555)]
				set;
			}

			/// <summary><para><c>Application</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns the application automation object if accessible, this automation object otherwise.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Application</c> property was the following:  <c>IDispatch* Application</c>;</para></remarks>
			object Application
			{
				[DispId(200)]
				[return: MarshalAs(UnmanagedType.IDispatch)]
				get;
			}

			/// <summary><para><c>Busy</c> property of <c>IWebBrowser2</c> interface.</para><para>Query to see if something is still in progress.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Busy</c> property was the following:  <c>VARIANT_BOOL Busy</c>;</para></remarks>
			bool Busy
			{
				[DispId(212)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
			}

			/// <summary><para><c>Container</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns the container/parent automation object, if any.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Container</c> property was the following:  <c>IDispatch* Container</c>;</para></remarks>
			object Container
			{
				[DispId(202)]
				[return: MarshalAs(UnmanagedType.IDispatch)]
				get;
			}

			/// <summary><para><c>Document</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns the active Document automation object, if any.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Document</c> property was the following:  <c>IDispatch* Document</c>;</para></remarks>
			object Document
			{
				[DispId(203)]
				[return: MarshalAs(UnmanagedType.IDispatch)]
				get;
			}

			/// <summary><para><c>FullName</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns file specification of the application, including path.</para></summary>
			/// <remarks><para>An original IDL definition of <c>FullName</c> property was the following:  <c>BSTR FullName</c>;</para></remarks>
			string FullName
			{
				[DispId(400)]
				[return: MarshalAs(UnmanagedType.BStr)]
				get;
			}

			/// <summary><para><c>FullScreen</c> property of <c>IWebBrowser2</c> interface.</para><para>Maximizes window and turns off statusbar, toolbar, menubar, and titlebar.</para></summary>
			/// <remarks><para>An original IDL definition of <c>FullScreen</c> property was the following:  <c>VARIANT_BOOL FullScreen</c>;</para></remarks>
			bool FullScreen
			{
				[DispId(407)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(407)]
				set;
			}

			/// <summary><para><c>Height</c> property of <c>IWebBrowser2</c> interface.</para><para>The vertical dimension (pixels) of the frame window/object.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Height</c> property was the following:  <c>long Height</c>;</para></remarks>
			int Height
			{
				[DispId(209)]
				get;
				[DispId(209)]
				set;
			}

			/// <summary><para><c>HWND</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns the HWND of the current IE window.</para></summary>
			/// <remarks><para>An original IDL definition of <c>HWND</c> property was the following:  <c>long HWND</c>;</para></remarks>
			int HWND
			{
				[DispId(-515)]
				get;
			}

			/// <summary><para><c>Left</c> property of <c>IWebBrowser2</c> interface.</para><para>The horizontal position (pixels) of the frame window relative to the screen/container.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Left</c> property was the following:  <c>long Left</c>;</para></remarks>
			int Left
			{
				[DispId(206)]
				get;
				[DispId(206)]
				set;
			}

			/// <summary><para><c>LocationName</c> property of <c>IWebBrowser2</c> interface.</para><para>Gets the short (UI-friendly) name of the URL/file currently viewed.</para></summary>
			/// <remarks><para>An original IDL definition of <c>LocationName</c> property was the following:  <c>BSTR LocationName</c>;</para></remarks>
			string LocationName
			{
				[DispId(210)]
				[return: MarshalAs(UnmanagedType.BStr)]
				get;
			}

			/// <summary><para><c>LocationURL</c> property of <c>IWebBrowser2</c> interface.</para><para>Gets the full URL/path currently viewed.</para></summary>
			/// <remarks><para>An original IDL definition of <c>LocationURL</c> property was the following:  <c>BSTR LocationURL</c>;</para></remarks>
			string LocationURL
			{
				[DispId(211)]
				[return: MarshalAs(UnmanagedType.BStr)]
				get;
			}

			/// <summary><para><c>MenuBar</c> property of <c>IWebBrowser2</c> interface.</para><para>Controls whether menubar is shown.</para></summary>
			/// <remarks><para>An original IDL definition of <c>MenuBar</c> property was the following:  <c>VARIANT_BOOL MenuBar</c>;</para></remarks>
			bool MenuBar
			{
				[DispId(406)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(406)]
				set;
			}

			/// <summary><para><c>Name</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns name of the application.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Name</c> property was the following:  <c>BSTR Name</c>;</para></remarks>
			string Name
			{
				[DispId(0)]
				[return: MarshalAs(UnmanagedType.BStr)]
				get;
			}

			/// <summary><para><c>Offline</c> property of <c>IWebBrowser2</c> interface.</para><para>Controls if the frame is offline (read from cache)</para></summary>
			/// <remarks><para>An original IDL definition of <c>Offline</c> property was the following:  <c>VARIANT_BOOL Offline</c>;</para></remarks>
			bool Offline
			{
				[DispId(550)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(550)]
				set;
			}

			/// <summary><para><c>Parent</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns the automation object of the container/parent if one exists or this automation object.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Parent</c> property was the following:  <c>IDispatch* Parent</c>;</para></remarks>
			object Parent
			{
				[DispId(201)]
				[return: MarshalAs(UnmanagedType.IDispatch)]
				get;
			}

			/// <summary><para><c>Path</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns the path to the application.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Path</c> property was the following:  <c>BSTR Path</c>;</para></remarks>
			string Path
			{
				[DispId(401)]
				[return: MarshalAs(UnmanagedType.BStr)]
				get;
			}

			/// <summary><para><c>ReadyState</c> property of <c>IWebBrowser2</c> interface.</para></summary>
			/// <remarks><para>An original IDL definition of <c>ReadyState</c> property was the following:  <c>tagREADYSTATE ReadyState</c>;</para></remarks>
			ReadyState ReadyState
			{
				[DispId(-525)]
				get;
			}

			/// <summary><para><c>RegisterAsBrowser</c> property of <c>IWebBrowser2</c> interface.</para><para>Registers OC as a top-level browser (for target name resolution)</para></summary>
			/// <remarks><para>An original IDL definition of <c>RegisterAsBrowser</c> property was the following:  <c>VARIANT_BOOL RegisterAsBrowser</c>;</para></remarks>
			bool RegisterAsBrowser
			{
				[DispId(552)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(552)]
				set;
			}

			/// <summary><para><c>RegisterAsDropTarget</c> property of <c>IWebBrowser2</c> interface.</para><para>Registers OC as a drop target for navigation</para></summary>
			/// <remarks><para>An original IDL definition of <c>RegisterAsDropTarget</c> property was the following:  <c>VARIANT_BOOL RegisterAsDropTarget</c>;</para></remarks>
			bool RegisterAsDropTarget
			{
				[DispId(553)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(553)]
				set;
			}

			/// <summary><para><c>Resizable</c> property of <c>IWebBrowser2</c> interface.</para><para>Controls whether the window is resizable</para></summary>
			/// <remarks><para>An original IDL definition of <c>Resizable</c> property was the following:  <c>VARIANT_BOOL Resizable</c>;</para></remarks>
			bool Resizable
			{
				[DispId(556)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(556)]
				set;
			}

			/// <summary><para><c>Silent</c> property of <c>IWebBrowser2</c> interface.</para><para>Controls if any dialog boxes can be shown</para></summary>
			/// <remarks><para>An original IDL definition of <c>Silent</c> property was the following:  <c>VARIANT_BOOL Silent</c>;</para></remarks>
			bool Silent
			{
				[DispId(551)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(551)]
				set;
			}

			/// <summary><para><c>StatusBar</c> property of <c>IWebBrowser2</c> interface.</para><para>Turn on or off the statusbar.</para></summary>
			/// <remarks><para>An original IDL definition of <c>StatusBar</c> property was the following:  <c>VARIANT_BOOL StatusBar</c>;</para></remarks>
			bool StatusBar
			{
				[DispId(403)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(403)]
				set;
			}

			/// <summary><para><c>StatusText</c> property of <c>IWebBrowser2</c> interface.</para><para>Text of Status window.</para></summary>
			/// <remarks><para>An original IDL definition of <c>StatusText</c> property was the following:  <c>BSTR StatusText</c>;</para></remarks>
			string StatusText
			{
				[DispId(404)]
				[return: MarshalAs(UnmanagedType.BStr)]
				get;
				[DispId(404)]
				set;
			}

			/// <summary><para><c>TheaterMode</c> property of <c>IWebBrowser2</c> interface.</para><para>Controls if the browser is in theater mode</para></summary>
			/// <remarks><para>An original IDL definition of <c>TheaterMode</c> property was the following:  <c>VARIANT_BOOL TheaterMode</c>;</para></remarks>
			bool TheaterMode
			{
				[DispId(554)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(554)]
				set;
			}

			/// <summary><para><c>ToolBar</c> property of <c>IWebBrowser2</c> interface.</para><para>Controls which toolbar is shown.</para></summary>
			/// <remarks><para>An original IDL definition of <c>ToolBar</c> property was the following:  <c>int ToolBar</c>;</para></remarks>
			bool ToolBar
			{
				[DispId(405)]
				get;
				[DispId(405)]
				set;
			}

			/// <summary><para><c>Top</c> property of <c>IWebBrowser2</c> interface.</para><para>The vertical position (pixels) of the frame window relative to the screen/container.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Top</c> property was the following:  <c>long Top</c>;</para></remarks>
			int Top
			{
				[DispId(207)]
				get;
				[DispId(207)]
				set;
			}

			/// <summary><para><c>TopLevelContainer</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns True if this is the top level object.</para></summary>
			/// <remarks><para>An original IDL definition of <c>TopLevelContainer</c> property was the following:  <c>VARIANT_BOOL TopLevelContainer</c>;</para></remarks>
			bool TopLevelContainer
			{
				[DispId(204)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
			}

			/// <summary><para><c>Type</c> property of <c>IWebBrowser2</c> interface.</para><para>Returns the type of the contained document object.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Type</c> property was the following:  <c>BSTR Type</c>;</para></remarks>
			string Type
			{
				[DispId(205)]
				[return: MarshalAs(UnmanagedType.BStr)]
				get;
			}

			/// <summary><para><c>Visible</c> property of <c>IWebBrowser2</c> interface.</para><para>Determines whether the application is visible or hidden.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Visible</c> property was the following:  <c>VARIANT_BOOL Visible</c>;</para></remarks>
			bool Visible
			{
				[DispId(402)]
				[return: MarshalAs(UnmanagedType.VariantBool)]
				get;
				[DispId(402)]
				set;
			}

			/// <summary><para><c>Width</c> property of <c>IWebBrowser2</c> interface.</para><para>The horizontal dimension (pixels) of the frame window/object.</para></summary>
			/// <remarks><para>An original IDL definition of <c>Width</c> property was the following:  <c>long Width</c>;</para></remarks>
			int Width
			{
				[DispId(208)]
				get;
				[DispId(208)]
				set;
			}
		}

		[
			StructLayout(LayoutKind.Sequential),
			CLSCompliant(false)
			]
			public class OLECMD
		{
			[MarshalAs(UnmanagedType.U4)]
			public int cmdID = 0;
			[MarshalAs(UnmanagedType.U4)]
			public int cmdf = 0;
			public OLECMD() {}
		}
 
		public enum OLECMDEXECOPT : int
		{
			OLECMDEXECOPT_DODEFAULT = 0,
			OLECMDEXECOPT_PROMPTUSER = 1,
			OLECMDEXECOPT_DONTPROMPTUSER = 2,
			OLECMDEXECOPT_SHOWHELP = 3
		}

		/// <summary><para>OLECMDF enumeration.</para></summary>
		[TypeLibType((short)0)]
			public enum OLECMDF
		{
			/// <summary><para><c>OLECMDF_SUPPORTED</c> constant of <c>OLECMDF</c> enumeration.  </para><para>Constant value is 1.</para></summary>
			OLECMDF_SUPPORTED = 1,

			/// <summary><para><c>OLECMDF_ENABLED</c> constant of <c>OLECMDF</c> enumeration.  </para><para>Constant value is 2.</para></summary>
			OLECMDF_ENABLED = 2,

			/// <summary><para><c>OLECMDF_LATCHED</c> constant of <c>OLECMDF</c> enumeration.  </para><para>Constant value is 4.</para></summary>
			OLECMDF_LATCHED = 4,

			/// <summary><para><c>OLECMDF_NINCHED</c> constant of <c>OLECMDF</c> enumeration.  </para><para>Constant value is 8.</para></summary>
			OLECMDF_NINCHED = 8,

			/// <summary><para><c>OLECMDF_INVISIBLE</c> constant of <c>OLECMDF</c> enumeration.  </para><para>Constant value is 16.</para></summary>
			OLECMDF_INVISIBLE = 16,

			/// <summary><para><c>OLECMDF_DEFHIDEONCTXTMENU</c> constant of <c>OLECMDF</c> enumeration.  </para><para>Constant value is 32.</para></summary>
			OLECMDF_DEFHIDEONCTXTMENU = 32
		}

		/// <summary><para>OLECMDID enumeration.</para></summary>
		[TypeLibType((short)0)]
			public enum OLECMDID : uint
		{
			/// <summary><para><c>OLECMDID_OPEN</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 1.</para></summary>
			OLECMDID_OPEN = 1,

			/// <summary><para><c>OLECMDID_NEW</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 2.</para></summary>
			OLECMDID_NEW = 2,

			/// <summary><para><c>OLECMDID_SAVE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 3.</para></summary>
			OLECMDID_SAVE = 3,

			/// <summary><para><c>OLECMDID_SAVEAS</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 4.</para></summary>
			OLECMDID_SAVEAS = 4,

			/// <summary><para><c>OLECMDID_SAVECOPYAS</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 5.</para></summary>
			OLECMDID_SAVECOPYAS = 5,

			/// <summary><para><c>OLECMDID_PRINT</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 6.</para></summary>
			OLECMDID_PRINT = 6,

			/// <summary><para><c>OLECMDID_PRINTPREVIEW</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 7.</para></summary>
			OLECMDID_PRINTPREVIEW = 7,

			/// <summary><para><c>OLECMDID_PAGESETUP</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 8.</para></summary>
			OLECMDID_PAGESETUP = 8,

			/// <summary><para><c>OLECMDID_SPELL</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 9.</para></summary>
			OLECMDID_SPELL = 9,

			/// <summary><para><c>OLECMDID_PROPERTIES</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 10.</para></summary>
			OLECMDID_PROPERTIES = 10,

			/// <summary><para><c>OLECMDID_CUT</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 11.</para></summary>
			OLECMDID_CUT = 11,

			/// <summary><para><c>OLECMDID_COPY</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 12.</para></summary>
			OLECMDID_COPY = 12,

			/// <summary><para><c>OLECMDID_PASTE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 13.</para></summary>
			OLECMDID_PASTE = 13,

			/// <summary><para><c>OLECMDID_PASTESPECIAL</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 14.</para></summary>
			OLECMDID_PASTESPECIAL = 14,

			/// <summary><para><c>OLECMDID_UNDO</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 15.</para></summary>
			OLECMDID_UNDO = 15,

			/// <summary><para><c>OLECMDID_REDO</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 16.</para></summary>
			OLECMDID_REDO = 16,

			/// <summary><para><c>OLECMDID_SELECTALL</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 17.</para></summary>
			OLECMDID_SELECTALL = 17,

			/// <summary><para><c>OLECMDID_CLEARSELECTION</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 18.</para></summary>
			OLECMDID_CLEARSELECTION = 18,

			/// <summary><para><c>OLECMDID_ZOOM</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 19.</para></summary>
			OLECMDID_ZOOM = 19,

			/// <summary><para><c>OLECMDID_GETZOOMRANGE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 20.</para></summary>
			OLECMDID_GETZOOMRANGE = 20,

			/// <summary><para><c>OLECMDID_UPDATECOMMANDS</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 21.</para></summary>
			OLECMDID_UPDATECOMMANDS = 21,

			/// <summary><para><c>OLECMDID_REFRESH</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 22.</para></summary>
			OLECMDID_REFRESH = 22,

			/// <summary><para><c>OLECMDID_STOP</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 23.</para></summary>
			OLECMDID_STOP = 23,

			/// <summary><para><c>OLECMDID_HIDETOOLBARS</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 24.</para></summary>
			OLECMDID_HIDETOOLBARS = 24,

			/// <summary><para><c>OLECMDID_SETPROGRESSMAX</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 25.</para></summary>
			OLECMDID_SETPROGRESSMAX = 25,

			/// <summary><para><c>OLECMDID_SETPROGRESSPOS</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 26.</para></summary>
			OLECMDID_SETPROGRESSPOS = 26,

			/// <summary><para><c>OLECMDID_SETPROGRESSTEXT</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 27.</para></summary>
			OLECMDID_SETPROGRESSTEXT = 27,

			/// <summary><para><c>OLECMDID_SETTITLE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 28.</para></summary>
			OLECMDID_SETTITLE = 28,

			/// <summary><para><c>OLECMDID_SETDOWNLOADSTATE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 29.</para></summary>
			OLECMDID_SETDOWNLOADSTATE = 29,

			/// <summary><para><c>OLECMDID_STOPDOWNLOAD</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 30.</para></summary>
			OLECMDID_STOPDOWNLOAD = 30,

			/// <summary><para><c>OLECMDID_ONTOOLBARACTIVATED</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 31.</para></summary>
			OLECMDID_ONTOOLBARACTIVATED = 31,

			/// <summary><para><c>OLECMDID_FIND</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 32.</para></summary>
			OLECMDID_FIND = 32,

			/// <summary><para><c>OLECMDID_DELETE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 33.</para></summary>
			OLECMDID_DELETE = 33,

			/// <summary><para><c>OLECMDID_HTTPEQUIV</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 34.</para></summary>
			OLECMDID_HTTPEQUIV = 34,

			/// <summary><para><c>OLECMDID_HTTPEQUIV_DONE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 35.</para></summary>
			OLECMDID_HTTPEQUIV_DONE = 35,

			/// <summary><para><c>OLECMDID_ENABLE_INTERACTION</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 36.</para></summary>
			OLECMDID_ENABLE_INTERACTION = 36,

			/// <summary><para><c>OLECMDID_ONUNLOAD</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 37.</para></summary>
			OLECMDID_ONUNLOAD = 37,

			/// <summary><para><c>OLECMDID_PROPERTYBAG2</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 38.</para></summary>
			OLECMDID_PROPERTYBAG2 = 38,

			/// <summary><para><c>OLECMDID_PREREFRESH</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 39.</para></summary>
			OLECMDID_PREREFRESH = 39,

			/// <summary><para><c>OLECMDID_SHOWSCRIPTERROR</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 40.</para></summary>
			OLECMDID_SHOWSCRIPTERROR = 40,

			/// <summary><para><c>OLECMDID_SHOWMESSAGE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 41.</para></summary>
			OLECMDID_SHOWMESSAGE = 41,

			/// <summary><para><c>OLECMDID_SHOWFIND</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 42.</para></summary>
			OLECMDID_SHOWFIND = 42,

			/// <summary><para><c>OLECMDID_SHOWPAGESETUP</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 43.</para></summary>
			OLECMDID_SHOWPAGESETUP = 43,

			/// <summary><para><c>OLECMDID_SHOWPRINT</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 44.</para></summary>
			OLECMDID_SHOWPRINT = 44,

			/// <summary><para><c>OLECMDID_CLOSE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 45.</para></summary>
			OLECMDID_CLOSE = 45,

			/// <summary><para><c>OLECMDID_ALLOWUILESSSAVEAS</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 46.</para></summary>
			OLECMDID_ALLOWUILESSSAVEAS = 46,

			/// <summary><para><c>OLECMDID_DONTDOWNLOADCSS</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 47.</para></summary>
			OLECMDID_DONTDOWNLOADCSS = 47,

			/// <summary><para><c>OLECMDID_UPDATEPAGESTATUS</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 48.</para></summary>
			OLECMDID_UPDATEPAGESTATUS = 48,

			/// <summary><para><c>OLECMDID_PRINT2</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 49.</para></summary>
			OLECMDID_PRINT2 = 49,

			/// <summary><para><c>OLECMDID_PRINTPREVIEW2</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 50.</para></summary>
			OLECMDID_PRINTPREVIEW2 = 50,

			/// <summary><para><c>OLECMDID_SETPRINTTEMPLATE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 51.</para></summary>
			OLECMDID_SETPRINTTEMPLATE = 51,

			/// <summary><para><c>OLECMDID_GETPRINTTEMPLATE</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 52.</para></summary>
			OLECMDID_GETPRINTTEMPLATE = 52,

			/// <summary><para><c>OLECMDID_PAGEACTIONBLOCKED</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 55.</para></summary>
			OLECMDID_PAGEACTIONBLOCKED = 55,

			/// <summary><para><c>OLECMDID_PAGEACTIONUIQUERY</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 56.</para></summary>
			OLECMDID_PAGEACTIONUIQUERY = 56,

			/// <summary><para><c>OLECMDID_FOCUSVIEWCONTROLS</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 57.</para></summary>
			OLECMDID_FOCUSVIEWCONTROLS = 57,

			/// <summary><para><c>OLECMDID_FOCUSVIEWCONTROLSQUERY</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 58.</para></summary>
			OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,

			/// <summary><para><c>OLECMDID_SHOWPAGEACTIONMENU</c> constant of <c>OLECMDID</c> enumeration.  </para><para>Constant value is 59.</para></summary>
			OLECMDID_SHOWPAGEACTIONMENU = 59
		}

		public sealed class OLECMDERR
		{
			public const int OLECMDERR_E_NOTSUPPORTED = unchecked((int)0x80040100);
			public const int OLECMDERR_E_DISABLED = unchecked((int)0x80040101);
			public const int OLECMDERR_E_NOHELP = unchecked((int)0x80040102);
			public const int OLECMDERR_E_CANCELED = unchecked((int)0x80040103);
			public const int OLECMDERR_E_UNKNOWNGROUP = unchecked((int)0x80040104);
		}

		[
			StructLayout(LayoutKind.Sequential)
			]
			public struct tagMSG
		{
			public IntPtr hwnd;
			public int message;
			public IntPtr wParam;
			public IntPtr lParam;
			public int time;
			public int pt_x;
			public int pt_y;
		}

		[StructLayout(LayoutKind.Sequential)]
			public struct WINDOWPOS
		{
			public IntPtr hwnd;
			public IntPtr hwndInsertAfter;
			public int x;
			public int y;
			public int cx;
			public int cy;
			public int flags;
		}

		public sealed class Kernel32
		{
			[DllImport("kernel32.dll", EntryPoint="GetThreadLocale", CharSet=CharSet.Auto)]
			public static extern int GetThreadLCID();
		}

		public sealed class Urlmon
		{
			public const int URLMON_OPTION_USERAGENT = 0x10000001;
			public const int URLMON_OPTION_USERAGENT_REFRESH = 0x10000002;
			public const int URLMON_OPTION_URL_ENCODING = 0x10000004;
			public const int URLMON_OPTION_USE_BINDSTRINGCREDS = 0x10000008;

			[DllImport("urlmon.dll", CharSet=CharSet.Ansi)]
			public static extern int UrlMkGetSessionOption(
				int dwOption,
				System.Text.StringBuilder pBuffer,
				int dwBufferLength,
				ref int pdwBufferLength,
				int dwReserved);

			[DllImport("urlmon.dll", CharSet=CharSet.Ansi)]
			public static extern int UrlMkSetSessionOption(
				int dwOption,
				string pBuffer,
				int dwBufferLength,
				int dwReserved);

			private Urlmon() {}
		}
		
		private Interop() {}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Paulo Morgado
Portugal Portugal

Comments and Discussions