/*** Autogenerated by WIDL 0.1 from exdisp.idl - Do not edit ***/
#include <rpc.h>
#include <rpcndr.h>

#ifndef __WIDL_EXDISP_H
#define __WIDL_EXDISP_H
#ifdef __cplusplus
extern "C" {
#endif
#include <ocidl.h>
#include <docobj.h>
#ifndef __IWebBrowser_FWD_DEFINED__
#define __IWebBrowser_FWD_DEFINED__
typedef struct IWebBrowser IWebBrowser;
#endif

typedef enum BrowserNavConstants {
    navOpenInNewWindow = 0x1,
    navNoHistory = 0x2,
    navNoReadFromCache = 0x4,
    navNoWriteToCache = 0x8,
    navAllowAutosearch = 0x10,
    navBrowserBar = 0x20,
    navHyperlink = 0x40,
    navEnforceRestricted = 0x80
} BrowserNavConstants;

typedef enum RefreshConstants {
    REFRESH_NORMAL = 0,
    REFRESH_IFEXPIRED = 1,
    REFRESH_COMPLETELY = 3
} RefreshConstants;

/*****************************************************************************
 * IWebBrowser interface
 */
#ifndef __IWebBrowser_INTERFACE_DEFINED__
#define __IWebBrowser_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWebBrowser, 0xeab22ac1, 0x30c1, 0x11cf, 0xa7,0xeb, 0x00,0x00,0xc0,0x5b,0xae,0x0b);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IWebBrowser : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE GoBack(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GoForward(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GoHome(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GoSearch(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Navigate(
        BSTR URL,
        VARIANT* Flags,
        VARIANT* TargetFrameName,
        VARIANT* PostData,
        VARIANT* Headers) = 0;

    virtual HRESULT STDMETHODCALLTYPE Refresh(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Refresh2(
        VARIANT* Level) = 0;

    virtual HRESULT STDMETHODCALLTYPE Stop(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Application(
        IDispatch** ppDisp) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Parent(
        IDispatch** ppDisp) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Container(
        IDispatch** ppDisp) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Document(
        IDispatch** ppDisp) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_TopLevelContainer(
        VARIANT_BOOL* pBool) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Type(
        BSTR* Type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Left(
        long* pl) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Left(
        long Left) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Top(
        long* pl) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Top(
        long Top) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Width(
        long* pl) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Width(
        long Width) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Height(
        long* pl) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Height(
        long Height) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LocationName(
        BSTR* LocationName) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LocationURL(
        BSTR* LocationURL) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Busy(
        VARIANT_BOOL* pBool) = 0;

};
#else
typedef struct IWebBrowserVtbl IWebBrowserVtbl;
struct IWebBrowser {
    const IWebBrowserVtbl* lpVtbl;
};
struct IWebBrowserVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWebBrowser* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWebBrowser* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWebBrowser* This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IWebBrowser* This,
        UINT* pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IWebBrowser* This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo** ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IWebBrowser* This,
        REFIID riid,
        LPOLESTR* rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID* rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IWebBrowser* This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS* pDispParams,
        VARIANT* pVarResult,
        EXCEPINFO* pExcepInfo,
        UINT* puArgErr);

    /*** IWebBrowser methods ***/
    HRESULT (STDMETHODCALLTYPE *GoBack)(
        IWebBrowser* This);

    HRESULT (STDMETHODCALLTYPE *GoForward)(
        IWebBrowser* This);

    HRESULT (STDMETHODCALLTYPE *GoHome)(
        IWebBrowser* This);

    HRESULT (STDMETHODCALLTYPE *GoSearch)(
        IWebBrowser* This);

    HRESULT (STDMETHODCALLTYPE *Navigate)(
        IWebBrowser* This,
        BSTR URL,
        VARIANT* Flags,
        VARIANT* TargetFrameName,
        VARIANT* PostData,
        VARIANT* Headers);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        IWebBrowser* This);

    HRESULT (STDMETHODCALLTYPE *Refresh2)(
        IWebBrowser* This,
        VARIANT* Level);

    HRESULT (STDMETHODCALLTYPE *Stop)(
        IWebBrowser* This);

    HRESULT (STDMETHODCALLTYPE *get_Application)(
        IWebBrowser* This,
        IDispatch** ppDisp);

    HRESULT (STDMETHODCALLTYPE *get_Parent)(
        IWebBrowser* This,
        IDispatch** ppDisp);

    HRESULT (STDMETHODCALLTYPE *get_Container)(
        IWebBrowser* This,
        IDispatch** ppDisp);

    HRESULT (STDMETHODCALLTYPE *get_Document)(
        IWebBrowser* This,
        IDispatch** ppDisp);

    HRESULT (STDMETHODCALLTYPE *get_TopLevelContainer)(
        IWebBrowser* This,
        VARIANT_BOOL* pBool);

    HRESULT (STDMETHODCALLTYPE *get_Type)(
        IWebBrowser* This,
        BSTR* Type);

    HRESULT (STDMETHODCALLTYPE *get_Left)(
        IWebBrowser* This,
        long* pl);

    HRESULT (STDMETHODCALLTYPE *put_Left)(
        IWebBrowser* This,
        long Left);

    HRESULT (STDMETHODCALLTYPE *get_Top)(
        IWebBrowser* This,
        long* pl);

    HRESULT (STDMETHODCALLTYPE *put_Top)(
        IWebBrowser* This,
        long Top);

    HRESULT (STDMETHODCALLTYPE *get_Width)(
        IWebBrowser* This,
        long* pl);

    HRESULT (STDMETHODCALLTYPE *put_Width)(
        IWebBrowser* This,
        long Width);

    HRESULT (STDMETHODCALLTYPE *get_Height)(
        IWebBrowser* This,
        long* pl);

    HRESULT (STDMETHODCALLTYPE *put_Height)(
        IWebBrowser* This,
        long Height);

    HRESULT (STDMETHODCALLTYPE *get_LocationName)(
        IWebBrowser* This,
        BSTR* LocationName);

    HRESULT (STDMETHODCALLTYPE *get_LocationURL)(
        IWebBrowser* This,
        BSTR* LocationURL);

    HRESULT (STDMETHODCALLTYPE *get_Busy)(
        IWebBrowser* This,
        VARIANT_BOOL* pBool);

    END_INTERFACE
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IWebBrowser_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IWebBrowser_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IWebBrowser_Release(p) (p)->lpVtbl->Release(p)
/*** IDispatch methods ***/
#define IWebBrowser_GetTypeInfoCount(p,a) (p)->lpVtbl->GetTypeInfoCount(p,a)
#define IWebBrowser_GetTypeInfo(p,a,b,c) (p)->lpVtbl->GetTypeInfo(p,a,b,c)
#define IWebBrowser_GetIDsOfNames(p,a,b,c,d,e) (p)->lpVtbl->GetIDsOfNames(p,a,b,c,d,e)
#define IWebBrowser_Invoke(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Invoke(p,a,b,c,d,e,f,g,h)
/*** IWebBrowser methods ***/
#define IWebBrowser_GoBack(p) (p)->lpVtbl->GoBack(p)
#define IWebBrowser_GoForward(p) (p)->lpVtbl->GoForward(p)
#define IWebBrowser_GoHome(p) (p)->lpVtbl->GoHome(p)
#define IWebBrowser_GoSearch(p) (p)->lpVtbl->GoSearch(p)
#define IWebBrowser_Navigate(p,a,b,c,d,e) (p)->lpVtbl->Navigate(p,a,b,c,d,e)
#define IWebBrowser_Refresh(p) (p)->lpVtbl->Refresh(p)
#define IWebBrowser_Refresh2(p,a) (p)->lpVtbl->Refresh2(p,a)
#define IWebBrowser_Stop(p) (p)->lpVtbl->Stop(p)
#define IWebBrowser_get_Application(p,a) (p)->lpVtbl->get_Application(p,a)
#define IWebBrowser_get_Parent(p,a) (p)->lpVtbl->get_Parent(p,a)
#define IWebBrowser_get_Container(p,a) (p)->lpVtbl->get_Container(p,a)
#define IWebBrowser_get_Document(p,a) (p)->lpVtbl->get_Document(p,a)
#define IWebBrowser_get_TopLevelContainer(p,a) (p)->lpVtbl->get_TopLevelContainer(p,a)
#define IWebBrowser_get_Type(p,a) (p)->lpVtbl->get_Type(p,a)
#define IWebBrowser_get_Left(p,a) (p)->lpVtbl->get_Left(p,a)
#define IWebBrowser_put_Left(p,a) (p)->lpVtbl->put_Left(p,a)
#define IWebBrowser_get_Top(p,a) (p)->lpVtbl->get_Top(p,a)
#define IWebBrowser_put_Top(p,a) (p)->lpVtbl->put_Top(p,a)
#define IWebBrowser_get_Width(p,a) (p)->lpVtbl->get_Width(p,a)
#define IWebBrowser_put_Width(p,a) (p)->lpVtbl->put_Width(p,a)
#define IWebBrowser_get_Height(p,a) (p)->lpVtbl->get_Height(p,a)
#define IWebBrowser_put_Height(p,a) (p)->lpVtbl->put_Height(p,a)
#define IWebBrowser_get_LocationName(p,a) (p)->lpVtbl->get_LocationName(p,a)
#define IWebBrowser_get_LocationURL(p,a) (p)->lpVtbl->get_LocationURL(p,a)
#define IWebBrowser_get_Busy(p,a) (p)->lpVtbl->get_Busy(p,a)
#endif

