Signed-off-by: Anton Romanov <theli.ua(a)gmail.com>
---
dlls/wmp/oleobj.c | 3 +
dlls/wmp/player.c | 271 ++++++++++++++++++++++++++++++++++++++++++++++++
dlls/wmp/tests/oleobj.c | 17 +++
dlls/wmp/wmp_private.h | 1 +
include/wmp.idl | 27 ++++-
5 files changed, 318 insertions(+), 1 deletion(-)
diff --git a/dlls/wmp/oleobj.c b/dlls/wmp/oleobj.c
index acf38f3223..fbad032648 100644
--- a/dlls/wmp/oleobj.c
+++ b/dlls/wmp/oleobj.c
@@ -263,6 +263,9 @@ static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, v
}else if(IsEqualGUID(riid, &IID_IWMPPlayer4)) {
TRACE("(%p)->(IID_IWMPPlayer4 %p)\n", This, ppv);
*ppv = &This->IWMPPlayer4_iface;
+ }else if(IsEqualGUID(riid, &IID_IWMPPlayer)) {
+ TRACE("(%p)->(IID_IWMPPlayer %p)\n", This, ppv);
+ *ppv = &This->IWMPPlayer_iface;
}else if(IsEqualGUID(riid, &IID_IWMPSettings)) {
TRACE("(%p)->(IID_IWMPSettings %p)\n", This, ppv);
*ppv = &This->IWMPSettings_iface;
diff --git a/dlls/wmp/player.c b/dlls/wmp/player.c
index 4c11c88d74..accf5401ed 100644
--- a/dlls/wmp/player.c
+++ b/dlls/wmp/player.c
@@ -27,6 +27,11 @@ static inline WindowsMediaPlayer *impl_from_IWMPPlayer4(IWMPPlayer4 *iface)
return CONTAINING_RECORD(iface, WindowsMediaPlayer, IWMPPlayer4_iface);
}
+static inline WindowsMediaPlayer *impl_from_IWMPPlayer(IWMPPlayer *iface)
+{
+ return CONTAINING_RECORD(iface, WindowsMediaPlayer, IWMPPlayer_iface);
+}
+
static HRESULT WINAPI WMPPlayer4_QueryInterface(IWMPPlayer4 *iface, REFIID riid, void **ppv)
{
WindowsMediaPlayer *This = impl_from_IWMPPlayer4(iface);
@@ -362,6 +367,271 @@ static HRESULT WINAPI WMPPlayer4_openPlayer(IWMPPlayer4 *iface, BSTR url)
return E_NOTIMPL;
}
+static HRESULT WINAPI WMPPlayer_QueryInterface(IWMPPlayer *iface, REFIID riid, void **ppv)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_QueryInterface(&This->IWMPPlayer4_iface, riid, ppv);
+}
+
+static ULONG WINAPI WMPPlayer_AddRef(IWMPPlayer *iface)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_AddRef(&This->IWMPPlayer4_iface);
+}
+
+static ULONG WINAPI WMPPlayer_Release(IWMPPlayer *iface)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_Release(&This->IWMPPlayer4_iface);
+}
+
+static HRESULT WINAPI WMPPlayer_GetTypeInfoCount(IWMPPlayer *iface, UINT *pctinfo)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_GetTypeInfoCount(&This->IWMPPlayer4_iface, pctinfo);
+}
+
+static HRESULT WINAPI WMPPlayer_GetTypeInfo(IWMPPlayer *iface, UINT iTInfo,
+ LCID lcid, ITypeInfo **ppTInfo)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+
+ return WMPPlayer4_GetTypeInfo(&This->IWMPPlayer4_iface, iTInfo,
+ lcid, ppTInfo);
+}
+
+static HRESULT WINAPI WMPPlayer_GetIDsOfNames(IWMPPlayer *iface, REFIID riid,
+ LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_GetIDsOfNames(&This->IWMPPlayer4_iface, riid,
+ rgszNames, cNames, lcid, rgDispId);
+}
+
+static HRESULT WINAPI WMPPlayer_Invoke(IWMPPlayer *iface, DISPID dispIdMember,
+ REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_Invoke(&This->IWMPPlayer4_iface, dispIdMember,
+ riid, lcid, wFlags, pDispParams, pVarResult,
+ pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI WMPPlayer_close(IWMPPlayer *iface)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_close(&This->IWMPPlayer4_iface);
+}
+
+static HRESULT WINAPI WMPPlayer_get_URL(IWMPPlayer *iface, BSTR *pbstrURL)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_URL(&This->IWMPPlayer4_iface, pbstrURL);
+}
+
+static HRESULT WINAPI WMPPlayer_put_URL(IWMPPlayer *iface, BSTR url)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_put_URL(&This->IWMPPlayer4_iface, url);
+}
+
+static HRESULT WINAPI WMPPlayer_get_openState(IWMPPlayer *iface, WMPOpenState *pwmpos)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_openState(&This->IWMPPlayer4_iface, pwmpos);
+}
+
+static HRESULT WINAPI WMPPlayer_get_playState(IWMPPlayer *iface, WMPPlayState *pwmpps)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_playState(&This->IWMPPlayer4_iface, pwmpps);
+}
+
+static HRESULT WINAPI WMPPlayer_get_controls(IWMPPlayer *iface, IWMPControls **ppControl)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_controls(&This->IWMPPlayer4_iface, ppControl);
+}
+
+static HRESULT WINAPI WMPPlayer_get_settings(IWMPPlayer *iface, IWMPSettings **ppSettings)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_settings(&This->IWMPPlayer4_iface, ppSettings);
+}
+
+static HRESULT WINAPI WMPPlayer_get_currentMedia(IWMPPlayer *iface, IWMPMedia **ppMedia)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_currentMedia(&This->IWMPPlayer4_iface, ppMedia);
+}
+
+static HRESULT WINAPI WMPPlayer_put_currentMedia(IWMPPlayer *iface, IWMPMedia *pMedia)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_put_currentMedia(&This->IWMPPlayer4_iface, pMedia);
+}
+
+static HRESULT WINAPI WMPPlayer_get_mediaCollection(IWMPPlayer *iface, IWMPMediaCollection **ppMediaCollection)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_mediaCollection(&This->IWMPPlayer4_iface, ppMediaCollection);
+}
+
+static HRESULT WINAPI WMPPlayer_get_playlistCollection(IWMPPlayer *iface, IWMPPlaylistCollection **ppPlaylistCollection)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_playlistCollection(&This->IWMPPlayer4_iface, ppPlaylistCollection);
+}
+
+static HRESULT WINAPI WMPPlayer_get_versionInfo(IWMPPlayer *iface, BSTR *version)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_versionInfo(&This->IWMPPlayer4_iface, version);
+}
+
+static HRESULT WINAPI WMPPlayer_launchURL(IWMPPlayer *iface, BSTR url)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_launchURL(&This->IWMPPlayer4_iface, url);
+}
+
+static HRESULT WINAPI WMPPlayer_get_network(IWMPPlayer *iface, IWMPNetwork **ppQNI)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_network(&This->IWMPPlayer4_iface, ppQNI);
+}
+
+static HRESULT WINAPI WMPPlayer_get_currentPlaylist(IWMPPlayer *iface, IWMPPlaylist **ppPL)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_currentPlaylist(&This->IWMPPlayer4_iface, ppPL);
+}
+
+static HRESULT WINAPI WMPPlayer_put_currentPlaylist(IWMPPlayer *iface, IWMPPlaylist *pPL)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_put_currentPlaylist(&This->IWMPPlayer4_iface, pPL);
+}
+
+static HRESULT WINAPI WMPPlayer_get_cdromCollection(IWMPPlayer *iface, IWMPCdromCollection **ppCdromCollection)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_cdromCollection(&This->IWMPPlayer4_iface, ppCdromCollection);
+}
+
+static HRESULT WINAPI WMPPlayer_get_closedCaption(IWMPPlayer *iface, IWMPClosedCaption **ppClosedCaption)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_closedCaption(&This->IWMPPlayer4_iface, ppClosedCaption);
+}
+
+static HRESULT WINAPI WMPPlayer_get_isOnline(IWMPPlayer *iface, VARIANT_BOOL *pfOnline)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_isOnline(&This->IWMPPlayer4_iface, pfOnline);
+}
+
+static HRESULT WINAPI WMPPlayer_get_Error(IWMPPlayer *iface, IWMPError **ppError)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_Error(&This->IWMPPlayer4_iface, ppError);
+}
+
+static HRESULT WINAPI WMPPlayer_get_Status(IWMPPlayer *iface, BSTR *pbstrStatus)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_Status(&This->IWMPPlayer4_iface, pbstrStatus);
+}
+
+static HRESULT WINAPI WMPPlayer_get_enabled(IWMPPlayer *iface, VARIANT_BOOL *pbEnabled)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_enabled(&This->IWMPPlayer4_iface, pbEnabled);
+}
+
+static HRESULT WINAPI WMPPlayer_put_enabled(IWMPPlayer *iface, VARIANT_BOOL enabled)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_put_enabled(&This->IWMPPlayer4_iface, enabled);
+}
+
+static HRESULT WINAPI WMPPlayer_get_fullScreen(IWMPPlayer *iface, VARIANT_BOOL *pbFullScreen)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_fullScreen(&This->IWMPPlayer4_iface, pbFullScreen);
+}
+
+static HRESULT WINAPI WMPPlayer_put_fullScreen(IWMPPlayer *iface, VARIANT_BOOL fullscreen)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_put_fullScreen(&This->IWMPPlayer4_iface, fullscreen);
+}
+
+static HRESULT WINAPI WMPPlayer_get_enableContextMenu(IWMPPlayer *iface, VARIANT_BOOL *pbEnableContextMenu)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_enableContextMenu(&This->IWMPPlayer4_iface, pbEnableContextMenu);
+}
+
+static HRESULT WINAPI WMPPlayer_put_enableContextMenu(IWMPPlayer *iface, VARIANT_BOOL enable)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_put_enableContextMenu(&This->IWMPPlayer4_iface, enable);
+}
+
+static HRESULT WINAPI WMPPlayer_put_uiMode(IWMPPlayer *iface, BSTR mode)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_put_uiMode(&This->IWMPPlayer4_iface, mode);
+}
+
+static HRESULT WINAPI WMPPlayer_get_uiMode(IWMPPlayer *iface, BSTR *pbstrMode)
+{
+ WindowsMediaPlayer *This = impl_from_IWMPPlayer(iface);
+ return WMPPlayer4_get_uiMode(&This->IWMPPlayer4_iface, pbstrMode);
+}
+
+static IWMPPlayerVtbl WMPPlayerVtbl = {
+ WMPPlayer_QueryInterface,
+ WMPPlayer_AddRef,
+ WMPPlayer_Release,
+ WMPPlayer_GetTypeInfoCount,
+ WMPPlayer_GetTypeInfo,
+ WMPPlayer_GetIDsOfNames,
+ WMPPlayer_Invoke,
+ WMPPlayer_close,
+ WMPPlayer_get_URL,
+ WMPPlayer_put_URL,
+ WMPPlayer_get_openState,
+ WMPPlayer_get_playState,
+ WMPPlayer_get_controls,
+ WMPPlayer_get_settings,
+ WMPPlayer_get_currentMedia,
+ WMPPlayer_put_currentMedia,
+ WMPPlayer_get_mediaCollection,
+ WMPPlayer_get_playlistCollection,
+ WMPPlayer_get_versionInfo,
+ WMPPlayer_launchURL,
+ WMPPlayer_get_network,
+ WMPPlayer_get_currentPlaylist,
+ WMPPlayer_put_currentPlaylist,
+ WMPPlayer_get_cdromCollection,
+ WMPPlayer_get_closedCaption,
+ WMPPlayer_get_isOnline,
+ WMPPlayer_get_Error,
+ WMPPlayer_get_Status,
+ WMPPlayer_get_enabled,
+ WMPPlayer_put_enabled,
+ WMPPlayer_get_fullScreen,
+ WMPPlayer_put_fullScreen,
+ WMPPlayer_get_enableContextMenu,
+ WMPPlayer_put_enableContextMenu,
+ WMPPlayer_put_uiMode,
+ WMPPlayer_get_uiMode,
+};
+
+
static IWMPPlayer4Vtbl WMPPlayer4Vtbl = {
WMPPlayer4_QueryInterface,
WMPPlayer4_AddRef,
@@ -664,5 +934,6 @@ static const IWMPSettingsVtbl WMPSettingsVtbl = {
void init_player_ifaces(WindowsMediaPlayer *wmp)
{
wmp->IWMPPlayer4_iface.lpVtbl = &WMPPlayer4Vtbl;
+ wmp->IWMPPlayer_iface.lpVtbl = &WMPPlayerVtbl;
wmp->IWMPSettings_iface.lpVtbl = &WMPSettingsVtbl;
}
diff --git a/dlls/wmp/tests/oleobj.c b/dlls/wmp/tests/oleobj.c
index 2b646d7b1d..05861e1c10 100644
--- a/dlls/wmp/tests/oleobj.c
+++ b/dlls/wmp/tests/oleobj.c
@@ -792,6 +792,7 @@ static void test_wmp_ifaces(IOleObject *oleobj)
{
IWMPSettings *settings, *settings_qi;
IWMPPlayer4 *player4;
+ IWMPPlayer *player;
HRESULT hres;
hres = IOleObject_QueryInterface(oleobj, &IID_IWMPPlayer4, (void**)&player4);
@@ -809,6 +810,22 @@ static void test_wmp_ifaces(IOleObject *oleobj)
IWMPSettings_Release(settings);
IWMPPlayer4_Release(player4);
+
+ hres = IOleObject_QueryInterface(oleobj, &IID_IWMPPlayer, (void**)&player);
+ ok(hres == S_OK, "Could not get IWMPPlayer iface: %08x\n", hres);
+
+ settings = NULL;
+ hres = IWMPPlayer_get_settings(player, &settings);
+ ok(hres == S_OK, "get_settings failed: %08x\n", hres);
+ ok(settings != NULL, "settings = NULL\n");
+
+ hres = IOleObject_QueryInterface(oleobj, &IID_IWMPSettings, (void**)&settings_qi);
+ ok(hres == S_OK, "Could not get IWMPSettings iface: %08x\n", hres);
+ ok(settings == settings_qi, "settings != settings_qi\n");
+ IWMPSettings_Release(settings_qi);
+
+ IWMPSettings_Release(settings);
+ IWMPPlayer_Release(player);
}
#define test_rect_size(a,b,c) _test_rect_size(__LINE__,a,b,c)
diff --git a/dlls/wmp/wmp_private.h b/dlls/wmp/wmp_private.h
index 7b7f51cd63..aaff9777d4 100644
--- a/dlls/wmp/wmp_private.h
+++ b/dlls/wmp/wmp_private.h
@@ -30,6 +30,7 @@ struct WindowsMediaPlayer {
IConnectionPointContainer IConnectionPointContainer_iface;
IOleControl IOleControl_iface;
IWMPPlayer4 IWMPPlayer4_iface;
+ IWMPPlayer IWMPPlayer_iface;
IWMPSettings IWMPSettings_iface;
LONG ref;
diff --git a/include/wmp.idl b/include/wmp.idl
index a879ab7c83..442b702138 100644
--- a/include/wmp.idl
+++ b/include/wmp.idl
@@ -1007,6 +1007,31 @@ library WMPLib {
HRESULT openPlayer([in] BSTR bstrURL);
}
+ [
+ odl,
+ uuid(6BF52A4F-394A-11D3-B153-00C04F79FAA6),
+ dual,
+ oleautomation
+ ]
+ interface IWMPPlayer : IWMPCore {
+ [id(0x00000013), propget]
+ HRESULT enabled([out, retval] VARIANT_BOOL* pbEnabled);
+ [id(0x00000013), propput]
+ HRESULT enabled([in] VARIANT_BOOL pbEnabled);
+ [id(0x00000015), propget]
+ HRESULT fullScreen([out, retval] VARIANT_BOOL* pbFullScreen);
+ [id(0x00000015), propput]
+ HRESULT fullScreen(VARIANT_BOOL pbFullScreen);
+ [id(0x00000016), propget]
+ HRESULT enableContextMenu([out, retval] VARIANT_BOOL* pbEnableContextMenu);
+ [id(0x00000016), propput]
+ HRESULT enableContextMenu(VARIANT_BOOL pbEnableContextMenu);
+ [id(0x00000017), propput]
+ HRESULT uiMode([in] BSTR pbstrMode);
+ [id(0x00000017), propget]
+ HRESULT uiMode([out, retval] BSTR* pbstrMode);
+ };
+
[
odl,
uuid(82a2986c-0293-4fd0-b279-b21b86c058be),
@@ -1406,7 +1431,7 @@ library WMPLib {
[default] interface IWMPPlayer4;
/* interface IWMPPlayer3; */
/* interface IWMPPlayer2; */
- /* interface IWMPPlayer; */
+ interface IWMPPlayer;
interface IWMPControls;
interface IWMPSettings;
interface IWMPPlaylist;
--
2.16.1