/*
 * Copyright 2014 Jacek Caban for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "oaidl.idl";
import "ocidl.idl";

#ifndef __WIDL__
#define threading(model)
#define progid(str)
#define vi_progid(str)
#endif

[
    helpstring("Windows Media Player"),
    version(1.0),
    uuid(6bf52a50-394a-11d3-b153-00c04f79Faa6)
]
library WMPLib {
    importlib("stdole2.tlb");

    typedef enum {
        wmposUndefined,
        wmposPlaylistChanging,
        wmposPlaylistLocating,
        wmposPlaylistConnecting,
        wmposPlaylistLoading,
        wmposPlaylistOpening,
        wmposPlaylistOpenNoMedia,
        wmposPlaylistChanged,
        wmposMediaChanging,
        wmposMediaLocating,
        wmposMediaConnecting,
        wmposMediaLoading,
        wmposMediaOpening,
        wmposMediaOpen,
        wmposBeginCodecAcquisition,
        wmposEndCodecAcquisition,
        wmposBeginLicenseAcquisition,
        wmposEndLicenseAcquisition,
        wmposBeginIndividualization,
        wmposEndIndividualization,
        wmposMediaWaiting,
        wmposOpeningUnknownURL
    } WMPOpenState;

    typedef enum {
        wmppsUndefined,
        wmppsStopped,
        wmppsPaused,
        wmppsPlaying,
        wmppsScanForward,
        wmppsScanReverse,
        wmppsBuffering,
        wmppsWaiting,
        wmppsMediaEnded,
        wmppsTransitioning,
        wmppsReady,
        wmppsReconnecting,
        wmppsLast
    } WMPPlayState;

    interface IWMPMedia;

    [
        odl,
        uuid(d5f0f4f1-130c-11d3-b14e-00c04f79Faa6),
        dual,
        oleautomation
    ]
    interface IWMPPlaylist : IDispatch
    {
        [id(0x00c9), propget]
        HRESULT count([out, retval] long *plCount);

        [id(0x00ca), propget]
        HRESULT name([out, retval] BSTR *pbstrName);
        [id(0x00ca), propput]
        HRESULT name([in] BSTR pbstrName);

        [id(0x00d2), propget]
        HRESULT attributeCount([out, retval] long *plCount);

        [id(0x00d3), propget]
        HRESULT attributeName(
            [in] long lIndex,
            [out, retval] BSTR *pbstrAttributeName);

        [id(0x00d4), propget]
        HRESULT Item(
            [in] long lIndex,
            [out, retval] IWMPMedia** ppIWMPMedia);

        [id(0x00cb)]
        HRESULT getItemInfo(
            [in] BSTR bstrName,
            [out, retval] BSTR *pbstrVal);

        [id(0x00cc)]
        HRESULT setItemInfo(
            [in] BSTR bstrName,
            [in] BSTR bstrValue);

        [id(0x00d5), propget]
        HRESULT isIdentical(
            [in] IWMPPlaylist *pIWMPPlaylist,
            [out, retval] VARIANT_BOOL *pvbool);

        [id(0x00cd)]
        HRESULT clear();

        [id(0x00ce)]
        HRESULT insertItem(
            [in] long lIndex,
            [in] IWMPMedia *pIWMPMedia);

        [id(0x00cf)]
        HRESULT appendItem([in] IWMPMedia *pIWMPMedia);

        [id(0x00d0)]
        HRESULT removeItem([in] IWMPMedia *pIWMPMedia);

        [id(0x00d1)]
        HRESULT moveItem(
            long lIndexOld,
            long lIndexNew);
    }

    [
        odl,
        uuid(94d55e95-3Fac-11d3-b155-00c04f79faa6),
        dual,
        oleautomation
    ]
    interface IWMPMedia : IDispatch
    {
        [id(0x02fb), propget]
        HRESULT isIdentical(
            [in] IWMPMedia *pIWMPMedia,
            [out, retval] VARIANT_BOOL *pvbool);

        [id(0x02ef), propget]
        HRESULT sourceURL([out, retval] BSTR *pbstrSourceURL);

        [id(0x02fc), propget]
        HRESULT name([out, retval] BSTR *pbstrName);
        [id(0x02fc), propput]
        HRESULT name([in] BSTR pbstrName);

        [id(0x02f0), propget]
        HRESULT imageSourceWidth([out, retval] long *pWidth);

        [id(0x02f1), propget]
        HRESULT imageSourceHeight([out, retval] long *pHeight);

        [id(0x02f2), propget]
        HRESULT markerCount([out, retval] long *pMarkerCount);

        [id(0x02f3)]
        HRESULT getMarkerTime(
            [in] long MarkerNum,
            [out, retval] double *pMarkerTime);

        [id(0x02f4)]
        HRESULT getMarkerName(
            [in] long MarkerNum,
            [out, retval] BSTR *pbstrMarkerName);

        [id(0x02f5), propget]
        HRESULT duration([out, retval] double *pDuration);

        [id(0x02f6), propget]
        HRESULT durationString([out, retval] BSTR *pbstrDuration);

        [id(0x02f7), propget]
        HRESULT attributeCount([out, retval] long *plCount);

        [id(0x02f8)]
        HRESULT getAttributeName(
            [in] long lIndex,
            [out, retval] BSTR *pbstrItemName);

        [id(0x02f9)]
        HRESULT getItemInfo(
            [in] BSTR bstrItemName,
            [out, retval] BSTR *pbstrVal);

        [id(0x02fa)]
        HRESULT setItemInfo(
            [in] BSTR bstrItemName,
            [in] BSTR bstrVal);

        [id(0x02fd)]
        HRESULT getItemInfoByAtom(
            [in] long lAtom,
            [out, retval] BSTR *pbstrVal);

        [id(0x02fe)]
        HRESULT isMemberOf(
            [in] IWMPPlaylist *pPlaylist,
            [out, retval] VARIANT_BOOL *pvarfIsMemberOf);

        [id(0x02ff)]
        HRESULT isReadOnlyItem(
            [in] BSTR bstrItemName,
            [out, retval] VARIANT_BOOL *pvarfIsReadOnly);
    }

    [
        odl,
        uuid(74c09E02-f828-11d2-a74b-00a0c905f36e),
        dual,
        oleautomation
    ]
    interface IWMPControls : IDispatch {
        [id(0x003e), propget]
        HRESULT isAvailable(
            [in] BSTR bstrItem,
            [out, retval] VARIANT_BOOL *pIsAvailable);

        [id(0x0033)]
        HRESULT play();

        [id(0x0034)]
        HRESULT stop();

        [id(0x0035)]
        HRESULT pause();

        [id(0x0036)]
        HRESULT fastForward();

        [id(0x0037)]
        HRESULT fastReverse();

        [id(0x0038), propget]
        HRESULT currentPosition([out, retval] double *pdCurrentPosition);
        [id(0x0038), propput]
        HRESULT currentPosition([in] double pdCurrentPosition);

        [id(0x0039), propget]
        HRESULT currentPositionString([out, retval] BSTR *pbstrCurrentPosition);

        [id(0x003a)]
        HRESULT next();

        [id(0x003b)]
        HRESULT previous();

        [id(0x003c)]
        HRESULT currentItem([out, retval] IWMPMedia **ppIWMPMedia);

        [id(0x003c), propput]
        HRESULT currentItem([in] IWMPMedia *ppIWMPMedia);

        [id(0x003d), propget]
        HRESULT currentMarker([out, retval] long *plMarker);

        [id(0x003d), propput]
        HRESULT currentMarker([in] long plMarker);

        [id(0x003f)]
        HRESULT playItem([in] IWMPMedia *pIWMPMedia);
    }

    [
        odl,
        uuid(9104d1ab-80c9-4fed-abf0-2e6417a6df14),
        dual,
        oleautomation
    ]
    interface IWMPSettings : IDispatch
    {
        [id(0x0071), propget]
        HRESULT isAvailable(
            [in] BSTR bstrItem,
            [out, retval] VARIANT_BOOL *pIsAvailable);

        [id(0x0065), propget]
        HRESULT autoStart([out, retval] VARIANT_BOOL *pfAutoStart);
        [id(0x0065), propput]
        HRESULT autoStart([in] VARIANT_BOOL pfAutoStart);

        [id(0x006c), propget]
        HRESULT baseURL([out, retval] BSTR *pbstrBaseURL);
        [id(0x006c), propput]
        HRESULT baseURL([in] BSTR pbstrBaseURL);

        [id(0x006d), propget]
        HRESULT defaultFrame([out, retval] BSTR *pbstrDefaultFrame);
        [id(0x006d), propput]
        HRESULT defaultFrame([in] BSTR pbstrDefaultFrame);

        [id(0x0067), propget]
        HRESULT invokeURLs([out, retval] VARIANT_BOOL *pfInvokeURLs);
        [id(0x0067), propput]
        HRESULT invokeURLs([in] VARIANT_BOOL pfInvokeURLs);

        [id(0x0068), propget]
        HRESULT mute([out, retval] VARIANT_BOOL *pfMute);
        [id(0x0068), propput]
        HRESULT mute([in] VARIANT_BOOL pfMute);

        [id(0x0069), propget]
        HRESULT playCount([out, retval] long *plCount);
        [id(0x0069), propput]
        HRESULT playCount([in] long plCount);

        [id(0x006a), propget]
        HRESULT rate([out, retval] double *pdRate);
        [id(0x006a), propput]
        HRESULT rate([in] double pdRate);

        [id(0x0066), propget]
        HRESULT balance([out, retval] long *plBalance);
        [id(0x0066), propput]
        HRESULT balance([in] long plBalance);

        [id(0x006b), propget]
        HRESULT volume([out, retval] long *plVolume);
        [id(0x006b), propput]
        HRESULT volume([in] long plVolume);

        [id(0x006e)]
        HRESULT getMode(
            [in] BSTR bstrMode,
            [out, retval] VARIANT_BOOL *pvarfMode);

        [id(0x006f)]
        HRESULT setMode(
            [in] BSTR bstrMode,
            [in] VARIANT_BOOL varfMode);

        [id(0x0070), propget]
        HRESULT enableErrorDialogs([out, retval] VARIANT_BOOL *pfEnableErrorDialogs);

        [id(0x0070), propput]
        HRESULT enableErrorDialogs([in] VARIANT_BOOL pfEnableErrorDialogs);
    }

    [
        odl,
        uuid(4a976298-8c0d-11d3-b389-00c04f68574b),
        dual,
        oleautomation
    ]
    interface IWMPStringCollection : IDispatch
    {
        [id(0x0191), propget]
        HRESULT count([out, retval] long *plCount);

        [id(0x0192)]
        HRESULT Item(
            [in] long lIndex,
            [out, retval] BSTR *pbstrString);
    }

    [
        odl,
        uuid(8363bc22-b4b4-4b19-989d-1cd765749dd1),
        dual,
        oleautomation
    ]
    interface IWMPMediaCollection : IDispatch
    {
        [id(0x01c4)]
        HRESULT add(
            [in] BSTR bstrURL,
            [out, retval] IWMPMedia **ppItem);

        [id(0x01c5)]
        HRESULT getAll([out, retval] IWMPPlaylist **ppMediaItems);

        [id(0x01c6)]
        HRESULT getByName(
            [in] BSTR bstrName,
            [out, retval] IWMPPlaylist **ppMediaItems);

        [id(0x01c7)]
        HRESULT getByGenre(
            [in] BSTR bstrGenre,
            [out, retval] IWMPPlaylist **ppMediaItems);

        [id(0x01c8)]
        HRESULT getByAuthor(
            [in] BSTR bstrAuthor,
            [out, retval] IWMPPlaylist **ppMediaItems);

        [id(0x01c9)]
        HRESULT getByAlbum(
            [in] BSTR bstrAlbum,
            [out, retval] IWMPPlaylist **ppMediaItems);

        [id(0x01ca)]
        HRESULT getByAttribute(
            [in] BSTR bstrAttribute,
            [in] BSTR bstrValue,
            [out, retval] IWMPPlaylist **ppMediaItems);

        [id(0x01cb)]
        HRESULT remove(
            [in] IWMPMedia *pItem,
            [in] VARIANT_BOOL varfDeleteFile);

        [id(0x01cd)]
        HRESULT getAttributeStringCollection(
            [in] BSTR bstrAttribute,
            [in] BSTR bstrMediaType,
            [out, retval] IWMPStringCollection **ppStringCollection);

        [id(0x01d6)]
        HRESULT getMediaAtom(
            [in] BSTR bstrItemName,
            [out, retval] long *plAtom);

        [id(0x01d7)]
        HRESULT setDeleted(
            [in] IWMPMedia *pItem,
            [in] VARIANT_BOOL varfIsDeleted);

        [id(0x01d8)]
        HRESULT isDeleted(
            [in] IWMPMedia *pItem,
            [out, retval] VARIANT_BOOL *pvarfIsDeleted);
    }

    [
        odl,
        uuid(679409c0-99f7-11d3-9fb7-00105aa620bb),
        dual,
        oleautomation
    ]
    interface IWMPPlaylistArray : IDispatch
    {
        [id(0x01f5), propget]
        HRESULT count([out, retval] long *plCount);

        [id(0x01f6)]
        HRESULT Item(
            [in] long lIndex,
            [out, retval] IWMPPlaylist **ppItem);
    }

    [
        odl,
        uuid(10a13217-23a7-439b-b1c0-d847c79b7774),
        dual,
        oleautomation
    ]
    interface IWMPPlaylistCollection : IDispatch
    {
        [id(0x0228)]
        HRESULT newPlaylist(
            [in] BSTR bstrName,
            [out, retval] IWMPPlaylist **ppItem);

        [id(0x0229)]
        HRESULT getAll([out, retval] IWMPPlaylistArray **ppPlaylistArray);

        [id(0x022a)]
        HRESULT getByName(
            [in] BSTR bstrName,
            [out, retval] IWMPPlaylistArray **ppPlaylistArray);

        [id(0x022c)]
        HRESULT remove([in] IWMPPlaylist *pItem);

        [id(0x0230)]
        HRESULT setDeleted(
            [in] IWMPPlaylist *pItem,
            [in] VARIANT_BOOL varfIsDeleted);

        [id(0x0231)]
        HRESULT isDeleted(
            [in] IWMPPlaylist *pItem,
            [out, retval] VARIANT_BOOL *pvarfIsDeleted);

        [id(0x0232)]
        HRESULT importPlaylist(
            [in] IWMPPlaylist *pItem,
            [out, retval] IWMPPlaylist **ppImportedItem);
    }

    [
        odl,
        uuid(ec21b779-edef-462d-bba4-ad9dde2b29a7),
        dual,
        oleautomation
    ]
    interface IWMPNetwork : IDispatch
    {
        [id(0x0321), propget]
        HRESULT bandWidth([out, retval] long *plBandwidth);

        [id(0x0322), propget]
        HRESULT recoveredPackets([out, retval] long *plRecoveredPackets);

        [id(0x0323), propget]
        HRESULT sourceProtocol([out, retval] BSTR *pbstrSourceProtocol);

        [id(0x0324), propget]
        HRESULT receivedPackets([out, retval] long *plReceivedPackets);

        [id(0x0325), propget]
        HRESULT lostPackets([out, retval] long *plLostPackets);

        [id(0x0326), propget]
        HRESULT receptionQuality([out, retval] long *plReceptionQuality);

        [id(0x0327), propget]
        HRESULT bufferingCount([out, retval] long *plBufferingCount);

        [id(0x0328), propget]
        HRESULT bufferingProgress([out, retval] long *plBufferingProgress);

        [id(0x0329), propget]
        HRESULT bufferingTime([out, retval] long *plBufferingTime);

        [id(0x0329), propput]
        HRESULT bufferingTime([in] long plBufferingTime);

        [id(0x032a), propget]
        HRESULT frameRate([out, retval] long *plFrameRate);

        [id(0x032b), propget]
        HRESULT maxBitRate([out, retval] long *plBitRate);

        [id(0x032c), propget]
        HRESULT bitRate([out, retval] long *plBitRate);

        [id(0x032d)]
        HRESULT getProxySettings(
            [in] BSTR bstrProtocol,
            [out, retval] long *plProxySetting);

        [id(0x032e)]
        HRESULT setProxySettings(
            [in] BSTR bstrProtocol,
            [in] long lProxySetting);

        [id(0x032f)]
        HRESULT getProxyName(
            [in] BSTR bstrProtocol,
            [out, retval] BSTR *pbstrProxyName);

        [id(0x0330)]
        HRESULT setProxyName(
            [in] BSTR bstrProtocol,
            [in] BSTR bstrProxyName);

        [id(0x0331)]
        HRESULT getProxyPort(
            [in] BSTR bstrProtocol,
            [out, retval] long *lProxyPort);

        [id(0x0332)]
        HRESULT setProxyPort(
            [in] BSTR bstrProtocol,
            [in] long lProxyPort);

        [id(0x0333)]
        HRESULT getProxyExceptionList(
            [in] BSTR bstrProtocol,
            [out, retval] BSTR *pbstrExceptionList);

        [id(0x0334)]
        HRESULT setProxyExceptionList(
            [in] BSTR bstrProtocol,
            [in] BSTR pbstrExceptionList);

        [id(0x0335)]
        HRESULT getProxyBypassForLocal(
            [in] BSTR bstrProtocol,
            [out, retval] VARIANT_BOOL *pfBypassForLocal);

        [id(0x0336)]
        HRESULT setProxyBypassForLocal(
            [in] BSTR bstrProtocol,
            [in] VARIANT_BOOL fBypassForLocal);

        [id(0x0337), propget]
        HRESULT maxBandwidth([out, retval] long *lMaxBandwidth);
        [id(0x0337), propput]
        HRESULT maxBandwidth([in] long lMaxBandwidth);

        [id(0x0338), propget]
        HRESULT downloadProgress([out, retval] long *plDownloadProgress);

        [id(0x0339), propget]
        HRESULT encodedFrameRate([out, retval] long *plFrameRate);

        [id(0x033a), propget]
        HRESULT framesSkipped([out, retval] long *plFrames);
    }

    [
        odl,
        uuid(cfab6e98-8730-11d3-b388-00c04f68574b),
        dual,
        oleautomation
    ]
    interface IWMPCdrom : IDispatch
    {
        [id(0x00fb), propget]
        HRESULT driveSpecifier([out, retval] BSTR *pbstrDrive);

        [id(0x00fc), propget]
        HRESULT Playlist([out, retval] IWMPPlaylist **ppPlaylist);

        [id(0x00fd)]
        HRESULT eject();
    }

    [
        odl,
        uuid(ee4c8fe2-34b2-11d3-a3bf-006097c9b344),
        dual,
        oleautomation
    ]
    interface IWMPCdromCollection : IDispatch
    {
        [id(0x012d), propget]
        HRESULT count([out, retval] long *plCount);

        [id(0x012e)]
        HRESULT Item(
            [in] long lIndex,
            [out, retval] IWMPCdrom **ppItem);

        [id(0x012f)]
        HRESULT getByDriveSpecifier(
            [in] BSTR bstrDriveSpecifier,
            [out, retval] IWMPCdrom **ppCdrom);
    }

    [
        odl,
        uuid(8da61686-4668-4a5c-ae5d-803193293dbe),
        dual,
        oleautomation
    ]
    interface IWMPDVD : IDispatch
    {
        [id(0x03e9), propget]
        HRESULT isAvailable(
            [in] BSTR bstrItem,
            [out, retval] VARIANT_BOOL *pIsAvailable);

        [id(0x03ea), propget]
        HRESULT domain([out, retval] BSTR *strDomain);

        [id(0x03eb)]
        HRESULT topMenu();

        [id(0x03ec)]
        HRESULT titleMenu();

        [id(0x03ed)]
        HRESULT back();

        [id(0x03ee)]
        HRESULT resume();
    }

    [
        odl,
        uuid(4f2df574-c588-11d3-9ed0-00c04fb6e937),
        dual,
        oleautomation
    ]
    interface IWMPClosedCaption : IDispatch
    {
        [id(0x03b7), propget]
        HRESULT SAMIStyle([out, retval] BSTR *pbstrSAMIStyle);
        [id(0x03b7), propput]
        HRESULT SAMIStyle([in] BSTR pbstrSAMIStyle);

        [id(0x03b8), propget]
        HRESULT SAMILang([out, retval] BSTR *pbstrSAMILang);

        [id(0x03b8), propput]
        HRESULT SAMILang([in] BSTR pbstrSAMILang);

        [id(0x03b9), propget]
        HRESULT SAMIFileName([out, retval] BSTR *pbstrSAMIFileName);

        [id(0x03b9), propput]
        HRESULT SAMIFileName([in] BSTR pbstrSAMIFileName);

        [id(0x03ba), propget]
        HRESULT captioningId([out, retval] BSTR *pbstrCaptioningID);

        [id(0x03ba), propput]
        HRESULT captioningId([in] BSTR pbstrCaptioningID);
    }

    [
        odl,
        uuid(3614c646-3b3b-4de7-a81e-930e3f2127b3),
        dual,
        oleautomation
    ]
    interface IWMPErrorItem : IDispatch
    {
        [id(0x0385), propget]
        HRESULT errorCode([out, retval] long *phr);

        [id(0x0386), propget]
        HRESULT errorDescription([out, retval] BSTR *pbstrDescription);

        [id(0x0387), propget]
        HRESULT errorContext([out, retval] VARIANT *pvarContext);

        [id(0x0388), propget]
        HRESULT remedy([out, retval] long *plRemedy);

        [id(0x0389), propget]
        HRESULT customUrl([out, retval] BSTR *pbstrCustomUrl);
    }

    [
        odl,
        uuid(a12dcf7d-14ab-4c1b-a8cd-63909f06025b),
        dual,
        oleautomation
    ]
    interface IWMPError : IDispatch
    {
        [id(0x0353)]
        HRESULT clearErrorQueue();

        [id(0x0354), propget]
        HRESULT errorCount([out, retval] long *plNumErrors);

        [id(0x0355), propget]
        HRESULT Item(
            [in] long dwIndex,
            [out, retval] IWMPErrorItem **ppErrorItem);

        [id(0x0356)]
        HRESULT webHelp();
    }

    [
        odl,
        uuid(40897764-ceab-47be-ad4a-8e28537f9bbf),
        dual,
        oleautomation
    ]
    interface IWMPPlayerApplication : IDispatch
    {
        [id(0x044d)]
        HRESULT switchToPlayerApplication();

        [id(0x044e)]
        HRESULT switchToControl();

        [id(0x044f), propget]
        HRESULT playerDocked([out, retval] VARIANT_BOOL* pbPlayerDocked);

        [id(0x0450), propget]
        HRESULT hasDisplay([out, retval] VARIANT_BOOL *pbHasDisplay);
    }

    [
        odl,
        uuid(d84cca99-cce2-11d2-9ecc-0000f8085981),
        dual,
        oleautomation
    ]
    interface IWMPCore : IDispatch
    {
        [id(0x0003)]
        HRESULT close();

        [id(0x0001), propget]
        HRESULT URL([out, retval] BSTR *pbstrURL);
        [id(0x0001), propput]
        HRESULT URL([in] BSTR pbstrURL);

        [id(0x0002), propget]
        HRESULT openState([out, retval] WMPOpenState *pwmpos);

        [id(0x000a), propget]
        HRESULT playState([out, retval] WMPPlayState *pwmpps);

        [id(0x0004), propget]
        HRESULT controls([out, retval] IWMPControls **ppControl);

        [id(0x0005), propget]
        HRESULT settings([out, retval] IWMPSettings **ppSettings);

        [id(0x0006), propget]
        HRESULT currentMedia([out, retval] IWMPMedia **ppMedia);
        [id(0x0006), propput]
        HRESULT currentMedia([in] IWMPMedia *ppMedia);

        [id(0x0008), propget]
        HRESULT mediaCollection([out, retval] IWMPMediaCollection **ppMediaCollection);

        [id(0x0009), propget]
        HRESULT playlistCollection([out, retval] IWMPPlaylistCollection **ppPlaylistCollection);

        [id(0x000b), propget]
        HRESULT versionInfo([out, retval] BSTR *pbstrVersionInfo);

        [id(0x000c)]
        HRESULT launchURL([in] BSTR bstrURL);

        [id(0x0007), propget]
        HRESULT network([out, retval] IWMPNetwork **ppQNI);

        [id(0x000d), propget]
        HRESULT currentPlaylist([out, retval] IWMPPlaylist **ppPL);
        [id(0x000d), propput]
        HRESULT currentPlaylist([in] IWMPPlaylist *ppPL);

        [id(0x000e), propget]
        HRESULT cdromCollection([out, retval] IWMPCdromCollection **ppCdromCollection);

        [id(0x000f), propget]
        HRESULT closedCaption([out, retval] IWMPClosedCaption **ppClosedCaption);

        [id(0x0010), propget]
        HRESULT isOnline([out, retval] VARIANT_BOOL *pfOnline);

        [id(0x0011), propget]
        HRESULT Error([out, retval] IWMPError **ppError);

        [id(0x0012), propget]
        HRESULT status([out, retval] BSTR *pbstrStatus);
    }

    [
        odl,
        uuid(bc17e5B7-7561-4c18-bb90-17d485775659),
        dual,
        oleautomation
    ]
    interface IWMPCore2 : IWMPCore {
        [id(0x0028), propget]
        HRESULT dvd([out, retval] IWMPDVD **ppDVD);
    }

    [
        odl,
        uuid(7587c667-628f-499f-88e7-6A6f4e888464),
        dual,
        oleautomation
    ]
    interface IWMPCore3 : IWMPCore2
    {
        [id(0x0029)]
        HRESULT newPlaylist(
            [in] BSTR bstrName,
            [in] BSTR bstrURL,
            [out, retval] IWMPPlaylist **ppPlaylist);

        [id(0x002a)]
        HRESULT newMedia(
            [in] BSTR bstrURL,
            [out, retval] IWMPMedia **ppMedia);
    }

    [
        odl,
        uuid(6c497d62-8919-413c-82db-e935fb3ec584),
        dual,
        oleautomation
    ]
    interface IWMPPlayer4 : IWMPCore3
    {
        [id(0x0013), propget]
        HRESULT enabled([out, retval] VARIANT_BOOL *pbEnabled);
        [id(0x0013), propput]
        HRESULT enabled([in] VARIANT_BOOL pbEnabled);

        [id(0x0015), propget]
        HRESULT fullScreen([out, retval] VARIANT_BOOL *pbFullScreen);
        [id(0x0015), propput]
        HRESULT fullScreen(VARIANT_BOOL pbFullScreen);

        [id(0x0016), propget]
        HRESULT enableContextMenu([out, retval] VARIANT_BOOL *pbEnableContextMenu);
        [id(0x0016), propput]
        HRESULT enableContextMenu(VARIANT_BOOL pbEnableContextMenu);

        [id(0x0017), propput]
        HRESULT uiMode([in] BSTR pbstrMode);
        [id(0x0017), propget]
        HRESULT uiMode([out, retval] BSTR *pbstrMode);

        [id(0x0018), propget]
        HRESULT stretchToFit([out, retval] VARIANT_BOOL *pbEnabled);
        [id(0x0018), propput]
        HRESULT stretchToFit([in] VARIANT_BOOL pbEnabled);

        [id(0x0019), propget]
        HRESULT windowlessVideo([out, retval] VARIANT_BOOL *pbEnabled);
        [id(0x0019), propput]
        HRESULT windowlessVideo([in] VARIANT_BOOL pbEnabled);

        [id(0x001a), propget]
        HRESULT isRemote([out, retval] VARIANT_BOOL *pvarfIsRemote);

        [id(0x001b), propget]
        HRESULT playerApplication([out, retval] IWMPPlayerApplication **ppIWMPPlayerApplication);

        [id(0x001c)]
        HRESULT openPlayer([in] BSTR bstrURL);
    }

    [
        hidden,
        uuid(6bf52a51-394a-11d3-b153-00c04f79faa6)
    ]
    interface _WMPOCXEvents : IDispatch
    {}

    [
        helpstring("Windows Media Player"),
        threading(apartment),
        progid("WMPlayer.OCX.7"),
        vi_progid("WMPlayer.OCX"),
        uuid(6bf52a52-394a-11d3-b153-00c04f79faa6)
     ]
     coclass WindowsMediaPlayer
     {
        [default] interface IWMPPlayer4;
        /* interface IWMPPlayer3; */
        /* interface IWMPPlayer2; */
        /* interface IWMPPlayer; */
        interface IWMPControls;
        interface IWMPSettings;
        interface IWMPPlaylist;
        interface IWMPMedia;
        interface IWMPMediaCollection;
        interface IWMPPlaylistCollection;
        interface IWMPCdromCollection;
        interface IWMPError;
        interface IWMPErrorItem;
        /* interface IWMPErrorItem2; */
        interface IWMPClosedCaption;
        interface IWMPDVD;
        /* interface IWMPControls2; */
        /* interface IWMPMedia2; */
        /* interface IWMPMedia3; */
        /* interface IWMPMetadataPicture; */
        /* interface IWMPMetadataText; */
        /* interface IWMPSettings2; */
        /* interface IWMPControls3; */
        /* interface IWMPClosedCaption2; */
        /* interface IWMPMediaCollection2; */
        /* interface IWMPStringCollection2; */
        [default, source] dispinterface _WMPOCXEvents;
     }
}