#endif

#define IWebBrowser_METHODS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IDispatch methods ***/ \
    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT* pctinfo) PURE; \
    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) PURE; \
    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) PURE; \
    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) PURE; \
    /*** IWebBrowser methods ***/ \
    STDMETHOD_(HRESULT,GoBack)(THIS) PURE; \
    STDMETHOD_(HRESULT,GoForward)(THIS) PURE; \
    STDMETHOD_(HRESULT,GoHome)(THIS) PURE; \
    STDMETHOD_(HRESULT,GoSearch)(THIS) PURE; \
    STDMETHOD_(HRESULT,Navigate)(THIS_ BSTR URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers) PURE; \
    STDMETHOD_(HRESULT,Refresh)(THIS) PURE; \
    STDMETHOD_(HRESULT,Refresh2)(THIS_ VARIANT* Level) PURE; \
    STDMETHOD_(HRESULT,Stop)(THIS) PURE; \
    STDMETHOD_(HRESULT,get_Application)(THIS_ IDispatch** ppDisp) PURE; \
    STDMETHOD_(HRESULT,get_Parent)(THIS_ IDispatch** ppDisp) PURE; \
    STDMETHOD_(HRESULT,get_Container)(THIS_ IDispatch** ppDisp) PURE; \
    STDMETHOD_(HRESULT,get_Document)(THIS_ IDispatch** ppDisp) PURE; \
    STDMETHOD_(HRESULT,get_TopLevelContainer)(THIS_ VARIANT_BOOL* pBool) PURE; \
    STDMETHOD_(HRESULT,get_Type)(THIS_ BSTR* Type) PURE; \
    STDMETHOD_(HRESULT,get_Left)(THIS_ long* pl) PURE; \
    STDMETHOD_(HRESULT,put_Left)(THIS_ long Left) PURE; \
    STDMETHOD_(HRESULT,get_Top)(THIS_ long* pl) PURE; \
    STDMETHOD_(HRESULT,put_Top)(THIS_ long Top) PURE; \
    STDMETHOD_(HRESULT,get_Width)(THIS_ long* pl) PURE; \
    STDMETHOD_(HRESULT,put_Width)(THIS_ long Width) PURE; \
    STDMETHOD_(HRESULT,get_Height)(THIS_ long* pl) PURE; \
    STDMETHOD_(HRESULT,put_Height)(THIS_ long Height) PURE; \
    STDMETHOD_(HRESULT,get_LocationName)(THIS_ BSTR* LocationName) PURE; \
    STDMETHOD_(HRESULT,get_LocationURL)(THIS_ BSTR* LocationURL) PURE; \
    STDMETHOD_(HRESULT,get_Busy)(THIS_ VARIANT_BOOL* pBool) PURE;

