//LIBID_SHELL
// 4547D580-355D-11CF-A9BC-00AA004AE837
// DEFINE_GUID(varNameHere, 0x4547D580L, 0x355D, 0x11CF, 0xA9, 0xBC, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);

[
uuid(4547D580-355D-11CF-A9BC-00AA004AE837)
    , helpstring("Shell Explorer Type Library")
    , lcid(0x0000)
    , version(1.0)
]

library ShellExplorerTypeLibrary
    {
    importlib("stdole2.tlb");
// IID_DHyperLink: {0002DF07-0000-0000-C000-000000000046}
	[
		uuid(0002DF07-0000-0000-C000-000000000046),
		helpstring("HyperLink Object."),
		helpcontext(0x0000),
		hidden,
		oleautomation,
		dual
	]
	interface DHyperLink : IDispatch
	{
		// id(0) indicates that this is the "value" member.
		[id(0), propget, helpstring("Returns or sets the Friendly Name for the HyperLink."), helpcontext(0x0000)]
		HRESULT FriendlyName([out, retval] BSTR* pbstrName);

		[id(0), propput, helpstring("Returns or sets the Friendly Name for the HyperLink."), helpcontext(0x0000)]
		HRESULT FriendlyName([in] BSTR bstrName);

		[propget, helpstring("Returns or sets the string reference for the HyperLink."), helpcontext(0x0000)]
		HRESULT Source([out,retval] BSTR* pbstrSource);

		[propput, helpstring("Returns or sets the string reference for the HyperLink."), helpcontext(0x0000)]
		HRESULT Source([in] BSTR bstrSource);

		[helpstring("Jumps to the hyperlink."), helpcontext(0x0000)]
			HRESULT Navigate([in,optional]VARIANT* OpenInNewWindow, [in,optional] VARIANT* NoHistory);

		[propget, helpstring("Returns a pointer to creator of the object."), helpcontext(0x0000)]
		HRESULT Application([out,retval] IDispatch** ppDisp);

		[propget, helpstring("Returns a pointer to the IExplorer Object."), helpcontext(0x0000)]
		HRESULT Parent([out,retval] IDispatch** ppDisp);
	};

// IID_DInternetHistory: {0002DF04-0000-0000-C000-000000000046}
	[
		uuid(0002DF04-0000-0000-C000-000000000046),
		helpstring("Internet History Object."),
		helpcontext(0x0000),
		oleautomation,
		hidden,
		dual
	]
	interface DInternetHistory : IDispatch
	{
		// id(0) indicates that this is the "value" member.
		[id(0), helpstring("Returns a specific Hyperlink object either by HLID or name."), helpcontext(0x0000)]
	HRESULT Item([in] VARIANT* Index, [out, retval] VARIANT* pVarResult);
	        [helpstring("Adds a Hyperlink to the collection"), helpcontext(0x0000)]
	HRESULT Add(
                        	[in] DHyperLink* HLink,
	                        [in, optional] VARIANT* Key,
        	                [in, optional] VARIANT* Before,
                	        [in, optional] VARIANT* After);
	        [helpstring("Returns the number of Hyperlinks in the collection"), helpcontext(0x0000)]
	HRESULT Count([out,retval] long* plCount);
	        [helpstring("Removes a Hyperlink from a Collection object"), helpcontext(0x0000)]
	HRESULT Remove([in] VARIANT* Index);
		[id(-4), restricted, propget]
	HRESULT _NewEnum([out, retval] IUnknown** ppUnk);
		[propget, helpstring("Returns a pointer to the IExplorer Object."), helpcontext(0x0000)]
	HRESULT Application([out,retval] IDispatch** ppDisp);
		[propget, helpstring("Returns a pointer to creator of the object."), helpcontext(0x0000)]
	HRESULT Parent([out,retval] IDispatch** ppDisp);
	};

// IID_DIExplorer: {0002DF05-0000-0000-C000-000000000046}
	[
		uuid(0002DF05-0000-0000-C000-000000000046),
		helpstring("Internet Explorer Frame Object."),
		helpcontext(0x0000),
		hidden,
		oleautomation,
		dual
	]
	interface DIExplorer : IDispatch
	{
		// Standard OLE Automation required methods and properties
		// id(0) indicates that this is the "value" member.
		[id(0), propget, helpstring("Returns name of the application."), helpcontext(0x0000)]
			HRESULT Name([out,retval] BSTR* pbstrName);
		[propget, helpstring("Returns the full pathname to the IExplorer executable."), helpcontext(0x0000)]
			HRESULT FullName([out,retval] BSTR* pbstrFullName);
		[propget, helpstring("Returns a pointer to the IExplorer Object."), helpcontext(0x0000)]
			HRESULT Application([out,retval] IDispatch** ppDisp);
		[propget, helpstring("Returns a pointer to the IExplorer Object."), helpcontext(0x0000)]
			HRESULT Parent([out,retval] IDispatch** ppDisp);

                [propget, helpstring("The horizontal position (pixels) of the frame window relative to the screen"), helpcontext(0x0000)]
                        HRESULT Left([out, retval] long *pl);
                [propput]
                        HRESULT Left([in] long Left);
                [propget, helpstring("The vertical position (pixels) of the frame window relative to the screen"), helpcontext(0x0000)]
                        HRESULT Top([out, retval] long *pl);
                [propput]
                        HRESULT Top([in] long Top);
                [propget, helpstring("The horizontal dimension (pixels) of the frame window"), helpcontext(0x0000)]
                        HRESULT Width([out, retval] long *pl);
                [propput]
                        HRESULT Width([in] long Width);
                [propget, helpstring("The vertical dimension (pixels) of the frame window"), helpcontext(0x0000)]
                        HRESULT Height([out, retval] long *pl);
                [propput]
                        HRESULT Height([in] long Height);
        //        [propget, helpstring("The text in the status bar"), helpcontext(0x0000)]
        //            BSTR    StatusBar(void);
        //        [propput]
        //                HRESULT   StatusBar([in] BSTR Text);

		[propget, helpstring("Determines whether IExplorer is visible or hidden."), helpcontext(0x0000)]
	HRESULT Visible([out, retval] boolean* pBool);
		[propput, helpstring("Determines whether IExplorer is visible or hidden."), helpcontext(0x0000)]
	HRESULT Visible([in] boolean Value);
		[propget, helpstring("Returns the active Document."), helpcontext(0x0000)]
	HRESULT Document([out,retval] IDispatch** ppDisp);
// Added a property to see if the viewer is currenly busy or not...
		[propget, helpstring("Query to see if something is still in progress."), helpcontext(0x0000)]
	HRESULT Busy([out,retval] boolean *pBool);
// End of modifications
		[helpstring("Exits IExplorer and closes the open document."), helpcontext(0x0000)]
	HRESULT Quit();

		// IExplorer specific methods and properties
		[helpstring("Opens a file."), helpcontext(0x0000)]
	HRESULT Open( [in] BSTR Source);
		[helpstring("Prints the current document."), helpcontext(0x0000)]
	HRESULT PrintOut([in] long What,
		[in] VARIANT Numbering,
				[in, optional] VARIANT FirstPage,
				[in, optional] VARIANT Sections,
				[in, optional] VARIANT FileName,
				[in, optional] VARIANT PrinterName,
				[in, optional] VARIANT DriverName,
				[in, optional] VARIANT NoPrinting);
		[helpstring("Navigates to a hyperlink."), helpcontext(0x0000)]
	HRESULT Navigate([in]DHyperLink* Hlink,
							[in,optional]VARIANT* OpenInNewWindow,
							[in,optional] VARIANT* NoHistory);
		[helpstring("Navigates to the previous item in the history list."), helpcontext(0x0000)]
	HRESULT GoBack();
		[helpstring("Navigates to the next item in the history list."), helpcontext(0x0000)]
	HRESULT GoForward();
		[helpstring("Go home/start page."), helpcontext(0x0000)]
	HRESULT GoHome();
		[helpstring("Stops opening a file."), helpcontext(0x0000)]
	HRESULT Stop();
		[helpstring("Refreshes the current file."), helpcontext(0x0000)]
	HRESULT Refresh();
 	        [propget, helpstring("Returns the history list."), helpcontext(0x0000)]
	HRESULT History([out, retval] DInternetHistory** ppDInternetHistory);
// 	        [propget, helpstring("Returns the Favorites list."), helpcontext(0x0000)]
//	HRESULT Favorites([out, retval] DInternetHistory** ppDInternetHistory);
	};

    //CLSID_InternetExplorer
    [
		uuid(0002DF01-0000-0000-C000-000000000046),
		helpstring("Internet Explorer Application Object."),
    ]
    coclass InternetExplorer
        {
        [default] interface       DIExplorer;
        }

 	typedef
    	[
		uuid(0002DF08-0000-0000-C000-000000000046),
		helpstring("Constants for DInternetHistory")
	]
	enum HlinkIDConstants	{
		[helpstring("Previous Item")] 	hlidPrevious = 0,
		[helpstring("Next Item")] 		hlidNext = 0xFFFFFFFF,
		[helpstring("Current Item")] 	hlidCurrent = 0xFFFFFFFE,
		[helpstring("Last Item")] 		hlidStackBottom = 0xFFFFFFFD,
		[helpstring("First Item")] 		hlidStackTop = 0xFFFFFFFC
	} HlinkIDConstants;

    };