/*
 * 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;
     }
}