HRESULT CALLBACK IWebBrowser_GoBack_Proxy(
    IWebBrowser* This);
void __RPC_STUB IWebBrowser_GoBack_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_GoForward_Proxy(
    IWebBrowser* This);
void __RPC_STUB IWebBrowser_GoForward_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_GoHome_Proxy(
    IWebBrowser* This);
void __RPC_STUB IWebBrowser_GoHome_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_GoSearch_Proxy(
    IWebBrowser* This);
void __RPC_STUB IWebBrowser_GoSearch_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_Navigate_Proxy(
    IWebBrowser* This,
    BSTR URL,
    VARIANT* Flags,
    VARIANT* TargetFrameName,
    VARIANT* PostData,
    VARIANT* Headers);
void __RPC_STUB IWebBrowser_Navigate_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_Refresh_Proxy(
    IWebBrowser* This);
void __RPC_STUB IWebBrowser_Refresh_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_Refresh2_Proxy(
    IWebBrowser* This,
    VARIANT* Level);
void __RPC_STUB IWebBrowser_Refresh2_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_Stop_Proxy(
    IWebBrowser* This);
void __RPC_STUB IWebBrowser_Stop_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Application_Proxy(
    IWebBrowser* This,
    IDispatch** ppDisp);
void __RPC_STUB IWebBrowser_get_Application_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Parent_Proxy(
    IWebBrowser* This,
    IDispatch** ppDisp);
void __RPC_STUB IWebBrowser_get_Parent_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Container_Proxy(
    IWebBrowser* This,
    IDispatch** ppDisp);
void __RPC_STUB IWebBrowser_get_Container_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Document_Proxy(
    IWebBrowser* This,
    IDispatch** ppDisp);
void __RPC_STUB IWebBrowser_get_Document_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_TopLevelContainer_Proxy(
    IWebBrowser* This,
    VARIANT_BOOL* pBool);
void __RPC_STUB IWebBrowser_get_TopLevelContainer_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Type_Proxy(
    IWebBrowser* This,
    BSTR* Type);
void __RPC_STUB IWebBrowser_get_Type_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Left_Proxy(
    IWebBrowser* This,
    long* pl);
void __RPC_STUB IWebBrowser_get_Left_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_put_Left_Proxy(
    IWebBrowser* This,
    long Left);
void __RPC_STUB IWebBrowser_put_Left_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Top_Proxy(
    IWebBrowser* This,
    long* pl);
void __RPC_STUB IWebBrowser_get_Top_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_put_Top_Proxy(
    IWebBrowser* This,
    long Top);
void __RPC_STUB IWebBrowser_put_Top_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Width_Proxy(
    IWebBrowser* This,
    long* pl);
void __RPC_STUB IWebBrowser_get_Width_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_put_Width_Proxy(
    IWebBrowser* This,
    long Width);
void __RPC_STUB IWebBrowser_put_Width_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Height_Proxy(
    IWebBrowser* This,
    long* pl);
void __RPC_STUB IWebBrowser_get_Height_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_put_Height_Proxy(
    IWebBrowser* This,
    long Height);
void __RPC_STUB IWebBrowser_put_Height_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_LocationName_Proxy(
    IWebBrowser* This,
    BSTR* LocationName);
void __RPC_STUB IWebBrowser_get_LocationName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_LocationURL_Proxy(
    IWebBrowser* This,
    BSTR* LocationURL);
void __RPC_STUB IWebBrowser_get_LocationURL_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowser_get_Busy_Proxy(
    IWebBrowser* This,
    VARIANT_BOOL* pBool);
void __RPC_STUB IWebBrowser_get_Busy_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWebBrowser_INTERFACE_DEFINED__ */

#ifndef __IWebBrowserApp_FWD_DEFINED__
#define __IWebBrowserApp_FWD_DEFINED__
typedef struct IWebBrowserApp IWebBrowserApp;
#endif

/*****************************************************************************
 * IWebBrowserApp interface
 */
#ifndef __IWebBrowserApp_INTERFACE_DEFINED__
#define __IWebBrowserApp_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWebBrowserApp, 0x0002df05, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IWebBrowserApp : public IWebBrowser
{
    virtual HRESULT STDMETHODCALLTYPE Quit(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ClientToWindow(
        int* pcx,
        int* pcy) = 0;

    virtual HRESULT STDMETHODCALLTYPE PutProperty(
        BSTR szProperty,
        VARIANT vtValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProperty(
        BSTR szProperty,
        VARIANT* pvtValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Name(
        BSTR* Name) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_HWND(
        long* pHWND) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_FullName(
        BSTR* FullName) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Path(
        BSTR* Path) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Visible(
        VARIANT_BOOL* pBool) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Visible(
        VARIANT_BOOL Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_StatusBar(
        VARIANT_BOOL* pBool) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_StatusBar(
        VARIANT_BOOL Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_StatusText(
        BSTR* StatusText) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_StatusText(
        BSTR StatusText) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ToolBar(
        int* Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ToolBar(
        int Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_MenuBar(
        VARIANT_BOOL* Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_MenuBar(
        VARIANT_BOOL Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_FullScreen(
        VARIANT_BOOL* pbFullScreen) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_FullScreen(
        VARIANT_BOOL bFullScreen) = 0;

};
#else
typedef struct IWebBrowserAppVtbl IWebBrowserAppVtbl;
struct IWebBrowserApp {
    const IWebBrowserAppVtbl* lpVtbl;
};
struct IWebBrowserAppVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWebBrowserApp* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWebBrowserApp* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWebBrowserApp* This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IWebBrowserApp* This,
        UINT* pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IWebBrowserApp* This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo** ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IWebBrowserApp* This,
        REFIID riid,
        LPOLESTR* rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID* rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IWebBrowserApp* This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS* pDispParams,
        VARIANT* pVarResult,
        EXCEPINFO* pExcepInfo,
        UINT* puArgErr);

    /*** IWebBrowser methods ***/
    HRESULT (STDMETHODCALLTYPE *GoBack)(
        IWebBrowserApp* This);

    HRESULT (STDMETHODCALLTYPE *GoForward)(
        IWebBrowserApp* This);

    HRESULT (STDMETHODCALLTYPE *GoHome)(
        IWebBrowserApp* This);

    HRESULT (STDMETHODCALLTYPE *GoSearch)(
        IWebBrowserApp* This);

    HRESULT (STDMETHODCALLTYPE *Navigate)(
        IWebBrowserApp* This,
        BSTR URL,
        VARIANT* Flags,
        VARIANT* TargetFrameName,
        VARIANT* PostData,
        VARIANT* Headers);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        IWebBrowserApp* This);

    HRESULT (STDMETHODCALLTYPE *Refresh2)(
        IWebBrowserApp* This,
        VARIANT* Level);

    HRESULT (STDMETHODCALLTYPE *Stop)(
        IWebBrowserApp* This);

    HRESULT (STDMETHODCALLTYPE *get_Application)(
        IWebBrowserApp* This,
        IDispatch** ppDisp);

    HRESULT (STDMETHODCALLTYPE *get_Parent)(
        IWebBrowserApp* This,
        IDispatch** ppDisp);

    HRESULT (STDMETHODCALLTYPE *get_Container)(
        IWebBrowserApp* This,
        IDispatch** ppDisp);

    HRESULT (STDMETHODCALLTYPE *get_Document)(
        IWebBrowserApp* This,
        IDispatch** ppDisp);

    HRESULT (STDMETHODCALLTYPE *get_TopLevelContainer)(
        IWebBrowserApp* This,
        VARIANT_BOOL* pBool);

    HRESULT (STDMETHODCALLTYPE *get_Type)(
        IWebBrowserApp* This,
        BSTR* Type);

    HRESULT (STDMETHODCALLTYPE *get_Left)(
        IWebBrowserApp* This,
        long* pl);

    HRESULT (STDMETHODCALLTYPE *put_Left)(
        IWebBrowserApp* This,
        long Left);

    HRESULT (STDMETHODCALLTYPE *get_Top)(
        IWebBrowserApp* This,
        long* pl);

    HRESULT (STDMETHODCALLTYPE *put_Top)(
        IWebBrowserApp* This,
        long Top);

    HRESULT (STDMETHODCALLTYPE *get_Width)(
        IWebBrowserApp* This,
        long* pl);

    HRESULT (STDMETHODCALLTYPE *put_Width)(
        IWebBrowserApp* This,
        long Width);

    HRESULT (STDMETHODCALLTYPE *get_Height)(
        IWebBrowserApp* This,
        long* pl);

    HRESULT (STDMETHODCALLTYPE *put_Height)(
        IWebBrowserApp* This,
        long Height);

    HRESULT (STDMETHODCALLTYPE *get_LocationName)(
        IWebBrowserApp* This,
        BSTR* LocationName);

    HRESULT (STDMETHODCALLTYPE *get_LocationURL)(
        IWebBrowserApp* This,
        BSTR* LocationURL);

    HRESULT (STDMETHODCALLTYPE *get_Busy)(
        IWebBrowserApp* This,
        VARIANT_BOOL* pBool);

    /*** IWebBrowserApp methods ***/
    HRESULT (STDMETHODCALLTYPE *Quit)(
        IWebBrowserApp* This);

    HRESULT (STDMETHODCALLTYPE *ClientToWindow)(
        IWebBrowserApp* This,
        int* pcx,
        int* pcy);

    HRESULT (STDMETHODCALLTYPE *PutProperty)(
        IWebBrowserApp* This,
        BSTR szProperty,
        VARIANT vtValue);

    HRESULT (STDMETHODCALLTYPE *GetProperty)(
        IWebBrowserApp* This,
        BSTR szProperty,
        VARIANT* pvtValue);

    HRESULT (STDMETHODCALLTYPE *get_Name)(
        IWebBrowserApp* This,
        BSTR* Name);

    HRESULT (STDMETHODCALLTYPE *get_HWND)(
        IWebBrowserApp* This,
        long* pHWND);

    HRESULT (STDMETHODCALLTYPE *get_FullName)(
        IWebBrowserApp* This,
        BSTR* FullName);

    HRESULT (STDMETHODCALLTYPE *get_Path)(
        IWebBrowserApp* This,
        BSTR* Path);

    HRESULT (STDMETHODCALLTYPE *get_Visible)(
        IWebBrowserApp* This,
        VARIANT_BOOL* pBool);

    HRESULT (STDMETHODCALLTYPE *put_Visible)(
        IWebBrowserApp* This,
        VARIANT_BOOL Value);

    HRESULT (STDMETHODCALLTYPE *get_StatusBar)(
        IWebBrowserApp* This,
        VARIANT_BOOL* pBool);

    HRESULT (STDMETHODCALLTYPE *put_StatusBar)(
        IWebBrowserApp* This,
        VARIANT_BOOL Value);

    HRESULT (STDMETHODCALLTYPE *get_StatusText)(
        IWebBrowserApp* This,
        BSTR* StatusText);

    HRESULT (STDMETHODCALLTYPE *put_StatusText)(
        IWebBrowserApp* This,
        BSTR StatusText);

    HRESULT (STDMETHODCALLTYPE *get_ToolBar)(
        IWebBrowserApp* This,
        int* Value);

    HRESULT (STDMETHODCALLTYPE *put_ToolBar)(
        IWebBrowserApp* This,
        int Value);

    HRESULT (STDMETHODCALLTYPE *get_MenuBar)(
        IWebBrowserApp* This,
        VARIANT_BOOL* Value);

    HRESULT (STDMETHODCALLTYPE *put_MenuBar)(
        IWebBrowserApp* This,
        VARIANT_BOOL Value);

    HRESULT (STDMETHODCALLTYPE *get_FullScreen)(
        IWebBrowserApp* This,
        VARIANT_BOOL* pbFullScreen);

    HRESULT (STDMETHODCALLTYPE *put_FullScreen)(
        IWebBrowserApp* This,
        VARIANT_BOOL bFullScreen);

    END_INTERFACE
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IWebBrowserApp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IWebBrowserApp_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IWebBrowserApp_Release(p) (p)->lpVtbl->Release(p)
/*** IDispatch methods ***/
#define IWebBrowserApp_GetTypeInfoCount(p,a) (p)->lpVtbl->GetTypeInfoCount(p,a)
#define IWebBrowserApp_GetTypeInfo(p,a,b,c) (p)->lpVtbl->GetTypeInfo(p,a,b,c)
#define IWebBrowserApp_GetIDsOfNames(p,a,b,c,d,e) (p)->lpVtbl->GetIDsOfNames(p,a,b,c,d,e)
#define IWebBrowserApp_Invoke(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Invoke(p,a,b,c,d,e,f,g,h)
/*** IWebBrowser methods ***/
#define IWebBrowserApp_GoBack(p) (p)->lpVtbl->GoBack(p)
#define IWebBrowserApp_GoForward(p) (p)->lpVtbl->GoForward(p)
#define IWebBrowserApp_GoHome(p) (p)->lpVtbl->GoHome(p)
#define IWebBrowserApp_GoSearch(p) (p)->lpVtbl->GoSearch(p)
#define IWebBrowserApp_Navigate(p,a,b,c,d,e) (p)->lpVtbl->Navigate(p,a,b,c,d,e)
#define IWebBrowserApp_Refresh(p) (p)->lpVtbl->Refresh(p)
#define IWebBrowserApp_Refresh2(p,a) (p)->lpVtbl->Refresh2(p,a)
#define IWebBrowserApp_Stop(p) (p)->lpVtbl->Stop(p)
#define IWebBrowserApp_get_Application(p,a) (p)->lpVtbl->get_Application(p,a)
#define IWebBrowserApp_get_Parent(p,a) (p)->lpVtbl->get_Parent(p,a)
#define IWebBrowserApp_get_Container(p,a) (p)->lpVtbl->get_Container(p,a)
#define IWebBrowserApp_get_Document(p,a) (p)->lpVtbl->get_Document(p,a)
#define IWebBrowserApp_get_TopLevelContainer(p,a) (p)->lpVtbl->get_TopLevelContainer(p,a)
#define IWebBrowserApp_get_Type(p,a) (p)->lpVtbl->get_Type(p,a)
#define IWebBrowserApp_get_Left(p,a) (p)->lpVtbl->get_Left(p,a)
#define IWebBrowserApp_put_Left(p,a) (p)->lpVtbl->put_Left(p,a)
#define IWebBrowserApp_get_Top(p,a) (p)->lpVtbl->get_Top(p,a)
#define IWebBrowserApp_put_Top(p,a) (p)->lpVtbl->put_Top(p,a)
#define IWebBrowserApp_get_Width(p,a) (p)->lpVtbl->get_Width(p,a)
#define IWebBrowserApp_put_Width(p,a) (p)->lpVtbl->put_Width(p,a)
#define IWebBrowserApp_get_Height(p,a) (p)->lpVtbl->get_Height(p,a)
#define IWebBrowserApp_put_Height(p,a) (p)->lpVtbl->put_Height(p,a)
#define IWebBrowserApp_get_LocationName(p,a) (p)->lpVtbl->get_LocationName(p,a)
#define IWebBrowserApp_get_LocationURL(p,a) (p)->lpVtbl->get_LocationURL(p,a)
#define IWebBrowserApp_get_Busy(p,a) (p)->lpVtbl->get_Busy(p,a)
/*** IWebBrowserApp methods ***/
#define IWebBrowserApp_Quit(p) (p)->lpVtbl->Quit(p)
#define IWebBrowserApp_ClientToWindow(p,a,b) (p)->lpVtbl->ClientToWindow(p,a,b)
#define IWebBrowserApp_PutProperty(p,a,b) (p)->lpVtbl->PutProperty(p,a,b)
#define IWebBrowserApp_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
#define IWebBrowserApp_get_Name(p,a) (p)->lpVtbl->get_Name(p,a)
#define IWebBrowserApp_get_HWND(p,a) (p)->lpVtbl->get_HWND(p,a)
#define IWebBrowserApp_get_FullName(p,a) (p)->lpVtbl->get_FullName(p,a)
#define IWebBrowserApp_get_Path(p,a) (p)->lpVtbl->get_Path(p,a)
#define IWebBrowserApp_get_Visible(p,a) (p)->lpVtbl->get_Visible(p,a)
#define IWebBrowserApp_put_Visible(p,a) (p)->lpVtbl->put_Visible(p,a)
#define IWebBrowserApp_get_StatusBar(p,a) (p)->lpVtbl->get_StatusBar(p,a)
#define IWebBrowserApp_put_StatusBar(p,a) (p)->lpVtbl->put_StatusBar(p,a)
#define IWebBrowserApp_get_StatusText(p,a) (p)->lpVtbl->get_StatusText(p,a)
#define IWebBrowserApp_put_StatusText(p,a) (p)->lpVtbl->put_StatusText(p,a)
#define IWebBrowserApp_get_ToolBar(p,a) (p)->lpVtbl->get_ToolBar(p,a)
#define IWebBrowserApp_put_ToolBar(p,a) (p)->lpVtbl->put_ToolBar(p,a)
#define IWebBrowserApp_get_MenuBar(p,a) (p)->lpVtbl->get_MenuBar(p,a)
#define IWebBrowserApp_put_MenuBar(p,a) (p)->lpVtbl->put_MenuBar(p,a)
#define IWebBrowserApp_get_FullScreen(p,a) (p)->lpVtbl->get_FullScreen(p,a)
#define IWebBrowserApp_put_FullScreen(p,a) (p)->lpVtbl->put_FullScreen(p,a)
#endif

#endif

#define IWebBrowserApp_METHODS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IDispatch methods ***/ \
    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT* pctinfo) PURE; \
    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) PURE; \
    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) PURE; \
    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) PURE; \
    /*** IWebBrowser methods ***/ \
    STDMETHOD_(HRESULT,GoBack)(THIS) PURE; \
    STDMETHOD_(HRESULT,GoForward)(THIS) PURE; \
    STDMETHOD_(HRESULT,GoHome)(THIS) PURE; \
    STDMETHOD_(HRESULT,GoSearch)(THIS) PURE; \
    STDMETHOD_(HRESULT,Navigate)(THIS_ BSTR URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers) PURE; \
    STDMETHOD_(HRESULT,Refresh)(THIS) PURE; \
    STDMETHOD_(HRESULT,Refresh2)(THIS_ VARIANT* Level) PURE; \
    STDMETHOD_(HRESULT,Stop)(THIS) PURE; \
    STDMETHOD_(HRESULT,get_Application)(THIS_ IDispatch** ppDisp) PURE; \
    STDMETHOD_(HRESULT,get_Parent)(THIS_ IDispatch** ppDisp) PURE; \
    STDMETHOD_(HRESULT,get_Container)(THIS_ IDispatch** ppDisp) PURE; \
    STDMETHOD_(HRESULT,get_Document)(THIS_ IDispatch** ppDisp) PURE; \
    STDMETHOD_(HRESULT,get_TopLevelContainer)(THIS_ VARIANT_BOOL* pBool) PURE; \
    STDMETHOD_(HRESULT,get_Type)(THIS_ BSTR* Type) PURE; \
    STDMETHOD_(HRESULT,get_Left)(THIS_ long* pl) PURE; \
    STDMETHOD_(HRESULT,put_Left)(THIS_ long Left) PURE; \
    STDMETHOD_(HRESULT,get_Top)(THIS_ long* pl) PURE; \
    STDMETHOD_(HRESULT,put_Top)(THIS_ long Top) PURE; \
    STDMETHOD_(HRESULT,get_Width)(THIS_ long* pl) PURE; \
    STDMETHOD_(HRESULT,put_Width)(THIS_ long Width) PURE; \
    STDMETHOD_(HRESULT,get_Height)(THIS_ long* pl) PURE; \
    STDMETHOD_(HRESULT,put_Height)(THIS_ long Height) PURE; \
    STDMETHOD_(HRESULT,get_LocationName)(THIS_ BSTR* LocationName) PURE; \
    STDMETHOD_(HRESULT,get_LocationURL)(THIS_ BSTR* LocationURL) PURE; \
    STDMETHOD_(HRESULT,get_Busy)(THIS_ VARIANT_BOOL* pBool) PURE; \
    /*** IWebBrowserApp methods ***/ \
    STDMETHOD_(HRESULT,Quit)(THIS) PURE; \
    STDMETHOD_(HRESULT,ClientToWindow)(THIS_ int* pcx, int* pcy) PURE; \
    STDMETHOD_(HRESULT,PutProperty)(THIS_ BSTR szProperty, VARIANT vtValue) PURE; \
    STDMETHOD_(HRESULT,GetProperty)(THIS_ BSTR szProperty, VARIANT* pvtValue) PURE; \
    STDMETHOD_(HRESULT,get_Name)(THIS_ BSTR* Name) PURE; \
    STDMETHOD_(HRESULT,get_HWND)(THIS_ long* pHWND) PURE; \
    STDMETHOD_(HRESULT,get_FullName)(THIS_ BSTR* FullName) PURE; \
    STDMETHOD_(HRESULT,get_Path)(THIS_ BSTR* Path) PURE; \
    STDMETHOD_(HRESULT,get_Visible)(THIS_ VARIANT_BOOL* pBool) PURE; \
    STDMETHOD_(HRESULT,put_Visible)(THIS_ VARIANT_BOOL Value) PURE; \
    STDMETHOD_(HRESULT,get_StatusBar)(THIS_ VARIANT_BOOL* pBool) PURE; \
    STDMETHOD_(HRESULT,put_StatusBar)(THIS_ VARIANT_BOOL Value) PURE; \
    STDMETHOD_(HRESULT,get_StatusText)(THIS_ BSTR* StatusText) PURE; \
    STDMETHOD_(HRESULT,put_StatusText)(THIS_ BSTR StatusText) PURE; \
    STDMETHOD_(HRESULT,get_ToolBar)(THIS_ int* Value) PURE; \
    STDMETHOD_(HRESULT,put_ToolBar)(THIS_ int Value) PURE; \
    STDMETHOD_(HRESULT,get_MenuBar)(THIS_ VARIANT_BOOL* Value) PURE; \
    STDMETHOD_(HRESULT,put_MenuBar)(THIS_ VARIANT_BOOL Value) PURE; \
    STDMETHOD_(HRESULT,get_FullScreen)(THIS_ VARIANT_BOOL* pbFullScreen) PURE; \
    STDMETHOD_(HRESULT,put_FullScreen)(THIS_ VARIANT_BOOL bFullScreen) PURE;

HRESULT CALLBACK IWebBrowserApp_Quit_Proxy(
    IWebBrowserApp* This);
void __RPC_STUB IWebBrowserApp_Quit_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_ClientToWindow_Proxy(
    IWebBrowserApp* This,
    int* pcx,
    int* pcy);
void __RPC_STUB IWebBrowserApp_ClientToWindow_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_PutProperty_Proxy(
    IWebBrowserApp* This,
    BSTR szProperty,
    VARIANT vtValue);
void __RPC_STUB IWebBrowserApp_PutProperty_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_GetProperty_Proxy(
    IWebBrowserApp* This,
    BSTR szProperty,
    VARIANT* pvtValue);
void __RPC_STUB IWebBrowserApp_GetProperty_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_Name_Proxy(
    IWebBrowserApp* This,
    BSTR* Name);
void __RPC_STUB IWebBrowserApp_get_Name_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_HWND_Proxy(
    IWebBrowserApp* This,
    long* pHWND);
void __RPC_STUB IWebBrowserApp_get_HWND_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_FullName_Proxy(
    IWebBrowserApp* This,
    BSTR* FullName);
void __RPC_STUB IWebBrowserApp_get_FullName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_Path_Proxy(
    IWebBrowserApp* This,
    BSTR* Path);
void __RPC_STUB IWebBrowserApp_get_Path_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_Visible_Proxy(
    IWebBrowserApp* This,
    VARIANT_BOOL* pBool);
void __RPC_STUB IWebBrowserApp_get_Visible_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_put_Visible_Proxy(
    IWebBrowserApp* This,
    VARIANT_BOOL Value);
void __RPC_STUB IWebBrowserApp_put_Visible_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_StatusBar_Proxy(
    IWebBrowserApp* This,
    VARIANT_BOOL* pBool);
void __RPC_STUB IWebBrowserApp_get_StatusBar_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_put_StatusBar_Proxy(
    IWebBrowserApp* This,
    VARIANT_BOOL Value);
void __RPC_STUB IWebBrowserApp_put_StatusBar_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_StatusText_Proxy(
    IWebBrowserApp* This,
    BSTR* StatusText);
void __RPC_STUB IWebBrowserApp_get_StatusText_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_put_StatusText_Proxy(
    IWebBrowserApp* This,
    BSTR StatusText);
void __RPC_STUB IWebBrowserApp_put_StatusText_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_ToolBar_Proxy(
    IWebBrowserApp* This,
    int* Value);
void __RPC_STUB IWebBrowserApp_get_ToolBar_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_put_ToolBar_Proxy(
    IWebBrowserApp* This,
    int Value);
void __RPC_STUB IWebBrowserApp_put_ToolBar_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_MenuBar_Proxy(
    IWebBrowserApp* This,
    VARIANT_BOOL* Value);
void __RPC_STUB IWebBrowserApp_get_MenuBar_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_put_MenuBar_Proxy(
    IWebBrowserApp* This,
    VARIANT_BOOL Value);
void __RPC_STUB IWebBrowserApp_put_MenuBar_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_get_FullScreen_Proxy(
    IWebBrowserApp* This,
    VARIANT_BOOL* pbFullScreen);
void __RPC_STUB IWebBrowserApp_get_FullScreen_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IWebBrowserApp_put_FullScreen_Proxy(
    IWebBrowserApp* This,
    VARIANT_BOOL bFullScreen);
void __RPC_STUB IWebBrowserApp_put_FullScreen_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWebBrowserApp_INTERFACE_DEFINED__ */

#ifndef __IShellWindows_FWD_DEFINED__
#define __IShellWindows_FWD_DEFINED__
typedef struct IShellWindows IShellWindows;
#endif

/*****************************************************************************
 * IShellWindows interface
 */
#ifndef __IShellWindows_INTERFACE_DEFINED__
#define __IShellWindows_INTERFACE_DEFINED__

DEFINE_GUID(IID_IShellWindows, 0x85cb6900, 0x4d95, 0x11cf, 0x96,0x0c, 0x00,0x80,0xc7,0xf4,0xee,0x85);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IShellWindows : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        long* Count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        VARIANT index,
        IDispatch** Folder) = 0;

    virtual HRESULT STDMETHODCALLTYPE _NewEnum(
        IUnknown** ppunk) = 0;

    virtual HRESULT STDMETHODCALLTYPE Register(
        IDispatch* pid,
        long hWnd,
        int swClass,
        long* plCookie) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterPending(
        long lThread,
        VARIANT* pvarloc,
        VARIANT* varlocRoot,
        int swClass,
        long* plCookie) = 0;

    virtual HRESULT STDMETHODCALLTYPE Revoke(
        long Cookie) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnNavigate(
        long Cookie,
        VARIANT* pvarLoc) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnActivated(
        long Cookie,
        VARIANT fActive) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindWindowSW(
        VARIANT* pvarLoc,
        VARIANT* pvarLocRoot,
        int swClass,
        long* phwnd,
        int swfwOptions,
        IDispatch** ppdispOut) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnCreated(
        long lCookie,
        IUnknown* punk) = 0;

    virtual HRESULT STDMETHODCALLTYPE ProcessAttachDetach(
        VARIANT_BOOL fAttach) = 0;

};
#else
typedef struct IShellWindowsVtbl IShellWindowsVtbl;
struct IShellWindows {
    const IShellWindowsVtbl* lpVtbl;
};
struct IShellWindowsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IShellWindows* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IShellWindows* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IShellWindows* This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IShellWindows* This,
        UINT* pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IShellWindows* This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo** ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IShellWindows* This,
        REFIID riid,
        LPOLESTR* rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID* rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IShellWindows* This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS* pDispParams,
        VARIANT* pVarResult,
        EXCEPINFO* pExcepInfo,
        UINT* puArgErr);

    /*** IShellWindows methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        IShellWindows* This,
        long* Count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        IShellWindows* This,
        VARIANT index,
        IDispatch** Folder);

    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
        IShellWindows* This,
        IUnknown** ppunk);

    HRESULT (STDMETHODCALLTYPE *Register)(
        IShellWindows* This,
        IDispatch* pid,
        long hWnd,
        int swClass,
        long* plCookie);

    HRESULT (STDMETHODCALLTYPE *RegisterPending)(
        IShellWindows* This,
        long lThread,
        VARIANT* pvarloc,
        VARIANT* varlocRoot,
        int swClass,
        long* plCookie);

    HRESULT (STDMETHODCALLTYPE *Revoke)(
        IShellWindows* This,
        long Cookie);

    HRESULT (STDMETHODCALLTYPE *OnNavigate)(
        IShellWindows* This,
        long Cookie,
        VARIANT* pvarLoc);

    HRESULT (STDMETHODCALLTYPE *OnActivated)(
        IShellWindows* This,
        long Cookie,
        VARIANT fActive);

    HRESULT (STDMETHODCALLTYPE *FindWindowSW)(
        IShellWindows* This,
        VARIANT* pvarLoc,
        VARIANT* pvarLocRoot,
        int swClass,
        long* phwnd,
        int swfwOptions,
        IDispatch** ppdispOut);

    HRESULT (STDMETHODCALLTYPE *OnCreated)(
        IShellWindows* This,
        long lCookie,
        IUnknown* punk);

    HRESULT (STDMETHODCALLTYPE *ProcessAttachDetach)(
        IShellWindows* This,
        VARIANT_BOOL fAttach);

    END_INTERFACE
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IShellWindows_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IShellWindows_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IShellWindows_Release(p) (p)->lpVtbl->Release(p)
/*** IDispatch methods ***/
#define IShellWindows_GetTypeInfoCount(p,a) (p)->lpVtbl->GetTypeInfoCount(p,a)
#define IShellWindows_GetTypeInfo(p,a,b,c) (p)->lpVtbl->GetTypeInfo(p,a,b,c)
#define IShellWindows_GetIDsOfNames(p,a,b,c,d,e) (p)->lpVtbl->GetIDsOfNames(p,a,b,c,d,e)
#define IShellWindows_Invoke(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Invoke(p,a,b,c,d,e,f,g,h)
/*** IShellWindows methods ***/
#define IShellWindows_get_Count(p,a) (p)->lpVtbl->get_Count(p,a)
#define IShellWindows_Item(p,a,b) (p)->lpVtbl->Item(p,a,b)
#define IShellWindows__NewEnum(p,a) (p)->lpVtbl->_NewEnum(p,a)
#define IShellWindows_Register(p,a,b,c,d) (p)->lpVtbl->Register(p,a,b,c,d)
#define IShellWindows_RegisterPending(p,a,b,c,d,e) (p)->lpVtbl->RegisterPending(p,a,b,c,d,e)
#define IShellWindows_Revoke(p,a) (p)->lpVtbl->Revoke(p,a)
#define IShellWindows_OnNavigate(p,a,b) (p)->lpVtbl->OnNavigate(p,a,b)
#define IShellWindows_OnActivated(p,a,b) (p)->lpVtbl->OnActivated(p,a,b)
#define IShellWindows_FindWindowSW(p,a,b,c,d,e,f) (p)->lpVtbl->FindWindowSW(p,a,b,c,d,e,f)
#define IShellWindows_OnCreated(p,a,b) (p)->lpVtbl->OnCreated(p,a,b)
#define IShellWindows_ProcessAttachDetach(p,a) (p)->lpVtbl->ProcessAttachDetach(p,a)
#endif

#endif

#define IShellWindows_METHODS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IDispatch methods ***/ \
    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT* pctinfo) PURE; \
    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) PURE; \
    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) PURE; \
    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) PURE; \
    /*** IShellWindows methods ***/ \
    STDMETHOD_(HRESULT,get_Count)(THIS_ long* Count) PURE; \
    STDMETHOD_(HRESULT,Item)(THIS_ VARIANT index, IDispatch** Folder) PURE; \
    STDMETHOD_(HRESULT,_NewEnum)(THIS_ IUnknown** ppunk) PURE; \
    STDMETHOD_(HRESULT,Register)(THIS_ IDispatch* pid, long hWnd, int swClass, long* plCookie) PURE; \
    STDMETHOD_(HRESULT,RegisterPending)(THIS_ long lThread, VARIANT* pvarloc, VARIANT* varlocRoot, int swClass, long* plCookie) PURE; \
    STDMETHOD_(HRESULT,Revoke)(THIS_ long Cookie) PURE; \
    STDMETHOD_(HRESULT,OnNavigate)(THIS_ long Cookie, VARIANT* pvarLoc) PURE; \
    STDMETHOD_(HRESULT,OnActivated)(THIS_ long Cookie, VARIANT fActive) PURE; \
    STDMETHOD_(HRESULT,FindWindowSW)(THIS_ VARIANT* pvarLoc, VARIANT* pvarLocRoot, int swClass, long* phwnd, int swfwOptions, IDispatch** ppdispOut) PURE; \
    STDMETHOD_(HRESULT,OnCreated)(THIS_ long lCookie, IUnknown* punk) PURE; \
    STDMETHOD_(HRESULT,ProcessAttachDetach)(THIS_ VARIANT_BOOL fAttach) PURE;

HRESULT CALLBACK IShellWindows_get_Count_Proxy(
    IShellWindows* This,
    long* Count);
void __RPC_STUB IShellWindows_get_Count_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows_Item_Proxy(
    IShellWindows* This,
    VARIANT index,
    IDispatch** Folder);
void __RPC_STUB IShellWindows_Item_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows__NewEnum_Proxy(
    IShellWindows* This,
    IUnknown** ppunk);
void __RPC_STUB IShellWindows__NewEnum_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows_Register_Proxy(
    IShellWindows* This,
    IDispatch* pid,
    long hWnd,
    int swClass,
    long* plCookie);
void __RPC_STUB IShellWindows_Register_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows_RegisterPending_Proxy(
    IShellWindows* This,
    long lThread,
    VARIANT* pvarloc,
    VARIANT* varlocRoot,
    int swClass,
    long* plCookie);
void __RPC_STUB IShellWindows_RegisterPending_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows_Revoke_Proxy(
    IShellWindows* This,
    long Cookie);
void __RPC_STUB IShellWindows_Revoke_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows_OnNavigate_Proxy(
    IShellWindows* This,
    long Cookie,
    VARIANT* pvarLoc);
void __RPC_STUB IShellWindows_OnNavigate_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows_OnActivated_Proxy(
    IShellWindows* This,
    long Cookie,
    VARIANT fActive);
void __RPC_STUB IShellWindows_OnActivated_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows_FindWindowSW_Proxy(
    IShellWindows* This,
    VARIANT* pvarLoc,
    VARIANT* pvarLocRoot,
    int swClass,
    long* phwnd,
    int swfwOptions,
    IDispatch** ppdispOut);
void __RPC_STUB IShellWindows_FindWindowSW_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows_OnCreated_Proxy(
    IShellWindows* This,
    long lCookie,
    IUnknown* punk);
void __RPC_STUB IShellWindows_OnCreated_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IShellWindows_ProcessAttachDetach_Proxy(
    IShellWindows* This,
    VARIANT_BOOL fAttach);
void __RPC_STUB IShellWindows_ProcessAttachDetach_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IShellWindows_INTERFACE_DEFINED__ */

DEFINE_GUID(CLSID_WebBrowser, 0x8856f961, 0x340a, 0x11d0, 0xa9, 0x6b, 0x00, 0xc0, 0x4f, 0xd7, 0x05, 0xa2);
#ifdef __cplusplus
}
#endif
#endif /* __WIDL_EXDISP_H */
