Procházet zdrojové kódy

#IQBX #comment wmpplayer 编译通过

80374374 před 1 rokem
rodič
revize
3991b7ca3e
70 změnil soubory, kde provedl 5076 přidání a 1 odebrání
  1. 3 0
      Other/win/CMakeLists.txt
  2. 1 1
      Other/win/libimgplayer/CMakeLists.txt
  3. 90 0
      Other/win/libwmpplayer/CMakeLists.txt
  4. 573 0
      Other/win/libwmpplayer/CPlayerDlg.cpp
  5. 90 0
      Other/win/libwmpplayer/CPlayerDlg.h
  6. 64 0
      Other/win/libwmpplayer/ClibwmpplayerApp.cpp
  7. 19 0
      Other/win/libwmpplayer/ClibwmpplayerApp.h
  8. 44 0
      Other/win/libwmpplayer/ReadMe.txt
  9. 531 0
      Other/win/libwmpplayer/libwmpplayer.cpp
  10. 11 0
      Other/win/libwmpplayer/libwmpplayer.def
  11. 87 0
      Other/win/libwmpplayer/libwmpplayer.h
  12. 168 0
      Other/win/libwmpplayer/libwmpplayer.rc
  13. binární
      Other/win/libwmpplayer/res/8.ico
  14. 13 0
      Other/win/libwmpplayer/res/LibWMPPlayer.rc2
  15. 19 0
      Other/win/libwmpplayer/resource.h
  16. 7 0
      Other/win/libwmpplayer/stdafx.cpp
  17. 39 0
      Other/win/libwmpplayer/stdafx.h
  18. 26 0
      Other/win/libwmpplayer/targetver.h
  19. 43 0
      ThirdParty/Include/wmpplayer/include/CWMPCdromCollection.h
  20. 67 0
      ThirdParty/Include/wmpplayer/include/CWMPClosedCaption.h
  21. 100 0
      ThirdParty/Include/wmpplayer/include/CWMPClosedCaption2.h
  22. 102 0
      ThirdParty/Include/wmpplayer/include/CWMPControls.h
  23. 107 0
      ThirdParty/Include/wmpplayer/include/CWMPControls2.h
  24. 167 0
      ThirdParty/Include/wmpplayer/include/CWMPControls3.h
  25. 52 0
      ThirdParty/Include/wmpplayer/include/CWMPDVD.h
  26. 44 0
      ThirdParty/Include/wmpplayer/include/CWMPError.h
  27. 53 0
      ThirdParty/Include/wmpplayer/include/CWMPErrorItem.h
  28. 59 0
      ThirdParty/Include/wmpplayer/include/CWMPErrorItem2.h
  29. 137 0
      ThirdParty/Include/wmpplayer/include/CWMPMedia.h
  30. 143 0
      ThirdParty/Include/wmpplayer/include/CWMPMedia2.h
  31. 157 0
      ThirdParty/Include/wmpplayer/include/CWMPMedia3.h
  32. 102 0
      ThirdParty/Include/wmpplayer/include/CWMPMediaCollection.h
  33. 129 0
      ThirdParty/Include/wmpplayer/include/CWMPMediaCollection2.h
  34. 47 0
      ThirdParty/Include/wmpplayer/include/CWMPMetadataPicture.h
  35. 35 0
      ThirdParty/Include/wmpplayer/include/CWMPMetadataText.h
  36. 187 0
      ThirdParty/Include/wmpplayer/include/CWMPPlayer.h
  37. 209 0
      ThirdParty/Include/wmpplayer/include/CWMPPlayer2.h
  38. 215 0
      ThirdParty/Include/wmpplayer/include/CWMPPlayer3.h
  39. 265 0
      ThirdParty/Include/wmpplayer/include/CWMPPlayer4.h
  40. 103 0
      ThirdParty/Include/wmpplayer/include/CWMPPlaylist.h
  41. 67 0
      ThirdParty/Include/wmpplayer/include/CWMPPlaylistCollection.h
  42. 152 0
      ThirdParty/Include/wmpplayer/include/CWMPSettings.h
  43. 171 0
      ThirdParty/Include/wmpplayer/include/CWMPSettings2.h
  44. 64 0
      ThirdParty/Include/wmpplayer/include/CWMPStringCollection2.h
  45. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPCdromCollection.cpp
  46. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPClosedCaption.cpp
  47. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPClosedCaption2.cpp
  48. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPControls.cpp
  49. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPControls2.cpp
  50. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPControls3.cpp
  51. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPDVD.cpp
  52. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPError.cpp
  53. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPErrorItem.cpp
  54. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPErrorItem2.cpp
  55. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPMedia.cpp
  56. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPMedia2.cpp
  57. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPMedia3.cpp
  58. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPMediaCollection.cpp
  59. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPMediaCollection2.cpp
  60. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPMetadataPicture.cpp
  61. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPMetadataText.cpp
  62. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPPlayer.cpp
  63. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPPlayer2.cpp
  64. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPPlayer3.cpp
  65. 14 0
      ThirdParty/Include/wmpplayer/src/CWMPPlayer4.cpp
  66. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPPlaylist.cpp
  67. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPPlaylistCollection.cpp
  68. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPSettings.cpp
  69. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPSettings2.cpp
  70. 12 0
      ThirdParty/Include/wmpplayer/src/CWMPStringCollection2.cpp

+ 3 - 0
Other/win/CMakeLists.txt

@@ -10,5 +10,8 @@ add_subdirectory(libvideoframework)
 add_subdirectory(libfilecryption)
 add_subdirectory(libbizchan)
 
+add_subdirectory(libimgplayer)
+add_subdirectory(libwmpplayer)
+
 # 汇总要依赖拷贝的第三方库
 set(RVC_CONAN_DEP_LIBS ${RVC_CONAN_DEP_LIBS} ${OTHER_CONAN_DEP_LIBS} PARENT_SCOPE)

+ 1 - 1
Other/win/libimgplayer/CMakeLists.txt

@@ -1,4 +1,4 @@
-set(MODULE_NAME "libimgplayer")
+set(MODULE_NAME "imgplayer")
 set(MODULE_PREFIX "LIB_IMAGPLAYER_FUNC")
 
 add_definitions(-D_AFXDLL)

+ 90 - 0
Other/win/libwmpplayer/CMakeLists.txt

@@ -0,0 +1,90 @@
+set(MODULE_NAME "wmpplayer")
+set(MODULE_PREFIX "LIB_WMPPLYAER_FUNC")
+
+find_package(MFC)
+if(NOT MFC_FOUND)
+    message(FATAL_ERROR "MFC not found")
+endif(NOT MFC_FOUND)
+
+add_definitions(-D_AFXDLL)
+#Enables the use of the Microsoft Foundation Classes (MFC). 
+#It should be set to 1 for the static MFC library, and 2 for the shared MFC library
+set(CMAKE_MFC_FLAG 2)
+#add_definitions(-DUNICODE -D_UNICODE)
+
+message(STATUS "MFC_DIR = ${MFC_FOUND}")
+message(STATUS "MFC_DIR = ${MFC_DIR}")
+message(STATUS "MFC_DIR = ${MFC_INCLUDE}")
+
+message(STATUS "MFC_DIR = ${MFC_INCLUDE_DIR}")
+message(STATUS "MFC_DIR = ${MFC_INCLUDE_LIBRARY}")
+message(STATUS "MFC_DIR = ${MFC_INCLUDE_LIBRARIES}")
+
+
+if(MSVC)
+    set(STDAFXCPP ${RVC_COMMON_INCLUDE_DIR}/stdafx.cpp)
+else()
+	 set(STDAFXCPP )
+endif(MSVC)
+
+set(${MODULE_PREFIX}_SRCS
+    stdafx.h
+    ClibwmpplayerApp.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPCdromCollection.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPClosedCaption.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPClosedCaption2.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPControls.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPControls2.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPControls3.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPDVD.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPError.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPErrorItem.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPErrorItem2.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPMedia.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPMedia2.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPMedia3.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPMediaCollection.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPMediaCollection2.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPMetadataPicture.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPMetadataText.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPPlayer.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPPlayer2.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPPlayer3.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPPlayer4.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPPlaylist.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPPlaylistCollection.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPSettings.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPSettings2.cpp
+    ${ThirdPartyHeadRoot}/wmpplayer/src/CWMPStringCollection2.cpp
+    libwmpplayer.cpp
+    CPlayerDlg.cpp
+
+	${STDAFXCPP}
+)
+
+add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS})
+
+message(STATUS "VCInstallDir ${VCInstallDir}")
+
+
+
+target_include_directories(${MODULE_NAME} PRIVATE
+    ${ThirdPartyHeadRoot}/wmpplayer/include
+    ${CMAKE_CURRENT_SOURCE_DIR}
+	)
+
+target_compile_definitions(${MODULE_NAME} PUBLIC "LIBWMPPLYAER_EXPORTS")
+
+if(MSVC)
+	install(TARGETS ${MODULE_NAME} 
+    RUNTIME DESTINATION "${RVC_RUNTIME_PATH}" COMPONENT libraries
+    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
+    LIBRARY DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT libraries
+    )
+else()
+install(TARGETS ${MODULE_NAME} 
+    RUNTIME DESTINATION "${RVC_RUNTIME_PATH}"
+    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
+    LIBRARY DESTINATION "${RVC_RUNTIME_PATH}"
+    COMPONENT libraries)
+endif(MSVC)

+ 573 - 0
Other/win/libwmpplayer/CPlayerDlg.cpp

@@ -0,0 +1,573 @@
+// CPlayerDlg.cpp : 实现文件
+//
+
+#include "stdafx.h"
+#include "CPlayerDlg.h"
+#include "afxdialogex.h"
+
+#define FULLSCREEN_TIMERID 8
+#define INTERVAL_TIMERID 9
+#define WNDTOPMOST_TIMERID 10
+
+// CPlayerDlg 对话框
+
+IMPLEMENT_DYNAMIC(CPlayerDlg, CDialogEx)
+
+BEGIN_EVENTSINK_MAP(CPlayerDlg, CDialogEx)
+	ON_EVENT(CPlayerDlg, IDC_OCX1, 5101, CPlayerDlg::PlayStateChangeOcx1, VTS_I4)
+END_EVENTSINK_MAP()
+
+// 默认构造函数
+CPlayerDlg::CPlayerDlg(player_callback_t*pCallback, CWnd* pParent /*=NULL*/)
+	: CDialogEx(CPlayerDlg::IDD, pParent), m_player(NULL), m_bMax(false), m_bInit(false), 
+	m_bTimer(false), m_hMonitor(NULL), m_nPlayCnt(0), m_nMediaInx(0), m_pConfig(NULL)
+{
+	m_hIcon = AfxGetApp()->LoadIcon(IDI_PLAYER);
+	memcpy(&m_callback, pCallback, sizeof(player_callback_t));   
+}
+
+// 音视频播放
+CPlayerDlg::CPlayerDlg(CWmpPlayConfig *pConfig, player_callback_t*pCallback, CWnd *pParent/* = NULL*/)
+	: CDialogEx(CPlayerDlg::IDD, pParent), m_player(NULL), m_bMax(false), m_bInit(false), 
+	m_bTimer(false), m_hMonitor(NULL), m_nPlayCnt(0), m_nMediaInx(0)
+{
+	m_hIcon = AfxGetApp()->LoadIcon(IDI_PLAYER);
+	m_pConfig = pConfig;
+	memcpy(&m_callback, pCallback, sizeof(player_callback_t));
+	 
+}
+
+CPlayerDlg::~CPlayerDlg()
+{
+	if (m_player != NULL)
+	{
+		delete m_player;
+		m_player = NULL;
+	}
+	m_pConfig = NULL;
+}
+
+BOOL CPlayerDlg::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+	SetIcon(m_hIcon, TRUE);			// 设置大图标
+	SetIcon(m_hIcon, FALSE);		// 设置小图标
+
+	long ScreenWidth = GetSystemMetrics(SM_CXSCREEN);  //主屏幕宽度
+	long ScreenHeight = GetSystemMetrics(SM_CYSCREEN); //主屏幕高度
+
+	if (LOCALAUDIO != m_pConfig->eMode) {
+		PlayerLog(PLAYER_LOG_DEBUG, "ScreenWidth = %u, ScreenHeight= %u, m_pConfig->nWndX = %d, m_pConfig->nWndY = %d.", ScreenWidth, ScreenHeight, m_pConfig->nWndX, m_pConfig->nWndY);
+	}
+
+	if (SALESNOTICE == m_pConfig->eMode){
+		if (m_pConfig->nWndX >= ScreenWidth || m_pConfig->nWndY >= ScreenHeight){
+			m_pConfig->bPrimMonitor = false;
+			m_pConfig->nWndX -= ScreenWidth;
+			if (m_pConfig->nWndX < 0){
+				m_pConfig->nWndX = 0;
+			}
+			m_pConfig->nWndY -= ScreenHeight;
+			if (m_pConfig->nWndY < 0){
+				m_pConfig->nWndY = 0;
+			}
+			PlayerLog(PLAYER_LOG_DEBUG, "bPrimMonitor flag is %s, m_pConfig->nWndX = %d, m_pConfig->nWndY = %d.", m_pConfig->bPrimMonitor? "true":"false", m_pConfig->nWndX, m_pConfig->nWndY);
+		}
+	}
+	
+	MONITORINFOEX mix;
+	mix.cbSize = sizeof(mix);
+	if (m_pConfig->bPrimMonitor == true) // 默认情况,在主屏显示
+	{
+		m_hMonitor = MonitorFromWindow(this->GetSafeHwnd(), MONITOR_DEFAULTTONULL);
+		GetMonitorInfo(m_hMonitor, (LPMONITORINFO)&mix);
+		SetRect(&m_monitorRect, mix.rcMonitor.left, mix.rcMonitor.top, mix.rcMonitor.right, mix.rcMonitor.bottom);
+	}
+	else // 在副屏显示
+	{
+		POINT pt;
+		pt.x = ScreenWidth+5;
+		pt.y = 5;
+		m_hMonitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONULL); //尝试获取副屏的句柄
+		if (m_hMonitor != NULL)
+		{
+			GetMonitorInfo(m_hMonitor, (LPMONITORINFO)&mix);
+			SetRect(&m_monitorRect, mix.rcMonitor.left, mix.rcMonitor.top, mix.rcMonitor.right, mix.rcMonitor.bottom);
+		}
+		else
+		{
+			OnCancel();
+			SetEvent(m_pConfig->h_WMPCreateEvent); 
+			SetEvent(m_pConfig->h_WMPPlayEndEvent); 
+			PlayerLogEvent(PLAYER_VICE_LOCATION_ERROR, "vice monitor setting error!");
+			return FALSE;
+		}
+	}
+
+	CRect Rect;
+    this->GetClientRect(&Rect);
+	m_player = new CWMPPlayer4;
+	BOOL bCreateRet = m_player->Create(_T("SalesVideo"),WS_CHILD|WS_VISIBLE,Rect,this,IDC_OCX1);
+	if (bCreateRet == FALSE)
+	{
+		OnCancel();
+		SetEvent(m_pConfig->h_WMPCreateEvent); // 发出窗口创建完成事件
+		SetEvent(m_pConfig->h_WMPPlayEndEvent);
+		return FALSE;
+	}
+
+	SetEvent(m_pConfig->h_WMPCreateEvent); // 发出窗口创建完成事件
+	
+	m_bInit = true;
+	
+	::SetWindowPos(m_player->GetSafeHwnd(),HWND_TOP,m_monitorRect.left,m_monitorRect.top,0,0,SWP_HIDEWINDOW);//HWND_TOP
+	m_player->put_enableContextMenu(FALSE);
+	m_player->put_stretchToFit(TRUE);
+	m_player->put_fullScreen(FALSE);//禁止全屏
+	
+	if (_stricmp(m_pConfig->strRootPath, ""))
+	{
+		if(m_pConfig->eMode == SINGLE) // 单一模式播放
+		{
+			::SetWindowPos(this->GetSafeHwnd(),HWND_TOP,m_monitorRect.left,m_monitorRect.top,0,0,SWP_HIDEWINDOW);//HWND_TOP
+			m_player->put_URL(m_pConfig->strRootPath);
+		}
+		else if (m_pConfig->eMode == SALESRECORD || m_pConfig->eMode == THRIDSALESRECORD) // 客户经理录像模式播放
+		{
+			if (SALESRECORD == m_pConfig->eMode)
+			{
+				::SetWindowPos(this->GetSafeHwnd(),HWND_TOP,m_monitorRect.left,m_monitorRect.top,0,0,SWP_HIDEWINDOW);//HWND_TOP
+			}
+			else{
+				if (m_pConfig->nWndWidth > m_monitorRect.Width())
+				{
+					m_pConfig->nWndWidth = m_monitorRect.Width();
+				}
+				if (m_pConfig->nWndHeight > m_monitorRect.Height())
+				{
+					m_pConfig->nWndHeight = m_monitorRect.Height();
+				}
+				::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST, m_monitorRect.left+m_pConfig->nWndX,
+					m_monitorRect.top+m_pConfig->nWndY,m_pConfig->nWndWidth,m_pConfig->nWndHeight,SWP_HIDEWINDOW);//HWND_TOP
+			}
+
+			SetTimer(WNDTOPMOST_TIMERID, 10, 0);
+			SetTimer(FULLSCREEN_TIMERID, GetDoubleClickTime(), 0); // 开启Timer监视,防止WMP本身的全屏
+			m_bTimer = true;
+
+			m_settings = static_cast<CWMPSettings>(m_player->get_settings());
+			m_settings.put_autoStart(FALSE);
+			m_playlist = m_player->get_currentPlaylist();
+			if (strstr(m_pConfig->strNamePrefix, "S"))
+			{
+				m_playlist.put_name(_T("现场销售录音录像"));
+			}
+			else if (strstr(m_pConfig->strNamePrefix, "W"))
+			{
+				m_playlist.put_name(_T("二次见证录音录像"));
+			}
+			else if (strstr(m_pConfig->strNamePrefix, "OFL")) // edit by ly 20180224
+			{
+				m_playlist.put_name(_T("离线录音录像"));
+			}
+		
+			CString videoPath("");
+			for(int i = 0; i != m_pConfig->nFileCnt; ++i)
+			{
+				videoPath.Format(_T("%s%s_%d.wmv"), m_pConfig->strRootPath, m_pConfig->strNamePrefix, i);
+				m_playlist.appendItem(m_player->newMedia(videoPath));
+			}
+
+			m_control = static_cast<CWMPControls>(m_player->get_controls());
+			m_control.play();
+		}
+		else if (m_pConfig->eMode == LOCALAUDIO) // 本地音频模式播放
+		{
+			::SetWindowPos(this->GetSafeHwnd(),HWND_TOP,m_monitorRect.left,m_monitorRect.top,0,0,SWP_HIDEWINDOW);//HWND_TOP
+
+			m_settings = static_cast<CWMPSettings>(m_player->get_settings());
+			m_settings.put_autoStart(FALSE);
+			m_playlist = m_player->get_currentPlaylist();
+			m_playlist.put_name(_T("可视柜台本地音频播放"));
+
+			// 每次加载1个文件播放,先播放第一个
+			for (int i = 0; i < m_pConfig->nFileCnt; i++){
+				CString audioPath("");
+				audioPath.Format(_T("%s%s"), (LPCSTR)m_pConfig->strRootPath, (LPCSTR)m_pConfig->strFileNames[i]);
+				m_playlist.appendItem(m_player->newMedia(audioPath));
+			}
+
+			m_control = static_cast<CWMPControls>(m_player->get_controls());
+			m_control.play();
+		}
+		else if (m_pConfig->eMode == LOCALVIDEO) // 本地视频模式播放
+		{
+			if (m_pConfig->bSimpleMode == true) // 简洁模式
+			{
+				m_player->put_uiMode(_T("none"));
+				// 去掉标题栏和边框
+				ModifyStyle(WS_CAPTION, 0, 0);
+				ModifyStyleEx(WS_EX_DLGMODALFRAME, 0, 0);
+			}
+
+			SetTimer(FULLSCREEN_TIMERID, GetDoubleClickTime(), 0); // 开启Timer监视,防止WMP本身的全屏
+			m_bTimer = true;
+
+			m_settings = static_cast<CWMPSettings>(m_player->get_settings());
+			m_settings.put_autoStart(FALSE);
+			m_settings.put_volume(m_pConfig->nVolume); // 设置音量 add by ly 2017/06/06
+			m_playlist = m_player->get_currentPlaylist();
+			m_playlist.put_name(_T("可视柜台本地视频播放"));
+
+			if (m_pConfig->bFullScreen == true) // 全屏模式
+			{
+				//最大化
+				::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST, m_monitorRect.left,
+					m_monitorRect.top,m_monitorRect.Width(),m_monitorRect.Height(),SWP_HIDEWINDOW);//HWND_TOP
+			}
+			else
+			{
+				if (m_pConfig->nWndWidth > m_monitorRect.Width())
+				{
+					m_pConfig->nWndWidth = m_monitorRect.Width();
+				}
+				if (m_pConfig->nWndHeight > m_monitorRect.Height())
+				{
+					m_pConfig->nWndHeight = m_monitorRect.Height();
+				}
+				::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST, m_monitorRect.left+m_pConfig->nWndX,
+					m_monitorRect.top+m_pConfig->nWndY,m_pConfig->nWndWidth,m_pConfig->nWndHeight,SWP_HIDEWINDOW);//HWND_TOP
+			}
+
+			// 每次加载1个文件播放,先播放第一个
+			if(m_pConfig->nFileCnt > 0)
+			{
+				CString videoPath("");
+				videoPath.Format(_T("%s%s"), (LPCSTR)m_pConfig->strRootPath, (LPCSTR)m_pConfig->strFileNames[0]);
+				m_player->put_URL(videoPath);
+
+				m_control = static_cast<CWMPControls>(m_player->get_controls());
+				m_control.play();
+			}
+		}
+		else if(SALESNOTICE == m_pConfig->eMode){
+			if (m_pConfig->bSimpleMode == true){
+				m_player->put_uiMode(_T("none"));
+				// 去掉标题栏和边框
+				ModifyStyle(WS_CAPTION, 0, 0);
+				ModifyStyleEx(WS_EX_DLGMODALFRAME, 0, 0);
+			}
+
+			SetTimer(FULLSCREEN_TIMERID, GetDoubleClickTime(), 0); // 开启Timer监视,防止WMP本身的全屏
+			m_bTimer = true;
+
+			m_settings = static_cast<CWMPSettings>(m_player->get_settings());
+			m_settings.put_autoStart(FALSE);
+			m_playlist = m_player->get_currentPlaylist();
+
+			m_playlist.put_name(_T("可视柜台产品销售提示"));
+			if (m_pConfig->nWndWidth > m_monitorRect.Width()){
+				m_pConfig->nWndWidth = m_monitorRect.Width();
+			}
+			if (m_pConfig->nWndHeight > m_monitorRect.Height()){
+				m_pConfig->nWndHeight = m_monitorRect.Height();
+			}
+			::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST, m_monitorRect.left+m_pConfig->nWndX,
+				m_monitorRect.top+m_pConfig->nWndY,m_pConfig->nWndWidth,m_pConfig->nWndHeight,SWP_HIDEWINDOW);//HWND_TOP
+
+			CString videoPath("");
+			videoPath.Format(_T("%s%s"), m_pConfig->strRootPath, m_pConfig->strFileNames[0]);
+			m_playlist.appendItem(m_player->newMedia(videoPath));
+			m_control = static_cast<CWMPControls>(m_player->get_controls());
+			m_control.play();
+		}
+	}	
+	
+	return TRUE;
+}
+
+void CPlayerDlg::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+}
+
+
+BEGIN_MESSAGE_MAP(CPlayerDlg, CDialogEx)
+	ON_MESSAGE(WM_SETVOLUME_MESSAGE, &CPlayerDlg::OnSetVolumeMessage)
+	ON_WM_CLOSE()
+	ON_WM_SIZE()
+	ON_WM_NCLBUTTONDBLCLK()
+	ON_WM_NCHITTEST()
+	ON_WM_NCLBUTTONDOWN()
+	ON_WM_TIMER()
+	ON_WM_ERASEBKGND()
+END_MESSAGE_MAP()
+
+
+// CPlayerDlg 消息处理程序
+
+LRESULT CPlayerDlg::OnSetVolumeMessage( WPARAM wParam, LPARAM lParam )
+{
+	int nVolume = (int)lParam;
+	m_settings.put_volume(nVolume);
+	return 0;
+}
+
+void CPlayerDlg::OnClose()
+{
+	// TODO: 在此添加消息处理程序代码和/或调用默认值
+	EndPlay();
+	CDialogEx::OnClose();
+}
+
+
+void CPlayerDlg::OnSize(UINT nType, int cx, int cy)
+{
+	if(!m_bInit) return;
+	CDialogEx::OnSize(nType, cx, cy);
+	// TODO: 在此处添加消息处理程序代码
+	m_player->MoveWindow(0, 0, cx, cy);
+}
+
+
+void CPlayerDlg::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
+{	
+	CDialogEx::OnNcLButtonDblClk(nHitTest, point);
+	// TODO: 在此添加消息处理程序代码和/或调用默认值
+	if(nHitTest == HTCAPTION)
+	{
+		if (!m_bMax)
+		{
+			this->GetWindowRect(&m_savedWndRect);//保存窗口最大化之前的Rect
+			::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST, m_monitorRect.left,
+				m_monitorRect.top,m_monitorRect.Width(),m_monitorRect.Height(),SWP_SHOWWINDOW);
+		}
+		else
+		{
+			::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST, m_savedWndRect.left,
+				m_savedWndRect.top,m_savedWndRect.Width(),m_savedWndRect.Height(),SWP_SHOWWINDOW);
+		}
+		m_bMax = !m_bMax;
+		return;
+	}
+}
+
+void CPlayerDlg::PlayStateChangeOcx1(long NewState)
+{
+	if(m_bInit)
+	{
+		switch(NewState)
+		{
+			case 3: // 播放状态
+				{
+					if (m_pConfig->eMode == SINGLE || m_pConfig->eMode == SALESRECORD)
+					{
+						CWMPMedia m_media = m_player->get_currentMedia();
+						long width = m_media.get_imageSourceWidth();
+						long height = m_media.get_imageSourceHeight();//HWND_TOPMOST
+						int border_w = GetSystemMetrics(SM_CXFRAME);  //窗口边框的边缘宽度
+						int border_h = GetSystemMetrics(SM_CYFRAME); //窗口边框的边缘高度
+						int titlebar_h = GetSystemMetrics(SM_CYSIZE);
+						
+						if (width > height)
+						{
+							long wnd_w = (long)(1.4*width+2*border_w);
+							long wnd_h = (long)(1.4*height+border_h+titlebar_h+140);
+							::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST, m_monitorRect.left+(m_monitorRect.Width()-wnd_w)/2,
+								m_monitorRect.top+(m_monitorRect.Height()-wnd_h)/2,wnd_w,wnd_h,SWP_SHOWWINDOW);//HWND_TOP
+						}
+						else
+						{
+							long wnd_w = (long)(0.8*width+2*border_w);
+							long wnd_h = (long)(0.8*height+border_h+titlebar_h+128);
+							::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST, m_monitorRect.left+(m_monitorRect.Width()-wnd_w)/2+336,
+								m_monitorRect.top+(m_monitorRect.Height()-wnd_h)/2-54,wnd_w,wnd_h,SWP_SHOWWINDOW);//HWND_TOP
+						}
+					}
+					else if (m_pConfig->eMode ==  LOCALVIDEO)
+					{
+						this->ShowWindow(SW_SHOW);
+					}
+				}
+				break;
+			case 2: // 暂停状态
+				break;
+			case 1: // 停止状态
+				{
+					if (m_pConfig->eMode == LOCALVIDEO || SALESNOTICE == m_pConfig->eMode)
+					{
+						// 隐藏窗口
+						this->ShowWindow(SW_HIDE);
+						m_nMediaInx = (m_nMediaInx+1)%m_pConfig->nFileCnt;
+						if (m_pConfig->nPlayCnt != 0) // 非循环播放
+						{
+							if (m_nMediaInx == 0)
+							{
+								m_nPlayCnt++;
+							}
+							if (m_pConfig->eMode == LOCALAUDIO)
+							{
+								//EndPlay();
+								return;
+							}
+							if (m_nPlayCnt == m_pConfig->nPlayCnt)//播放次数到了
+							{
+								// 结束播放
+								//EndPlay();
+								SetEvent(m_pConfig->h_WMPPlayEndEvent);
+								return;
+							}
+						}
+						if (m_pConfig->nPlayInterval >= 0)
+						{
+							SetTimer(INTERVAL_TIMERID, m_pConfig->nPlayInterval, 0);
+						}
+					}
+				}
+				break;
+			case 8: // 播放列表单曲结束
+				if (m_pConfig->eMode == LOCALAUDIO)
+				{
+					m_pConfig->nFileCnt--;
+
+					if (m_pConfig->nFileCnt == 0){
+						SetEvent(m_pConfig->h_WMPPlayEndEvent);// play end
+					}
+				}
+				break;
+			case 9: // 缓冲状态
+			case 10:// 开始状态
+			default:
+				break;
+		}
+	}
+}
+
+BOOL CPlayerDlg::EndPlay()
+{
+	// 停止计时器
+	if (m_bTimer)
+	{
+		m_bTimer = false;
+		KillTimer(FULLSCREEN_TIMERID);
+	}
+
+	KillTimer(WNDTOPMOST_TIMERID);
+	// 停止播放
+	m_bInit = false;				// new added
+	KillTimer(INTERVAL_TIMERID);	// new added
+
+	m_control.stop();
+
+	m_playlist = m_player->get_currentPlaylist();			// new added
+	m_playlist.clear();										// new added
+	
+	m_player->close();
+	
+	m_player->DestroyWindow();		// new added
+
+	// 关闭窗口
+	EndDialog(IDCANCEL);
+
+	return TRUE;
+}
+
+LRESULT CPlayerDlg::OnNcHitTest(CPoint point)
+{
+	// TODO: 在此添加消息处理程序代码和/或调用默认值
+	int ret = CDialogEx::OnNcHitTest(point);
+
+    if(HTTOP == ret || HTBOTTOM == ret || HTLEFT == ret || HTRIGHT == ret || 
+		HTBOTTOMLEFT == ret || HTBOTTOMRIGHT == ret || HTTOPLEFT == ret || 
+		HTTOPRIGHT == ret || HTCAPTION == ret)
+	  return HTCLIENT;
+
+    return ret;
+}
+
+
+void CPlayerDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
+{
+	// TODO: 在此添加消息处理程序代码和/或调用默认值
+	if(HTTOP == nHitTest || HTBOTTOM == nHitTest || HTLEFT == nHitTest || HTRIGHT == nHitTest || 
+		HTBOTTOMLEFT == nHitTest || HTBOTTOMRIGHT == nHitTest || HTTOPLEFT == nHitTest || 
+		HTTOPRIGHT == nHitTest || HTCAPTION == nHitTest)
+		return;
+	CDialogEx::OnNcLButtonDown(nHitTest, point);
+	return;
+}
+
+static bool isWndTopMost(HWND hwnd)
+{
+	if(GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST)
+	{
+		return true;
+	}
+	else{
+		return false;
+	}
+}
+
+void CPlayerDlg::OnTimer(UINT_PTR nIDEvent)
+{
+	// TODO: 在此添加消息处理程序代码和/或调用默认值
+	if (nIDEvent == FULLSCREEN_TIMERID)
+	{
+		if (m_player->get_fullScreen() == TRUE)
+		{
+			m_player->put_fullScreen(FALSE);
+		}
+	}
+	else if (nIDEvent == INTERVAL_TIMERID)
+	{
+		// 每间隔m_nPlayInterval毫秒重复播放1次
+		CString mediaPath("");
+		mediaPath.Format(_T("%s%s"), (LPCSTR)m_pConfig->strRootPath, (LPCSTR)m_pConfig->strFileNames[m_nMediaInx]);
+		m_player->put_URL(mediaPath);
+
+		m_control = static_cast<CWMPControls>(m_player->get_controls());
+		m_control.play();
+
+		KillTimer(INTERVAL_TIMERID);
+	}
+	else if(WNDTOPMOST_TIMERID == nIDEvent)
+	{
+		//if (false == isWndTopMost(this->GetSafeHwnd()))
+		{
+			::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
+		}
+	}
+	CDialogEx::OnTimer(nIDEvent);
+}
+
+// 禁止刷新背景
+BOOL CPlayerDlg::OnEraseBkgnd(CDC* pDC)
+{
+	// TODO: 在此添加消息处理程序代码和/或调用默认值
+
+	//return CDialogEx::OnEraseBkgnd(pDC);
+	return TRUE;
+}
+
+void CPlayerDlg::PlayerLog(eplayer_loglevel elvel, const char* fmt, ...)
+{
+	if (m_callback.debug) {
+		va_list arg;
+		va_start(arg, fmt);
+		if (*m_callback.debug) {
+			(*m_callback.debug)(elvel, m_callback.user_data, fmt, arg);
+		}
+		va_end(arg);
+	}
+}
+
+
+void CPlayerDlg::PlayerLogEvent(eplayer_monitor_error errortype, const char* errmsg)
+{
+	if (m_callback.player_event) {
+		if (*m_callback.player_event) {
+			(*m_callback.player_event)(m_callback.user_data, errortype, errmsg);
+		}
+	}
+}

+ 90 - 0
Other/win/libwmpplayer/CPlayerDlg.h

@@ -0,0 +1,90 @@
+#pragma once
+
+#include "CWMPPlayer4.h"
+#include "CWMPMedia.h"
+#include "CWMPPlaylist.h"
+#include "CWMPSettings.h"
+#include "CWMPControls.h"
+#include "libwmpplayer.h"
+#include "resource.h"
+
+// CPlayerDlg 对话框
+
+#define  WM_SETVOLUME_MESSAGE WM_USER+100
+
+enum eplayer_loglevel {
+	PLAYER_LOG_DEBUG,
+	PLAYER_LOG_INFO,
+	PLAYER_LOG_ERROR,
+	PLAYER_LOG_NO
+};
+
+enum eplayer_monitor_error {
+	PLAYER_NOTFUND_VICE,
+	PLAYER_VICE_LOCATION_ERROR
+};
+
+typedef struct player_callback_s {
+	void (*debug)(eplayer_loglevel elevel, void* user_data, const char* fmt, va_list arg);
+	void (*player_event)(void* user_data, eplayer_monitor_error errortype, const char* errmsg);
+	void* user_data;
+}player_callback_t;
+
+class CPlayerDlg : public CDialogEx
+{
+	DECLARE_DYNAMIC(CPlayerDlg)
+
+public:
+	CPlayerDlg(player_callback_t*pCalback, CWnd* pParent = NULL);   // 标准构造函数
+	CPlayerDlg(CWmpPlayConfig *pConfig, player_callback_t*pCalback, CWnd *pParent = NULL);
+	virtual ~CPlayerDlg();
+
+// 对话框数据
+	enum { IDD = IDD_DIALOG1 };
+
+protected:
+	HICON m_hIcon;
+	CWMPPlayer4 *m_player;
+	CWMPSettings m_settings;
+	CWMPPlaylist m_playlist;
+	CWMPControls m_control;
+	bool m_bMax;//窗口最大化标志
+	CRect m_savedWndRect;//上一次的窗口矩形
+	bool m_bInit;//OnInitDialog是否执行结束
+	bool m_bTimer;//计时器是否在执行
+	HMONITOR m_hMonitor;//音视频播放所在的屏幕的句柄
+	CRect m_monitorRect;//音视频播放所在的屏幕的矩形
+	int m_nPlayCnt; // 已重复播放次数(多个文件顺序播完一次算重复播一次)
+	int m_nMediaInx; // 当前媒体序号
+	
+	CWmpPlayConfig *m_pConfig;
+	player_callback_t m_callback;
+
+private:
+	BOOL EndPlay();
+	void PlayerLog(eplayer_loglevel elvel, const char* fmt, ...);
+	void PlayerLogEvent(eplayer_monitor_error errortype, const char* errmsg);
+	
+
+protected:
+	virtual BOOL OnInitDialog();
+	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
+
+	DECLARE_EVENTSINK_MAP()
+public:
+	void PlayStateChangeOcx1(long NewState);
+
+	DECLARE_MESSAGE_MAP()
+
+protected:
+	afx_msg LRESULT OnSetVolumeMessage(WPARAM wParam, LPARAM lParam);
+
+public:
+	afx_msg void OnClose();
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+	afx_msg void OnNcLButtonDblClk(UINT nHitTest, CPoint point);
+	afx_msg LRESULT OnNcHitTest(CPoint point);
+	afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
+	afx_msg void OnTimer(UINT_PTR nIDEvent);
+	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
+};

+ 64 - 0
Other/win/libwmpplayer/ClibwmpplayerApp.cpp

@@ -0,0 +1,64 @@
+// ClibimgplayerApp.cpp : 定义 DLL 的初始化例程。
+//
+#include "stdafx.h"
+#include "ClibwmpplayerApp.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+//
+//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
+//		则从此 DLL 导出的任何调入
+//		MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
+//		该函数的最前面。
+//
+//		例如:
+//
+//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
+//		{
+//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
+//			// 此处为普通函数体
+//		}
+//
+//		此宏先于任何 MFC 调用
+//		出现在每个函数中十分重要。这意味着
+//		它必须作为函数中的第一个语句
+//		出现,甚至先于所有对象变量声明,
+//		这是因为它们的构造函数可能生成 MFC
+//		DLL 调用。
+//
+//		有关其他详细信息,
+//		请参阅 MFC 技术说明 33 和 58。
+//
+
+// ClibwmpplayerApp
+
+BEGIN_MESSAGE_MAP(ClibwmpplayerApp, CWinApp)
+END_MESSAGE_MAP()
+
+
+// ClibwmpplayerApp 构造
+
+ClibwmpplayerApp::ClibwmpplayerApp()
+{
+	// TODO: 在此处添加构造代码,
+	// 将所有重要的初始化放置在 InitInstance 中
+}
+
+
+// 唯一的一个 ClibwmpplayerApp 对象
+
+ClibwmpplayerApp theApp;
+
+
+// ClibwmpplayerApp 初始化
+
+BOOL ClibwmpplayerApp::InitInstance()
+{
+	CWinApp::InitInstance();
+	::OleInitialize(NULL);
+	AfxEnableControlContainer();
+
+	return TRUE;
+}

+ 19 - 0
Other/win/libwmpplayer/ClibwmpplayerApp.h

@@ -0,0 +1,19 @@
+// ClibwmpplayerApp.h : libwmpplayer DLL 的主头文件
+//
+
+#pragma once
+
+#ifndef __AFXWIN_H__
+#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
+#endif
+
+class ClibwmpplayerApp : public CWinApp
+{
+public:
+	ClibwmpplayerApp();
+	// 重写
+public:
+	virtual BOOL InitInstance();
+
+	DECLARE_MESSAGE_MAP()
+};

+ 44 - 0
Other/win/libwmpplayer/ReadMe.txt

@@ -0,0 +1,44 @@
+========================================================================
+    MICROSOFT 基础类库 : libwmpplayer 项目概述
+========================================================================
+
+
+应用程序向导已为您创建了此 libwmpplayer DLL。此 DLL 不仅演示 Microsoft 基础类的基本使用方法,还可作为您编写 DLL 的起点。
+
+本文件概要介绍组成 libwmpplayer DLL 的每个文件的内容。
+
+libwmpplayer.vcproj
+    这是使用应用程序向导生成的 VC++ 项目的主项目文件,
+    其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
+
+libwmpplayer.h
+    这是 DLL 的主头文件。它声明了 CLibWMPPlayerApp 类。
+
+libwmpplayer.cpp
+    这是主 DLL 源文件。它包含 CLibWMPPlayerApp 类。
+
+libwmpplayer.rc
+    这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。此文件可以直接在 Microsoft Visual C++ 中进行编辑。
+
+res\libwmpplayer.rc2
+    此文件包含不在 Microsoft Visual C++ 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。
+
+libwmpplayer.def
+    此文件包含在 Microsoft Windows 中运行所必需的 DLL 的有关信息。它定义了 DLL 的名称和说明等参数,而且还从 DLL 导出函数。
+
+/////////////////////////////////////////////////////////////////////////////
+其他标准文件:
+
+StdAfx.h, StdAfx.cpp
+    这些文件用于生成名为 libwmpplayer.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
+
+Resource.h
+    这是标准头文件,可用于定义新的资源 ID。
+    Microsoft Visual C++ 将读取并更新此文件。
+
+/////////////////////////////////////////////////////////////////////////////
+其他注释:
+
+应用程序向导使用“TODO:”来指示应添加或自定义的源代码部分。
+
+/////////////////////////////////////////////////////////////////////////////

+ 531 - 0
Other/win/libwmpplayer/libwmpplayer.cpp

@@ -0,0 +1,531 @@
+#include "stdafx.h"
+#include "libwmpplayer.h"
+#include "CPlayerDlg.h"
+#include <Windows.h>
+
+static void __debug(eplayer_loglevel elvel, void* user_data, const char* fmt, va_list arg);
+static void __logenvet( void* user_data, eplayer_monitor_error ievent, const char* strmsg);
+
+class libwmpplayer_impl
+{
+private:
+	CPlayerDlg *m_pDlg;
+	HANDLE m_hPlayThread;
+	UINT m_nPlaythreadId;
+	CWmpPlayConfig m_stPlayConfig;
+	CWmpHostApi *m_pHostApi;
+	BOOL m_bIsPlay;
+
+	HANDLE h_WMPCreateEvent;	// 播放器创建事件
+	HANDLE h_WMPPlayEndEvent;
+	bool m_bWMPCreating;		// 是否播放器正在创建中
+
+
+	VOID PlayDlg()
+	{
+		// 参数检查
+		if (!_stricmp(m_stPlayConfig.strRootPath, ""))
+			return;
+		switch (m_stPlayConfig.eMode)
+		{
+			case SINGLE:
+				break;
+			case SALESRECORD:
+				if (!_stricmp(m_stPlayConfig.strNamePrefix, "") || m_stPlayConfig.nFileCnt <= 0)
+					return;
+				break;
+			case LOCALAUDIO:
+				if (m_stPlayConfig.nPlayCnt < 0 || m_stPlayConfig.nPlayInterval < 0 
+					|| m_stPlayConfig.nFileCnt <= 0 || m_stPlayConfig.nFileCnt > MAX_FILECOUNT)
+					return;
+				break;
+			case LOCALVIDEO:
+				if (m_stPlayConfig.nWndX < 0 || m_stPlayConfig.nWndY < 0 || m_stPlayConfig.nWndWidth < 0 
+					|| m_stPlayConfig.nWndHeight < 0 || m_stPlayConfig.nPlayCnt < 0 || m_stPlayConfig.nPlayInterval < 0 
+					|| m_stPlayConfig.nFileCnt <= 0 || m_stPlayConfig.nFileCnt > MAX_FILECOUNT)
+					return;
+				break;
+			case THRIDSALESRECORD:
+				if (m_stPlayConfig.nPlayCnt < 0 || m_stPlayConfig.nPlayInterval < 0 || m_stPlayConfig.nFileCnt <= 0 
+					|| m_stPlayConfig.nFileCnt > MAX_FILECOUNT || m_stPlayConfig.nWndX < 0 || m_stPlayConfig.nWndY < 0 
+					|| m_stPlayConfig.nWndWidth < 0 || m_stPlayConfig.nWndHeight < 0 )
+					return;
+				break;
+			case SALESNOTICE:
+				if (m_stPlayConfig.nWndX < 0 || m_stPlayConfig.nWndY < 0 || m_stPlayConfig.nWndWidth < 0 
+					|| m_stPlayConfig.nWndHeight < 0 || m_stPlayConfig.nFileCnt <= 0 || m_stPlayConfig.nFileCnt > MAX_FILECOUNT)
+					return;
+				break;
+		}
+		
+		if (NULL != m_pDlg){
+			return;
+		}
+
+		AFX_MANAGE_STATE(AfxGetStaticModuleState());
+		player_callback_t pcallback = {0};
+		pcallback.debug = &__debug;
+		pcallback.player_event = &__logenvet;
+		pcallback.user_data = this;
+		m_pDlg = new CPlayerDlg(&m_stPlayConfig, &pcallback);
+		//m_pHostApi->WmpDebug("Ok to initialize CPlayerDlg!");
+		INT_PTR nResponse = m_pDlg->DoModal();
+		delete m_pDlg;
+		m_pDlg = NULL;
+		if (nResponse == IDCANCEL)
+		{
+			// 表示是执行OnCancel或OnClose或StopPlay关闭的
+			CloseHandle(m_hPlayThread);
+			m_hPlayThread = NULL;
+		}
+	}
+
+	static unsigned int __stdcall VideoPlayThread(LPVOID param)
+	{
+		int i = 0;
+		CoInitialize(NULL);
+		libwmpplayer_impl *p = (libwmpplayer_impl *)param;
+		p->PlayDlg();
+		CoUninitialize();
+		return 0;
+	}
+
+public:
+	libwmpplayer_impl(CWmpHostApi *pHostApi)
+		: m_pDlg(NULL), m_hPlayThread(NULL), m_nPlaythreadId(0), m_bIsPlay(FALSE), m_bWMPCreating(false), h_WMPPlayEndEvent(NULL)
+	{
+		m_pHostApi = pHostApi;
+		memset(&m_stPlayConfig, 0, sizeof(m_stPlayConfig));
+	}
+
+	~libwmpplayer_impl()
+	{
+		m_pHostApi = NULL;
+	}
+	
+	BOOL isStop(){ return !m_bIsPlay; }
+
+	BOOL CheckIsPlay(HANDLE &playThread)
+	{
+		if (NULL == m_hPlayThread) {
+			return FALSE;
+		}
+
+		DWORD exitCode = 0;
+		if (GetExitCodeThread(m_hPlayThread, &exitCode) && STILL_ACTIVE == exitCode)
+		{
+			playThread = h_WMPPlayEndEvent;
+			return TRUE;
+		}
+		else {
+			return FALSE;
+		}
+	}
+
+	// 按分隔符分隔字符串
+	void CStringSplit(char *str, char **result, const char *del)
+	{
+		char *p = strtok(str, del);
+		while(p != NULL)
+		{
+			*result++ = p;
+			p = strtok(NULL, del);
+		}
+	}
+
+	BOOL StartPlayVideo(const char *pVideoDir, const char *pNamePrefix = NULL, int nVideoCount = 1)
+	{
+		if (pVideoDir == NULL)
+			return FALSE;
+		if (m_bIsPlay)
+		{
+			if (m_pDlg != NULL)
+				return TRUE;
+		}
+		else
+		{
+			m_bIsPlay = TRUE;
+			//m_pHostApi->WmpDebug("StartPlayVideo set m_bIsPlay is TRUE.");
+		}
+		
+		strcpy(m_stPlayConfig.strRootPath, pVideoDir);
+		if (pNamePrefix != NULL)
+		{
+			strcpy(m_stPlayConfig.strNamePrefix, pNamePrefix);
+			m_stPlayConfig.eMode = SALESRECORD;
+		}
+		else
+		{
+			strcpy(m_stPlayConfig.strNamePrefix, "");
+			m_stPlayConfig.eMode = SINGLE;
+		}
+		m_stPlayConfig.nFileCnt = nVideoCount;
+		m_stPlayConfig.bPrimMonitor = true;
+
+		return CreateWMPDialog();
+	}
+
+	BOOL StartPlaySalesRecordVideo(int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoDir, const char *pNamePrefix = NULL, int nVideoCount = 1)
+	{
+		if (pVideoDir == NULL) {
+			return FALSE;
+		}
+		
+		if (m_bIsPlay){
+			if (m_pDlg != NULL) {
+				return TRUE;
+			}
+		}
+		else{
+			m_bIsPlay = TRUE;
+			//m_pHostApi->WmpDebug("StartPlayVideo set m_bIsPlay is TRUE.");
+		}
+
+		//m_pHostApi->WmpDebug("nWndX=%d, nWndY=%d, nWndWidth=%d, nWndHeight=%d!", nWndX,nWndY,nWndWidth,nWndHeight);
+		BOOL bRet = m_pHostApi->LoadPlayConfig(m_stPlayConfig);
+		m_stPlayConfig.nWndX = nWndX;
+		m_stPlayConfig.nWndY = nWndY;
+		m_stPlayConfig.nWndWidth = nWndWidth;
+		m_stPlayConfig.nWndHeight = nWndHeight;
+		if (!bRet){
+			m_pHostApi->WmpDebug("Load WmpConfiguration failed while play local video!");
+			return FALSE;
+		}
+		else
+		{
+			//m_pHostApi->WmpDebug("Load WmpConfiguration succeeded while play local video!");
+			//m_pHostApi->WmpDebug("m_stPlayConfig.strRootPath: %s", m_stPlayConfig.strRootPath);
+		}
+
+		strcpy(m_stPlayConfig.strRootPath, pVideoDir);
+		if (pNamePrefix != NULL){
+			strcpy(m_stPlayConfig.strNamePrefix, pNamePrefix);
+			m_stPlayConfig.eMode = THRIDSALESRECORD;
+		}
+		else{
+			strcpy(m_stPlayConfig.strNamePrefix, "");
+			m_stPlayConfig.eMode = SINGLE;
+		}
+
+		m_stPlayConfig.nFileCnt = nVideoCount;
+		m_stPlayConfig.bPrimMonitor = true;
+
+		return CreateWMPDialog();
+	}
+
+
+	BOOL StartPlayVideoNotice(int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoDir, const char *pVideoName)
+	{
+		if (NULL == pVideoName || NULL == pVideoDir){
+			return FALSE;
+		}
+
+		if (m_bIsPlay){
+			if (m_pDlg != NULL){
+				return TRUE;
+			}
+		}
+		else{
+			m_bIsPlay = TRUE;
+			//m_pHostApi->WmpDebug("StartPlayVideoNotice set m_bIsPlay is TRUE.");
+		}
+
+		//m_pHostApi->WmpDebug("nWndX=%d, nWndY=%d, nWndWidth=%d, nWndHeight=%d!", nWndX,nWndY,nWndWidth,nWndHeight);
+		
+		m_stPlayConfig.nWndX = nWndX;
+		m_stPlayConfig.nWndY = nWndY;
+		m_stPlayConfig.nWndWidth = nWndWidth;
+		m_stPlayConfig.nWndHeight = nWndHeight;
+		m_stPlayConfig.nFileCnt = 1;
+		m_stPlayConfig.nPlayCnt =1;
+		m_stPlayConfig.bPrimMonitor = true;
+		m_stPlayConfig.eMode = SALESNOTICE;
+		m_stPlayConfig.bSimpleMode = true;
+		_snprintf(m_stPlayConfig.strRootPath, MAX_PATH, "%s", pVideoDir);
+		_snprintf(m_stPlayConfig.strFileNames[0], MAX_PATH, "%s", pVideoName);
+
+		return CreateWMPDialog();
+	}
+
+	BOOL StartPlayLocalAudio(const char *pAudioNames)
+	{
+		if (pAudioNames == NULL)
+			return FALSE;
+		if (m_bIsPlay)
+		{
+			if (m_pDlg != NULL)
+				return TRUE;
+		}
+		else
+			m_bIsPlay = TRUE;
+		
+		m_stPlayConfig.eMode = LOCALAUDIO;
+		BOOL bRet = m_pHostApi->LoadPlayConfig(m_stPlayConfig);
+		m_stPlayConfig.eMode = LOCALAUDIO;
+		if (!bRet)
+		{
+			m_pHostApi->WmpDebug("Load WmpConfiguration failed while play local audio!");
+			return FALSE;
+		}
+		else
+		{
+			//m_pHostApi->WmpDebug("Load WmpConfiguration succeeded while play local audio!");
+			//m_pHostApi->WmpDebug("m_stPlayConfig.strRootPath: %s", m_stPlayConfig.strRootPath);
+		}
+		// 切分音频文件名
+		char *Tmp = new char[strlen(pAudioNames)+1];
+		strcpy(Tmp, pAudioNames);
+		char *Result[MAX_FILECOUNT] = { NULL };
+		CStringSplit(Tmp, Result, "|");
+		int FileCount = 0;
+		char** pStr = Result;
+		while (*pStr != NULL)
+		{
+			++pStr; 
+			++FileCount;
+		}
+		m_stPlayConfig.bPrimMonitor = true;
+		m_stPlayConfig.nFileCnt = FileCount;		
+		//m_pHostApi->WmpDebug("Wmp pAudioNames = %s!", pAudioNames);
+		//m_pHostApi->WmpDebug("Wmp config.nFileCnt = %d!", FileCount);
+		for (int i = 0; i != FileCount; ++i)
+		{
+			strcpy(m_stPlayConfig.strFileNames[i], Result[i]);
+		}
+		delete[] Tmp; Tmp = NULL;
+
+		return CreateWMPDialog();
+	}
+
+	BOOL StartPlayMedia(CWmpPlayConfig &config)
+	{
+		if (m_bIsPlay)
+		{
+			if (m_pDlg != NULL) {
+				return TRUE;
+			}
+		}
+		else {
+			m_bIsPlay = TRUE;
+		}
+
+		memcpy(&m_stPlayConfig, &config, sizeof(CWmpPlayConfig));
+
+		return CreateWMPDialog();
+	}
+
+	BOOL StartPlayLocalVideo(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight)
+	{
+		if (m_bIsPlay)
+		{
+			if (m_pDlg != NULL)
+				return TRUE;
+		}
+		else
+			m_bIsPlay = TRUE;
+		
+		m_stPlayConfig.eMode = LOCALVIDEO;
+
+		//m_pHostApi->WmpDebug("nCfgInx=%d, nWndX=%d, nWndY=%d, nWndWidth=%d, nWndHeight=%d!", nCfgInx,nWndX,nWndY,nWndWidth,nWndHeight);
+		BOOL bRet = m_pHostApi->LoadPlayConfig(m_stPlayConfig, nCfgInx);
+		m_stPlayConfig.eMode = LOCALVIDEO;
+		m_stPlayConfig.nWndX = nWndX;
+		m_stPlayConfig.nWndY = nWndY;
+		m_stPlayConfig.nWndWidth = nWndWidth;
+		m_stPlayConfig.nWndHeight = nWndHeight;
+		if (!bRet)
+		{
+			m_pHostApi->WmpDebug("Load WmpConfiguration failed while play local video!");
+			return FALSE;
+		}
+		else
+		{
+			//m_pHostApi->WmpDebug("Load WmpConfiguration succeeded while play local video!");
+			//m_pHostApi->WmpDebug("m_stPlayConfig.strRootPath: %s", m_stPlayConfig.strRootPath);
+		}
+
+		// 判断当前时间是否允许播放
+		SYSTEMTIME st;
+		GetLocalTime(&st);
+		TCHAR strNow[TIME_LEN];
+		sprintf(strNow, "%02d:%02d:%02d", st.wHour,st.wMinute, st.wSecond);
+		if (strcmp(strNow, m_stPlayConfig.strVideoRunTime_S) < 0 || strcmp(strNow, m_stPlayConfig.strVideoRunTime_E) >= 0)
+		{
+			m_pHostApi->WmpDebug("Now is %s, play video rejected!", strNow);
+			return TRUE;
+		}
+
+		return CreateWMPDialog();
+	}
+
+
+	BOOL CreateWMPDialog()
+	{
+		m_bWMPCreating = true;
+		DWORD WaitInterval = 3000;
+		if (h_WMPPlayEndEvent){
+			CloseHandle(h_WMPPlayEndEvent);
+			h_WMPPlayEndEvent = NULL;
+		}
+
+		h_WMPPlayEndEvent = CreateEventA(NULL, FALSE, FALSE, "WMPPLAYENDEvent");
+		m_stPlayConfig.h_WMPPlayEndEvent = h_WMPPlayEndEvent;
+
+		h_WMPCreateEvent = CreateEventA(NULL, FALSE, FALSE, "WMPCreateEvent");
+		m_stPlayConfig.h_WMPCreateEvent = h_WMPCreateEvent;
+		
+		m_hPlayThread = (HANDLE)_beginthreadex(NULL, 0, VideoPlayThread, (LPVOID)this, 0, &m_nPlaythreadId);
+
+		DWORD ret = WaitForSingleObject(h_WMPCreateEvent, WaitInterval);
+		CloseHandle(h_WMPCreateEvent);
+		h_WMPCreateEvent = NULL;
+		m_bWMPCreating = false;
+
+		if (ret == WAIT_OBJECT_0) {
+			return TRUE;
+		}
+		else if (ret == WAIT_TIMEOUT) {
+			return FALSE;
+		}
+		else{
+			return FALSE;
+		}
+	}
+
+	BOOL StopPlay()
+	{
+		static CRITICAL_SECTION t_cs;
+		static bool t_isInit = false;
+		if (!t_isInit){
+			InitializeCriticalSection(&t_cs);
+			t_isInit = true;
+		}
+
+		EnterCriticalSection(&t_cs);
+		if (NULL != m_pDlg)
+		{
+			if (NULL != m_hPlayThread){
+				while (m_bWMPCreating) {
+					Sleep(100); 
+				}
+				if (NULL != h_WMPPlayEndEvent) {
+					SetEvent(h_WMPPlayEndEvent);
+				}
+				
+				::PostMessage(m_pDlg->GetSafeHwnd(), WM_CLOSE, NULL, NULL);
+				WaitForSingleObject(m_hPlayThread, INFINITE);
+			}
+			if (NULL != h_WMPPlayEndEvent) {
+				CloseHandle(h_WMPPlayEndEvent);
+				h_WMPPlayEndEvent = NULL;
+			}
+			m_bIsPlay = FALSE;
+		}
+		LeaveCriticalSection(&t_cs);
+
+		return TRUE;
+	}
+
+	BOOL SetVolume(int nVolume)
+	{
+		if (m_bIsPlay && m_pDlg != NULL &&
+			nVolume >= 0 && nVolume <= 100)
+		{
+			::PostMessage(m_pDlg->GetSafeHwnd(), WM_SETVOLUME_MESSAGE, NULL, (LPARAM)nVolume);
+		}
+		return TRUE;
+	}
+
+	CWmpHostApi* GetHostApi()
+	{
+		return m_pHostApi;
+	}
+};
+
+
+static void __debug(eplayer_loglevel elvel, void* user_data, const char* fmt, va_list arg)
+{
+	if (PLAYER_LOG_DEBUG <= elvel){
+		libwmpplayer_impl* pImpl = (libwmpplayer_impl*)user_data;
+		CWmpHostApi* pHostApi = pImpl->GetHostApi();
+
+		char strbuffer[MAX_PATH] = {0};
+		_vsnprintf_s(strbuffer, MAX_PATH, fmt, arg);
+		if (NULL != pHostApi){
+			pHostApi->WmpDebug("%s", strbuffer);
+		}
+	}
+}
+
+
+static void __logenvet( void* user_data, eplayer_monitor_error ievent, const char* strmsg)
+{
+	libwmpplayer_impl* pImpl = (libwmpplayer_impl*)user_data;
+	CWmpHostApi* pHostApi = pImpl->GetHostApi();
+	if (NULL != pHostApi){
+		pHostApi->WmpLogEvt((int)ievent, strmsg);
+	}
+}
+
+
+Clibwmpplayer::Clibwmpplayer(CWmpHostApi *pHostApi)
+{
+	m_pImpl = new libwmpplayer_impl(pHostApi);
+	return;
+}
+
+Clibwmpplayer::~Clibwmpplayer()
+{
+	delete m_pImpl;
+	m_pImpl = NULL;
+}
+
+VOID Clibwmpplayer::PlayVideo(const char *pVideoDir, const char *pNamePrefix, int nVideoCount)
+{
+	m_pImpl->StartPlayVideo(pVideoDir, pNamePrefix, nVideoCount);
+}
+
+VOID Clibwmpplayer::PlayLocalAudio(const char *pAudioNames)
+{
+	m_pImpl->StartPlayLocalAudio(pAudioNames);
+}
+
+VOID Clibwmpplayer::PlayLocalVideo(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight)
+{
+	m_pImpl->StartPlayLocalVideo(nCfgInx, nWndX, nWndY, nWndWidth, nWndHeight);
+}
+
+BOOL Clibwmpplayer::checkIsPlay(HANDLE &curThread)
+{
+	return m_pImpl->CheckIsPlay(curThread);
+}
+
+BOOL Clibwmpplayer::checkIsStop()
+{
+	return m_pImpl->isStop();
+}
+
+VOID Clibwmpplayer::PlayMedia(CWmpPlayConfig &config)
+{
+	m_pImpl->StartPlayMedia(config);
+}
+
+VOID Clibwmpplayer::Close()
+{
+	m_pImpl->StopPlay();
+}
+
+VOID Clibwmpplayer::SetVolume( int nVolume )
+{
+	m_pImpl->SetVolume(nVolume);
+}
+
+VOID Clibwmpplayer::PlaySalesRecordVideo(int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoDir, const char *pNamePrefix, int nVideoCount)
+{
+	m_pImpl->StartPlaySalesRecordVideo(nWndX, nWndY, nWndWidth, nWndHeight, pVideoDir, pNamePrefix, nVideoCount);
+}
+
+VOID Clibwmpplayer::PlayVideoNotice(int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoDir, const char *pFileName)
+{
+	m_pImpl->StartPlayVideoNotice(nWndX, nWndY, nWndWidth, nWndHeight, pVideoDir,pFileName);
+}

+ 11 - 0
Other/win/libwmpplayer/libwmpplayer.def

@@ -0,0 +1,11 @@
+; libwmpplayer.def : 声明 DLL 的模块参数。
+
+; LIBRARY      "libwmpplayer"
+
+; EXPORTS
+    ; 此处可以是显式导出
+    
+
+; VideoPlayDlg1
+; VideoPlayDlg2
+; ClosePlayDlg

+ 87 - 0
Other/win/libwmpplayer/libwmpplayer.h

@@ -0,0 +1,87 @@
+#pragma once
+
+#ifdef LIBWMPPLAYER_EXPORTS
+#define LIBWMPPLAYER_API __declspec(dllexport)
+#else
+#define LIBWMPPLAYER_API __declspec(dllimport)
+#endif
+
+#include <Windows.h>
+
+#define TIME_LEN      9
+#define MAX_FILECOUNT 32
+
+
+enum PlayModeEnum
+{
+	UNKNOWN = -1,                               // 未知
+	SINGLE,                                     // 单一
+	SALESRECORD,                                // 客户经理
+	LOCALAUDIO,                                 // 本地音频
+	LOCALVIDEO,                                 // 本地视频
+	THRIDSALESRECORD,							// 3.0客户经理双录
+	SALESNOTICE									// 产品销售提示		
+};
+
+struct CWmpPlayConfig
+{	
+	char strVideoRunTime_S[TIME_LEN];			// 每天允许视频播放的起始时间
+	char strVideoRunTime_E[TIME_LEN];			// 每天允许视频播放的终止时间
+
+	bool bFullScreen;                           // 是否全屏
+	bool bPrimMonitor;                          // 是否主屏显示
+	bool bSimpleMode;                           // 是否简洁模式
+	PlayModeEnum eMode;                         // 播放模式
+	int nWndX;                                  // 窗口X坐标
+	int nWndY;                                  // 窗口Y坐标
+	int nWndWidth;                              // 窗口宽度
+	int nWndHeight;                             // 窗口高度
+	int nFileCnt;		                        // 文件个数
+	int nPlayCnt;		                        // 播放次数
+	int nPlayInterval;		                    // 播放时间间隔
+	char strNamePrefix[MAX_PATH];               // 客户经理录像名前缀
+	char strRootPath[MAX_PATH];		            // 根目录
+	char strFileNames[MAX_FILECOUNT][MAX_PATH]; // 文件名数组
+
+	HANDLE h_WMPCreateEvent;
+	HANDLE h_WMPPlayEndEvent;	
+	int nVolume;								// 音量
+};
+
+struct __declspec(novtable) CWmpHostApi
+{
+	virtual BOOL LoadPlayConfig(CWmpPlayConfig &config, int CfgInx = 0) = 0;
+	virtual void WmpDebug(const char *fmt, ...) = 0;
+	virtual void WmpLogEvt(int ievent, const char* strmsg) = 0;
+};
+
+class libwmpplayer_impl; // 桥接
+
+class LIBWMPPLAYER_API Clibwmpplayer
+{
+public:
+	Clibwmpplayer(CWmpHostApi *pHostApi);
+	~Clibwmpplayer();
+
+	VOID PlayVideo(const char *pVideoDir, const char *pNamePrefix = NULL, int nVideoCount = 1);
+
+	VOID PlayLocalAudio(const char *pAudioNames);
+
+	VOID PlayLocalVideo(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight);
+
+	VOID Close();
+
+	BOOL checkIsPlay(HANDLE &curThread);
+
+	BOOL checkIsStop();
+
+	VOID PlayMedia(CWmpPlayConfig &config);
+
+	VOID SetVolume(int nVolume);
+
+	VOID PlaySalesRecordVideo(int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoDir, const char *pNamePrefix = NULL, int nVideoCount = 1);
+
+	VOID PlayVideoNotice(int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoDir, const char *pFileName);
+private:
+	libwmpplayer_impl *m_pImpl;
+};

+ 168 - 0
Other/win/libwmpplayer/libwmpplayer.rc

@@ -0,0 +1,168 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#ifndef APSTUDIO_INVOKED
+#include "targetver.h"
+#endif
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// 中文(简体,中国) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+#pragma code_page(936)
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#ifndef APSTUDIO_INVOKED\r\n"
+    "#include ""targetver.h""\r\n"
+    "#endif\r\n"
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
+    "#define _AFX_NO_OLE_RESOURCES\r\n"
+    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
+    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
+    "\r\n"
+    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"
+    "LANGUAGE 4, 2\r\n"
+    "#pragma code_page(936)\r\n"
+    "#include ""res\\libwmpplayer.rc2""  // 非 Microsoft Visual C++ 编辑的资源\r\n"
+    "#include ""l.CHS\\afxres.rc""      // 标准组件\r\n"
+    "#endif\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "080403a8"
+        BEGIN
+            VALUE "CompanyName", "TODO: <公司名>"
+            VALUE "FileDescription", "TODO: <文件说明>"
+            VALUE "FileVersion", "1.0.0.1"
+            VALUE "InternalName", "libwmpplayer.dll"
+            VALUE "LegalCopyright", "TODO: (C) <公司名>。保留所有权利。"
+            VALUE "OriginalFilename", "libwmpplayer.dll"
+            VALUE "ProductName", "TODO: <产品名>"
+            VALUE "ProductVersion", "1.0.0.1"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x804, 936
+    END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_DIALOG1 DIALOGEX 0, 0, 273, 151
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_TOPMOST
+CAPTION "音视频播放器"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+    IDD_DIALOG1, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 266
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 144
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_PLAYER              ICON                    "res\\8.ico"
+#endif    // 中文(简体,中国) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#define _AFX_NO_SPLITTER_RESOURCES
+#define _AFX_NO_OLE_RESOURCES
+#define _AFX_NO_TRACKER_RESOURCES
+#define _AFX_NO_PROPERTY_RESOURCES
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+LANGUAGE 4, 2
+#pragma code_page(936)
+#include "res\libwmpplayer.rc2"  // 非 Microsoft Visual C++ 编辑的资源
+#include "l.CHS\afxres.rc"      // 标准组件
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+

binární
Other/win/libwmpplayer/res/8.ico


+ 13 - 0
Other/win/libwmpplayer/res/LibWMPPlayer.rc2

@@ -0,0 +1,13 @@
+//
+// libwmpplayer.RC2 - Microsoft Visual C++ 不会直接编辑的资源
+//
+
+#ifdef APSTUDIO_INVOKED
+#error 此文件不能用 Microsoft Visual C++ 编辑
+#endif //APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+// 在此处添加手动编辑的资源...
+
+/////////////////////////////////////////////////////////////////////////////

+ 19 - 0
Other/win/libwmpplayer/resource.h

@@ -0,0 +1,19 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by libwmpplayer.rc
+//
+#define IDC_EDIT1                       1001
+#define IDD_DIALOG1                     1004
+#define IDC_OCX1                        1005
+#define IDI_PLAYER                      1006
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        1004
+#define _APS_NEXT_COMMAND_VALUE         32771
+#define _APS_NEXT_CONTROL_VALUE         1002
+#define _APS_NEXT_SYMED_VALUE           1000
+#endif
+#endif

+ 7 - 0
Other/win/libwmpplayer/stdafx.cpp

@@ -0,0 +1,7 @@
+// stdafx.cpp : 只包括标准包含文件的源文件
+// libwmpplayer.pch 将作为预编译头
+// stdafx.obj 将包含预编译类型信息
+
+#include "stdafx.h"
+
+

+ 39 - 0
Other/win/libwmpplayer/stdafx.h

@@ -0,0 +1,39 @@
+// stdafx.h : 标准系统包含文件的包含文件,
+// 或是经常使用但不常更改的
+// 特定于项目的包含文件
+
+#pragma once
+
+#ifndef VC_EXTRALEAN
+#define VC_EXTRALEAN            // 从 Windows 头中排除极少使用的资料
+#endif
+
+#include "targetver.h"
+
+#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的
+
+#include <afxwin.h>         // MFC 核心组件和标准组件
+#include <afxext.h>         // MFC 扩展
+
+#ifndef _AFX_NO_OLE_SUPPORT
+#include <afxole.h>         // MFC OLE 类
+#include <afxodlgs.h>       // MFC OLE 对话框类
+#include <afxdisp.h>        // MFC 自动化类
+#endif // _AFX_NO_OLE_SUPPORT
+
+#ifndef _AFX_NO_DB_SUPPORT
+#include <afxdb.h>                      // MFC ODBC 数据库类
+#endif // _AFX_NO_DB_SUPPORT
+
+#ifndef _AFX_NO_DAO_SUPPORT
+#include <afxdao.h>                     // MFC DAO 数据库类
+#endif // _AFX_NO_DAO_SUPPORT
+
+#ifndef _AFX_NO_OLE_SUPPORT
+#include <afxdtctl.h>           // MFC 对 Internet Explorer 4 公共控件的支持
+#endif
+#ifndef _AFX_NO_AFXCMN_SUPPORT
+#include <afxcmn.h>                     // MFC 对 Windows 公共控件的支持
+#endif // _AFX_NO_AFXCMN_SUPPORT
+#include <afxcontrolbars.h>
+#include <afxdisp.h>

+ 26 - 0
Other/win/libwmpplayer/targetver.h

@@ -0,0 +1,26 @@
+
+#pragma once
+
+// 以下宏定义要求的最低平台。要求的最低平台
+// 是具有运行应用程序所需功能的 Windows、Internet Explorer 等产品的
+// 最早版本。通过在指定版本及更低版本的平台上启用所有可用的功能,宏可以
+// 正常工作。
+
+// 如果必须要针对低于以下指定版本的平台,请修改下列定义。
+// 有关不同平台对应值的最新信息,请参考 MSDN。
+#ifndef WINVER                          // 指定要求的最低平台是 Windows Vista。
+#define WINVER 0x0600           // 将此值更改为相应的值,以适用于 Windows 的其他版本。
+#endif
+
+#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。
+#define _WIN32_WINNT 0x0600     // 将此值更改为相应的值,以适用于 Windows 的其他版本。
+#endif
+
+#ifndef _WIN32_WINDOWS          // 指定要求的最低平台是 Windows 98。
+#define _WIN32_WINDOWS 0x0410 // 将此值更改为适当的值,以适用于 Windows Me 或更高版本。
+#endif
+
+#ifndef _WIN32_IE                       // 指定要求的最低平台是 Internet Explorer 7.0。
+#define _WIN32_IE 0x0700        // 将此值更改为相应的值,以适用于 IE 的其他版本。
+#endif
+

+ 43 - 0
ThirdParty/Include/wmpplayer/include/CWMPCdromCollection.h

@@ -0,0 +1,43 @@
+// CWMPCdromCollection.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPCdromCollection
+
+class CWMPCdromCollection : public COleDispatchDriver
+{
+public:
+	CWMPCdromCollection() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPCdromCollection(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPCdromCollection(const CWMPCdromCollection& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	long get_count()
+	{
+		long result;
+		InvokeHelper(0x12d, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH Item(long lIndex)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x12e, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, lIndex);
+		return result;
+	}
+	LPDISPATCH getByDriveSpecifier(LPCTSTR bstrDriveSpecifier)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x12f, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrDriveSpecifier);
+		return result;
+	}
+
+
+};

+ 67 - 0
ThirdParty/Include/wmpplayer/include/CWMPClosedCaption.h

@@ -0,0 +1,67 @@
+// CWMPClosedCaption.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPClosedCaption
+
+class CWMPClosedCaption : public COleDispatchDriver
+{
+public:
+	CWMPClosedCaption() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPClosedCaption(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPClosedCaption(const CWMPClosedCaption& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	CString get_SAMIStyle()
+	{
+		CString result;
+		InvokeHelper(0x3b7, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_SAMIStyle(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3b7, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_SAMILang()
+	{
+		CString result;
+		InvokeHelper(0x3b8, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_SAMILang(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3b8, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_SAMIFileName()
+	{
+		CString result;
+		InvokeHelper(0x3b9, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_SAMIFileName(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3b9, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_captioningId()
+	{
+		CString result;
+		InvokeHelper(0x3ba, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_captioningId(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3ba, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+
+
+};

+ 100 - 0
ThirdParty/Include/wmpplayer/include/CWMPClosedCaption2.h

@@ -0,0 +1,100 @@
+// CWMPClosedCaption2.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPClosedCaption2
+
+class CWMPClosedCaption2 : public COleDispatchDriver
+{
+public:
+	CWMPClosedCaption2() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPClosedCaption2(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPClosedCaption2(const CWMPClosedCaption2& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	CString get_SAMIStyle()
+	{
+		CString result;
+		InvokeHelper(0x3b7, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_SAMIStyle(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3b7, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_SAMILang()
+	{
+		CString result;
+		InvokeHelper(0x3b8, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_SAMILang(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3b8, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_SAMIFileName()
+	{
+		CString result;
+		InvokeHelper(0x3b9, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_SAMIFileName(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3b9, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_captioningId()
+	{
+		CString result;
+		InvokeHelper(0x3ba, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_captioningId(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3ba, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_SAMILangCount()
+	{
+		long result;
+		InvokeHelper(0x3bb, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString getSAMILangName(long nIndex)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x3bc, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, nIndex);
+		return result;
+	}
+	long getSAMILangID(long nIndex)
+	{
+		long result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x3bd, DISPATCH_METHOD, VT_I4, (void*)&result, parms, nIndex);
+		return result;
+	}
+	long get_SAMIStyleCount()
+	{
+		long result;
+		InvokeHelper(0x3be, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString getSAMIStyleName(long nIndex)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x3bf, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, nIndex);
+		return result;
+	}
+
+
+};

+ 102 - 0
ThirdParty/Include/wmpplayer/include/CWMPControls.h

@@ -0,0 +1,102 @@
+// CWMPControls.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPControls
+
+class CWMPControls : public COleDispatchDriver
+{
+public:
+	CWMPControls() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPControls(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPControls(const CWMPControls& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	BOOL get_isAvailable(LPCTSTR bstrItem)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3e, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, bstrItem);
+		return result;
+	}
+	void play()
+	{
+		InvokeHelper(0x33, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void stop()
+	{
+		InvokeHelper(0x34, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void pause()
+	{
+		InvokeHelper(0x35, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void fastForward()
+	{
+		InvokeHelper(0x36, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void fastReverse()
+	{
+		InvokeHelper(0x37, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	double get_currentPosition()
+	{
+		double result;
+		InvokeHelper(0x38, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentPosition(double newValue)
+	{
+		static BYTE parms[] = VTS_R8 ;
+		InvokeHelper(0x38, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_currentPositionString()
+	{
+		CString result;
+		InvokeHelper(0x39, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void next()
+	{
+		InvokeHelper(0x3a, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void previous()
+	{
+		InvokeHelper(0x3b, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	LPDISPATCH get_currentItem()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x3c, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentItem(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x3c, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_currentMarker()
+	{
+		long result;
+		InvokeHelper(0x3d, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentMarker(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x3d, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	void playItem(LPDISPATCH pIWMPMedia)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x3f, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pIWMPMedia);
+	}
+
+
+};

+ 107 - 0
ThirdParty/Include/wmpplayer/include/CWMPControls2.h

@@ -0,0 +1,107 @@
+// CWMPControls2.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPControls2
+
+class CWMPControls2 : public COleDispatchDriver
+{
+public:
+	CWMPControls2() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPControls2(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPControls2(const CWMPControls2& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	BOOL get_isAvailable(LPCTSTR bstrItem)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3e, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, bstrItem);
+		return result;
+	}
+	void play()
+	{
+		InvokeHelper(0x33, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void stop()
+	{
+		InvokeHelper(0x34, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void pause()
+	{
+		InvokeHelper(0x35, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void fastForward()
+	{
+		InvokeHelper(0x36, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void fastReverse()
+	{
+		InvokeHelper(0x37, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	double get_currentPosition()
+	{
+		double result;
+		InvokeHelper(0x38, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentPosition(double newValue)
+	{
+		static BYTE parms[] = VTS_R8 ;
+		InvokeHelper(0x38, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_currentPositionString()
+	{
+		CString result;
+		InvokeHelper(0x39, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void next()
+	{
+		InvokeHelper(0x3a, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void previous()
+	{
+		InvokeHelper(0x3b, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	LPDISPATCH get_currentItem()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x3c, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentItem(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x3c, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_currentMarker()
+	{
+		long result;
+		InvokeHelper(0x3d, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentMarker(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x3d, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	void playItem(LPDISPATCH pIWMPMedia)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x3f, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pIWMPMedia);
+	}
+	void step(long lStep)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x40, DISPATCH_METHOD, VT_EMPTY, NULL, parms, lStep);
+	}
+
+
+};

+ 167 - 0
ThirdParty/Include/wmpplayer/include/CWMPControls3.h

@@ -0,0 +1,167 @@
+// CWMPControls3.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPControls3
+
+class CWMPControls3 : public COleDispatchDriver
+{
+public:
+	CWMPControls3() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPControls3(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPControls3(const CWMPControls3& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	BOOL get_isAvailable(LPCTSTR bstrItem)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3e, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, bstrItem);
+		return result;
+	}
+	void play()
+	{
+		InvokeHelper(0x33, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void stop()
+	{
+		InvokeHelper(0x34, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void pause()
+	{
+		InvokeHelper(0x35, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void fastForward()
+	{
+		InvokeHelper(0x36, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void fastReverse()
+	{
+		InvokeHelper(0x37, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	double get_currentPosition()
+	{
+		double result;
+		InvokeHelper(0x38, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentPosition(double newValue)
+	{
+		static BYTE parms[] = VTS_R8 ;
+		InvokeHelper(0x38, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_currentPositionString()
+	{
+		CString result;
+		InvokeHelper(0x39, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void next()
+	{
+		InvokeHelper(0x3a, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void previous()
+	{
+		InvokeHelper(0x3b, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	LPDISPATCH get_currentItem()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x3c, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentItem(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x3c, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_currentMarker()
+	{
+		long result;
+		InvokeHelper(0x3d, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentMarker(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x3d, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	void playItem(LPDISPATCH pIWMPMedia)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x3f, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pIWMPMedia);
+	}
+	void step(long lStep)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x40, DISPATCH_METHOD, VT_EMPTY, NULL, parms, lStep);
+	}
+	long get_audioLanguageCount()
+	{
+		long result;
+		InvokeHelper(0x41, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long getAudioLanguageID(long lIndex)
+	{
+		long result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x42, DISPATCH_METHOD, VT_I4, (void*)&result, parms, lIndex);
+		return result;
+	}
+	CString getAudioLanguageDescription(long lIndex)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x43, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lIndex);
+		return result;
+	}
+	long get_currentAudioLanguage()
+	{
+		long result;
+		InvokeHelper(0x44, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentAudioLanguage(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x44, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_currentAudioLanguageIndex()
+	{
+		long result;
+		InvokeHelper(0x45, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentAudioLanguageIndex(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x45, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString getLanguageName(long lLangID)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x46, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lLangID);
+		return result;
+	}
+	CString get_currentPositionTimecode()
+	{
+		CString result;
+		InvokeHelper(0x47, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentPositionTimecode(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x47, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+
+
+};

+ 52 - 0
ThirdParty/Include/wmpplayer/include/CWMPDVD.h

@@ -0,0 +1,52 @@
+// CWMPDVD.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPDVD
+
+class CWMPDVD : public COleDispatchDriver
+{
+public:
+	CWMPDVD() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPDVD(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPDVD(const CWMPDVD& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	BOOL get_isAvailable(LPCTSTR bstrItem)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x3e9, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, bstrItem);
+		return result;
+	}
+	CString get_domain()
+	{
+		CString result;
+		InvokeHelper(0x3ea, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void topMenu()
+	{
+		InvokeHelper(0x3eb, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void titleMenu()
+	{
+		InvokeHelper(0x3ec, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void back()
+	{
+		InvokeHelper(0x3ed, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void resume()
+	{
+		InvokeHelper(0x3ee, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+
+
+};

+ 44 - 0
ThirdParty/Include/wmpplayer/include/CWMPError.h

@@ -0,0 +1,44 @@
+// CWMPError.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPError
+
+class CWMPError : public COleDispatchDriver
+{
+public:
+	CWMPError() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPError(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPError(const CWMPError& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	void clearErrorQueue()
+	{
+		InvokeHelper(0x353, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	long get_errorCount()
+	{
+		long result;
+		InvokeHelper(0x354, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_Item(long dwIndex)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x355, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, parms, dwIndex);
+		return result;
+	}
+	void webHelp()
+	{
+		InvokeHelper(0x356, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+
+
+};

+ 53 - 0
ThirdParty/Include/wmpplayer/include/CWMPErrorItem.h

@@ -0,0 +1,53 @@
+// CWMPErrorItem.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPErrorItem
+
+class CWMPErrorItem : public COleDispatchDriver
+{
+public:
+	CWMPErrorItem() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPErrorItem(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPErrorItem(const CWMPErrorItem& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	long get_errorCode()
+	{
+		long result;
+		InvokeHelper(0x385, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString get_errorDescription()
+	{
+		CString result;
+		InvokeHelper(0x386, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	VARIANT get_errorContext()
+	{
+		VARIANT result;
+		InvokeHelper(0x387, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);
+		return result;
+	}
+	long get_remedy()
+	{
+		long result;
+		InvokeHelper(0x388, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString get_customUrl()
+	{
+		CString result;
+		InvokeHelper(0x389, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+
+
+};

+ 59 - 0
ThirdParty/Include/wmpplayer/include/CWMPErrorItem2.h

@@ -0,0 +1,59 @@
+// CWMPErrorItem2.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPErrorItem2
+
+class CWMPErrorItem2 : public COleDispatchDriver
+{
+public:
+	CWMPErrorItem2() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPErrorItem2(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPErrorItem2(const CWMPErrorItem2& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	long get_errorCode()
+	{
+		long result;
+		InvokeHelper(0x385, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString get_errorDescription()
+	{
+		CString result;
+		InvokeHelper(0x386, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	VARIANT get_errorContext()
+	{
+		VARIANT result;
+		InvokeHelper(0x387, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);
+		return result;
+	}
+	long get_remedy()
+	{
+		long result;
+		InvokeHelper(0x388, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString get_customUrl()
+	{
+		CString result;
+		InvokeHelper(0x389, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	long get_condition()
+	{
+		long result;
+		InvokeHelper(0x38a, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+
+
+};

+ 137 - 0
ThirdParty/Include/wmpplayer/include/CWMPMedia.h

@@ -0,0 +1,137 @@
+// CWMPMedia.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMedia
+
+class CWMPMedia : public COleDispatchDriver
+{
+public:
+	CWMPMedia() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPMedia(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPMedia(const CWMPMedia& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	BOOL get_isIdentical(LPDISPATCH pIWMPMedia)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x2fb, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, pIWMPMedia);
+		return result;
+	}
+	CString get_sourceURL()
+	{
+		CString result;
+		InvokeHelper(0x2ef, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	CString get_name()
+	{
+		CString result;
+		InvokeHelper(0x2fc, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_name(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2fc, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_imageSourceWidth()
+	{
+		long result;
+		InvokeHelper(0x2f0, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_imageSourceHeight()
+	{
+		long result;
+		InvokeHelper(0x2f1, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_markerCount()
+	{
+		long result;
+		InvokeHelper(0x2f2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	double getMarkerTime(long MarkerNum)
+	{
+		double result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2f3, DISPATCH_METHOD, VT_R8, (void*)&result, parms, MarkerNum);
+		return result;
+	}
+	CString getMarkerName(long MarkerNum)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2f4, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, MarkerNum);
+		return result;
+	}
+	double get_duration()
+	{
+		double result;
+		InvokeHelper(0x2f5, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL);
+		return result;
+	}
+	CString get_durationString()
+	{
+		CString result;
+		InvokeHelper(0x2f6, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	long get_attributeCount()
+	{
+		long result;
+		InvokeHelper(0x2f7, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString getAttributeName(long lIndex)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2f8, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lIndex);
+		return result;
+	}
+	CString getItemInfo(LPCTSTR bstrItemName)
+	{
+		CString result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2f9, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, bstrItemName);
+		return result;
+	}
+	void setItemInfo(LPCTSTR bstrItemName, LPCTSTR bstrVal)
+	{
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x2fa, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrItemName, bstrVal);
+	}
+	CString getItemInfoByAtom(long lAtom)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2fd, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lAtom);
+		return result;
+	}
+	BOOL isMemberOf(LPDISPATCH pPlaylist)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x2fe, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, pPlaylist);
+		return result;
+	}
+	BOOL isReadOnlyItem(LPCTSTR bstrItemName)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2ff, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, bstrItemName);
+		return result;
+	}
+
+
+};

+ 143 - 0
ThirdParty/Include/wmpplayer/include/CWMPMedia2.h

@@ -0,0 +1,143 @@
+// CWMPMedia2.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMedia2
+
+class CWMPMedia2 : public COleDispatchDriver
+{
+public:
+	CWMPMedia2() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPMedia2(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPMedia2(const CWMPMedia2& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	BOOL get_isIdentical(LPDISPATCH pIWMPMedia)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x2fb, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, pIWMPMedia);
+		return result;
+	}
+	CString get_sourceURL()
+	{
+		CString result;
+		InvokeHelper(0x2ef, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	CString get_name()
+	{
+		CString result;
+		InvokeHelper(0x2fc, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_name(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2fc, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_imageSourceWidth()
+	{
+		long result;
+		InvokeHelper(0x2f0, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_imageSourceHeight()
+	{
+		long result;
+		InvokeHelper(0x2f1, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_markerCount()
+	{
+		long result;
+		InvokeHelper(0x2f2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	double getMarkerTime(long MarkerNum)
+	{
+		double result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2f3, DISPATCH_METHOD, VT_R8, (void*)&result, parms, MarkerNum);
+		return result;
+	}
+	CString getMarkerName(long MarkerNum)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2f4, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, MarkerNum);
+		return result;
+	}
+	double get_duration()
+	{
+		double result;
+		InvokeHelper(0x2f5, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL);
+		return result;
+	}
+	CString get_durationString()
+	{
+		CString result;
+		InvokeHelper(0x2f6, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	long get_attributeCount()
+	{
+		long result;
+		InvokeHelper(0x2f7, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString getAttributeName(long lIndex)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2f8, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lIndex);
+		return result;
+	}
+	CString getItemInfo(LPCTSTR bstrItemName)
+	{
+		CString result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2f9, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, bstrItemName);
+		return result;
+	}
+	void setItemInfo(LPCTSTR bstrItemName, LPCTSTR bstrVal)
+	{
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x2fa, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrItemName, bstrVal);
+	}
+	CString getItemInfoByAtom(long lAtom)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2fd, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lAtom);
+		return result;
+	}
+	BOOL isMemberOf(LPDISPATCH pPlaylist)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x2fe, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, pPlaylist);
+		return result;
+	}
+	BOOL isReadOnlyItem(LPCTSTR bstrItemName)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2ff, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, bstrItemName);
+		return result;
+	}
+	LPDISPATCH get_Error()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x300, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+
+
+};

+ 157 - 0
ThirdParty/Include/wmpplayer/include/CWMPMedia3.h

@@ -0,0 +1,157 @@
+// CWMPMedia3.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMedia3
+
+class CWMPMedia3 : public COleDispatchDriver
+{
+public:
+	CWMPMedia3() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPMedia3(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPMedia3(const CWMPMedia3& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	BOOL get_isIdentical(LPDISPATCH pIWMPMedia)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x2fb, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, pIWMPMedia);
+		return result;
+	}
+	CString get_sourceURL()
+	{
+		CString result;
+		InvokeHelper(0x2ef, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	CString get_name()
+	{
+		CString result;
+		InvokeHelper(0x2fc, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_name(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2fc, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_imageSourceWidth()
+	{
+		long result;
+		InvokeHelper(0x2f0, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_imageSourceHeight()
+	{
+		long result;
+		InvokeHelper(0x2f1, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_markerCount()
+	{
+		long result;
+		InvokeHelper(0x2f2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	double getMarkerTime(long MarkerNum)
+	{
+		double result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2f3, DISPATCH_METHOD, VT_R8, (void*)&result, parms, MarkerNum);
+		return result;
+	}
+	CString getMarkerName(long MarkerNum)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2f4, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, MarkerNum);
+		return result;
+	}
+	double get_duration()
+	{
+		double result;
+		InvokeHelper(0x2f5, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL);
+		return result;
+	}
+	CString get_durationString()
+	{
+		CString result;
+		InvokeHelper(0x2f6, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	long get_attributeCount()
+	{
+		long result;
+		InvokeHelper(0x2f7, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString getAttributeName(long lIndex)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2f8, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lIndex);
+		return result;
+	}
+	CString getItemInfo(LPCTSTR bstrItemName)
+	{
+		CString result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2f9, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, bstrItemName);
+		return result;
+	}
+	void setItemInfo(LPCTSTR bstrItemName, LPCTSTR bstrVal)
+	{
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x2fa, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrItemName, bstrVal);
+	}
+	CString getItemInfoByAtom(long lAtom)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x2fd, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lAtom);
+		return result;
+	}
+	BOOL isMemberOf(LPDISPATCH pPlaylist)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x2fe, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, pPlaylist);
+		return result;
+	}
+	BOOL isReadOnlyItem(LPCTSTR bstrItemName)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2ff, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, bstrItemName);
+		return result;
+	}
+	LPDISPATCH get_Error()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x300, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	long getAttributeCountByType(LPCTSTR bstrType, LPCTSTR bstrLanguage)
+	{
+		long result;
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x301, DISPATCH_METHOD, VT_I4, (void*)&result, parms, bstrType, bstrLanguage);
+		return result;
+	}
+	VARIANT getItemInfoByType(LPCTSTR bstrType, LPCTSTR bstrLanguage, long lIndex)
+	{
+		VARIANT result;
+		static BYTE parms[] = VTS_BSTR VTS_BSTR VTS_I4 ;
+		InvokeHelper(0x302, DISPATCH_METHOD, VT_VARIANT, (void*)&result, parms, bstrType, bstrLanguage, lIndex);
+		return result;
+	}
+
+
+};

+ 102 - 0
ThirdParty/Include/wmpplayer/include/CWMPMediaCollection.h

@@ -0,0 +1,102 @@
+// CWMPMediaCollection.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMediaCollection
+
+class CWMPMediaCollection : public COleDispatchDriver
+{
+public:
+	CWMPMediaCollection() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPMediaCollection(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPMediaCollection(const CWMPMediaCollection& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	LPDISPATCH add(LPCTSTR bstrURL)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c4, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrURL);
+		return result;
+	}
+	LPDISPATCH getAll()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x1c5, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH getByName(LPCTSTR bstrName)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c6, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrName);
+		return result;
+	}
+	LPDISPATCH getByGenre(LPCTSTR bstrGenre)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c7, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrGenre);
+		return result;
+	}
+	LPDISPATCH getByAuthor(LPCTSTR bstrAuthor)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c8, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAuthor);
+		return result;
+	}
+	LPDISPATCH getByAlbum(LPCTSTR bstrAlbum)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c9, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAlbum);
+		return result;
+	}
+	LPDISPATCH getByAttribute(LPCTSTR bstrAttribute, LPCTSTR bstrValue)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x1ca, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAttribute, bstrValue);
+		return result;
+	}
+	void remove(LPDISPATCH pItem, BOOL varfDeleteFile)
+	{
+		static BYTE parms[] = VTS_DISPATCH VTS_BOOL ;
+		InvokeHelper(0x1cb, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pItem, varfDeleteFile);
+	}
+	LPDISPATCH getAttributeStringCollection(LPCTSTR bstrAttribute, LPCTSTR bstrMediaType)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x1cd, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAttribute, bstrMediaType);
+		return result;
+	}
+	long getMediaAtom(LPCTSTR bstrItemName)
+	{
+		long result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1d6, DISPATCH_METHOD, VT_I4, (void*)&result, parms, bstrItemName);
+		return result;
+	}
+	void setDeleted(LPDISPATCH pItem, BOOL varfIsDeleted)
+	{
+		static BYTE parms[] = VTS_DISPATCH VTS_BOOL ;
+		InvokeHelper(0x1d7, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pItem, varfIsDeleted);
+	}
+	BOOL isDeleted(LPDISPATCH pItem)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x1d8, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, pItem);
+		return result;
+	}
+
+
+};

+ 129 - 0
ThirdParty/Include/wmpplayer/include/CWMPMediaCollection2.h

@@ -0,0 +1,129 @@
+// CWMPMediaCollection2.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMediaCollection2
+
+class CWMPMediaCollection2 : public COleDispatchDriver
+{
+public:
+	CWMPMediaCollection2() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPMediaCollection2(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPMediaCollection2(const CWMPMediaCollection2& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	LPDISPATCH add(LPCTSTR bstrURL)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c4, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrURL);
+		return result;
+	}
+	LPDISPATCH getAll()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x1c5, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH getByName(LPCTSTR bstrName)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c6, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrName);
+		return result;
+	}
+	LPDISPATCH getByGenre(LPCTSTR bstrGenre)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c7, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrGenre);
+		return result;
+	}
+	LPDISPATCH getByAuthor(LPCTSTR bstrAuthor)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c8, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAuthor);
+		return result;
+	}
+	LPDISPATCH getByAlbum(LPCTSTR bstrAlbum)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c9, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAlbum);
+		return result;
+	}
+	LPDISPATCH getByAttribute(LPCTSTR bstrAttribute, LPCTSTR bstrValue)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x1ca, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAttribute, bstrValue);
+		return result;
+	}
+	void remove(LPDISPATCH pItem, BOOL varfDeleteFile)
+	{
+		static BYTE parms[] = VTS_DISPATCH VTS_BOOL ;
+		InvokeHelper(0x1cb, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pItem, varfDeleteFile);
+	}
+	LPDISPATCH getAttributeStringCollection(LPCTSTR bstrAttribute, LPCTSTR bstrMediaType)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x1cd, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAttribute, bstrMediaType);
+		return result;
+	}
+	long getMediaAtom(LPCTSTR bstrItemName)
+	{
+		long result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1d6, DISPATCH_METHOD, VT_I4, (void*)&result, parms, bstrItemName);
+		return result;
+	}
+	void setDeleted(LPDISPATCH pItem, BOOL varfIsDeleted)
+	{
+		static BYTE parms[] = VTS_DISPATCH VTS_BOOL ;
+		InvokeHelper(0x1d7, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pItem, varfIsDeleted);
+	}
+	BOOL isDeleted(LPDISPATCH pItem)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x1d8, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, pItem);
+		return result;
+	}
+	LPDISPATCH createQuery()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x579, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH getPlaylistByQuery(LPDISPATCH pQuery, LPCTSTR bstrMediaType, LPCTSTR bstrSortAttribute, BOOL fSortAscending)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_DISPATCH VTS_BSTR VTS_BSTR VTS_BOOL ;
+		InvokeHelper(0x57a, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, pQuery, bstrMediaType, bstrSortAttribute, fSortAscending);
+		return result;
+	}
+	LPDISPATCH getStringCollectionByQuery(LPCTSTR bstrAttribute, LPDISPATCH pQuery, LPCTSTR bstrMediaType, LPCTSTR bstrSortAttribute, BOOL fSortAscending)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR VTS_DISPATCH VTS_BSTR VTS_BSTR VTS_BOOL ;
+		InvokeHelper(0x57b, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAttribute, pQuery, bstrMediaType, bstrSortAttribute, fSortAscending);
+		return result;
+	}
+	LPDISPATCH getByAttributeAndMediaType(LPCTSTR bstrAttribute, LPCTSTR bstrValue, LPCTSTR bstrMediaType)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x57c, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrAttribute, bstrValue, bstrMediaType);
+		return result;
+	}
+
+
+};

+ 47 - 0
ThirdParty/Include/wmpplayer/include/CWMPMetadataPicture.h

@@ -0,0 +1,47 @@
+// CWMPMetadataPicture.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMetadataPicture
+
+class CWMPMetadataPicture : public COleDispatchDriver
+{
+public:
+	CWMPMetadataPicture() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPMetadataPicture(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPMetadataPicture(const CWMPMetadataPicture& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	CString get_mimeType()
+	{
+		CString result;
+		InvokeHelper(0x41b, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	CString get_pictureType()
+	{
+		CString result;
+		InvokeHelper(0x41c, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	CString get_Description()
+	{
+		CString result;
+		InvokeHelper(0x41d, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	CString get_URL()
+	{
+		CString result;
+		InvokeHelper(0x41e, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+
+
+};

+ 35 - 0
ThirdParty/Include/wmpplayer/include/CWMPMetadataText.h

@@ -0,0 +1,35 @@
+// CWMPMetadataText.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMetadataText
+
+class CWMPMetadataText : public COleDispatchDriver
+{
+public:
+	CWMPMetadataText() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPMetadataText(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPMetadataText(const CWMPMetadataText& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	CString get_Description()
+	{
+		CString result;
+		InvokeHelper(0x420, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	CString get_text()
+	{
+		CString result;
+		InvokeHelper(0x41f, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+
+
+};

+ 187 - 0
ThirdParty/Include/wmpplayer/include/CWMPPlayer.h

@@ -0,0 +1,187 @@
+// CWMPPlayer.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlayer
+
+class CWMPPlayer : public COleDispatchDriver
+{
+public:
+	CWMPPlayer() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPPlayer(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPPlayer(const CWMPPlayer& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	void close()
+	{
+		InvokeHelper(0x3, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	CString get_URL()
+	{
+		CString result;
+		InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_URL(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_openState()
+	{
+		long result;
+		InvokeHelper(0x2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_playState()
+	{
+		long result;
+		InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_controls()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x4, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_settings()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x5, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_currentMedia()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x6, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentMedia(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	LPDISPATCH get_mediaCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x8, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_playlistCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	CString get_versionInfo()
+	{
+		CString result;
+		InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void launchURL(LPCTSTR bstrURL)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0xc, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrURL);
+	}
+	LPDISPATCH get_network()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x7, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_currentPlaylist()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentPlaylist(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	LPDISPATCH get_cdromCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xe, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_closedCaption()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xf, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_isOnline()
+	{
+		BOOL result;
+		InvokeHelper(0x10, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_Error()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x11, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	CString get_status()
+	{
+		CString result;
+		InvokeHelper(0x12, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_enabled()
+	{
+		BOOL result;
+		InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enabled(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x13, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_fullScreen()
+	{
+		BOOL result;
+		InvokeHelper(0x15, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_fullScreen(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x15, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_enableContextMenu()
+	{
+		BOOL result;
+		InvokeHelper(0x16, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enableContextMenu(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x16, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	void put_uiMode(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x17, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_uiMode()
+	{
+		CString result;
+		InvokeHelper(0x17, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+
+
+};

+ 209 - 0
ThirdParty/Include/wmpplayer/include/CWMPPlayer2.h

@@ -0,0 +1,209 @@
+// CWMPPlayer2.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlayer2
+
+class CWMPPlayer2 : public COleDispatchDriver
+{
+public:
+	CWMPPlayer2() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPPlayer2(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPPlayer2(const CWMPPlayer2& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	void close()
+	{
+		InvokeHelper(0x3, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	CString get_URL()
+	{
+		CString result;
+		InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_URL(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_openState()
+	{
+		long result;
+		InvokeHelper(0x2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_playState()
+	{
+		long result;
+		InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_controls()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x4, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_settings()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x5, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_currentMedia()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x6, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentMedia(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	LPDISPATCH get_mediaCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x8, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_playlistCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	CString get_versionInfo()
+	{
+		CString result;
+		InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void launchURL(LPCTSTR bstrURL)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0xc, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrURL);
+	}
+	LPDISPATCH get_network()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x7, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_currentPlaylist()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentPlaylist(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	LPDISPATCH get_cdromCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xe, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_closedCaption()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xf, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_isOnline()
+	{
+		BOOL result;
+		InvokeHelper(0x10, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_Error()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x11, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	CString get_status()
+	{
+		CString result;
+		InvokeHelper(0x12, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_enabled()
+	{
+		BOOL result;
+		InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enabled(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x13, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_fullScreen()
+	{
+		BOOL result;
+		InvokeHelper(0x15, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_fullScreen(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x15, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_enableContextMenu()
+	{
+		BOOL result;
+		InvokeHelper(0x16, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enableContextMenu(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x16, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	void put_uiMode(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x17, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_uiMode()
+	{
+		CString result;
+		InvokeHelper(0x17, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_stretchToFit()
+	{
+		BOOL result;
+		InvokeHelper(0x18, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_stretchToFit(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x18, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_windowlessVideo()
+	{
+		BOOL result;
+		InvokeHelper(0x19, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_windowlessVideo(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x19, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+
+
+};

+ 215 - 0
ThirdParty/Include/wmpplayer/include/CWMPPlayer3.h

@@ -0,0 +1,215 @@
+// CWMPPlayer3.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlayer3
+
+class CWMPPlayer3 : public COleDispatchDriver
+{
+public:
+	CWMPPlayer3() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPPlayer3(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPPlayer3(const CWMPPlayer3& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	void close()
+	{
+		InvokeHelper(0x3, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	CString get_URL()
+	{
+		CString result;
+		InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_URL(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_openState()
+	{
+		long result;
+		InvokeHelper(0x2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_playState()
+	{
+		long result;
+		InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_controls()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x4, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_settings()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x5, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_currentMedia()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x6, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentMedia(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	LPDISPATCH get_mediaCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x8, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_playlistCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	CString get_versionInfo()
+	{
+		CString result;
+		InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void launchURL(LPCTSTR bstrURL)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0xc, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrURL);
+	}
+	LPDISPATCH get_network()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x7, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_currentPlaylist()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentPlaylist(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	LPDISPATCH get_cdromCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xe, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_closedCaption()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xf, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_isOnline()
+	{
+		BOOL result;
+		InvokeHelper(0x10, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_Error()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x11, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	CString get_status()
+	{
+		CString result;
+		InvokeHelper(0x12, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_dvd()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x28, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_enabled()
+	{
+		BOOL result;
+		InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enabled(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x13, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_fullScreen()
+	{
+		BOOL result;
+		InvokeHelper(0x15, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_fullScreen(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x15, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_enableContextMenu()
+	{
+		BOOL result;
+		InvokeHelper(0x16, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enableContextMenu(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x16, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	void put_uiMode(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x17, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_uiMode()
+	{
+		CString result;
+		InvokeHelper(0x17, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_stretchToFit()
+	{
+		BOOL result;
+		InvokeHelper(0x18, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_stretchToFit(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x18, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_windowlessVideo()
+	{
+		BOOL result;
+		InvokeHelper(0x19, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_windowlessVideo(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x19, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+
+
+};

+ 265 - 0
ThirdParty/Include/wmpplayer/include/CWMPPlayer4.h

@@ -0,0 +1,265 @@
+// CWMPPlayer4.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlayer4
+
+class CWMPPlayer4 : public CWnd
+{
+protected:
+	DECLARE_DYNCREATE(CWMPPlayer4)
+public:
+	CLSID const& GetClsid()
+	{
+		static CLSID const clsid
+			= { 0x6BF52A52, 0x394A, 0x11D3, { 0xB1, 0x53, 0x0, 0xC0, 0x4F, 0x79, 0xFA, 0xA6 } };
+		return clsid;
+	}
+	virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
+						const RECT& rect, CWnd* pParentWnd, UINT nID, 
+						CCreateContext* pContext = NULL)
+	{ 
+		return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); 
+	}
+
+    BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, 
+				UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,
+				BSTR bstrLicKey = NULL)
+	{ 
+		return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
+		pPersist, bStorage, bstrLicKey); 
+	}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	void close()
+	{
+		InvokeHelper(0x3, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	CString get_URL()
+	{
+		CString result;
+		InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_URL(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_openState()
+	{
+		long result;
+		InvokeHelper(0x2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	long get_playState()
+	{
+		long result;
+		InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_controls()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x4, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_settings()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x5, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_currentMedia()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x6, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentMedia(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	LPDISPATCH get_mediaCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x8, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_playlistCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	CString get_versionInfo()
+	{
+		CString result;
+		InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void launchURL(LPCTSTR bstrURL)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0xc, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrURL);
+	}
+	LPDISPATCH get_network()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x7, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_currentPlaylist()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void put_currentPlaylist(LPDISPATCH newValue)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	LPDISPATCH get_cdromCollection()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xe, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_closedCaption()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0xf, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_isOnline()
+	{
+		BOOL result;
+		InvokeHelper(0x10, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_Error()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x11, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	CString get_status()
+	{
+		CString result;
+		InvokeHelper(0x12, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_dvd()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x28, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH newPlaylist(LPCTSTR bstrName, LPCTSTR bstrURL)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x29, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrName, bstrURL);
+		return result;
+	}
+	LPDISPATCH newMedia(LPCTSTR bstrURL)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x2a, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrURL);
+		return result;
+	}
+	BOOL get_enabled()
+	{
+		BOOL result;
+		InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enabled(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x13, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_fullScreen()
+	{
+		BOOL result;
+		InvokeHelper(0x15, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_fullScreen(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x15, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_enableContextMenu()
+	{
+		BOOL result;
+		InvokeHelper(0x16, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enableContextMenu(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x16, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	void put_uiMode(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x17, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_uiMode()
+	{
+		CString result;
+		InvokeHelper(0x17, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	BOOL get_stretchToFit()
+	{
+		BOOL result;
+		InvokeHelper(0x18, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_stretchToFit(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x18, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_windowlessVideo()
+	{
+		BOOL result;
+		InvokeHelper(0x19, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_windowlessVideo(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x19, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_isRemote()
+	{
+		BOOL result;
+		InvokeHelper(0x1a, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH get_playerApplication()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x1b, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	void openPlayer(LPCTSTR bstrURL)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x1c, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrURL);
+	}
+
+
+};

+ 103 - 0
ThirdParty/Include/wmpplayer/include/CWMPPlaylist.h

@@ -0,0 +1,103 @@
+// CWMPPlaylist.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlaylist
+
+class CWMPPlaylist : public COleDispatchDriver
+{
+public:
+	CWMPPlaylist() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPPlaylist(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPPlaylist(const CWMPPlaylist& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	long get_count()
+	{
+		long result;
+		InvokeHelper(0xc9, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString get_name()
+	{
+		CString result;
+		InvokeHelper(0xca, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_name(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0xca, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_attributeCount()
+	{
+		long result;
+		InvokeHelper(0xd2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString get_attributeName(long lIndex)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0xd3, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, parms, lIndex);
+		return result;
+	}
+	LPDISPATCH get_Item(long lIndex)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0xd4, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, parms, lIndex);
+		return result;
+	}
+	CString getItemInfo(LPCTSTR bstrName)
+	{
+		CString result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0xcb, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, bstrName);
+		return result;
+	}
+	void setItemInfo(LPCTSTR bstrName, LPCTSTR bstrValue)
+	{
+		static BYTE parms[] = VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0xcc, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrName, bstrValue);
+	}
+	BOOL get_isIdentical(LPDISPATCH pIWMPPlaylist)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0xd5, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, pIWMPPlaylist);
+		return result;
+	}
+	void clear()
+	{
+		InvokeHelper(0xcd, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
+	}
+	void insertItem(long lIndex, LPDISPATCH pIWMPMedia)
+	{
+		static BYTE parms[] = VTS_I4 VTS_DISPATCH ;
+		InvokeHelper(0xce, DISPATCH_METHOD, VT_EMPTY, NULL, parms, lIndex, pIWMPMedia);
+	}
+	void appendItem(LPDISPATCH pIWMPMedia)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0xcf, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pIWMPMedia);
+	}
+	void removeItem(LPDISPATCH pIWMPMedia)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0xd0, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pIWMPMedia);
+	}
+	void moveItem(long lIndexOld, long lIndexNew)
+	{
+		static BYTE parms[] = VTS_I4 VTS_I4 ;
+		InvokeHelper(0xd1, DISPATCH_METHOD, VT_EMPTY, NULL, parms, lIndexOld, lIndexNew);
+	}
+
+
+};

+ 67 - 0
ThirdParty/Include/wmpplayer/include/CWMPPlaylistCollection.h

@@ -0,0 +1,67 @@
+// CWMPPlaylistCollection.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlaylistCollection
+
+class CWMPPlaylistCollection : public COleDispatchDriver
+{
+public:
+	CWMPPlaylistCollection() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPPlaylistCollection(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPPlaylistCollection(const CWMPPlaylistCollection& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	LPDISPATCH newPlaylist(LPCTSTR bstrName)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x228, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrName);
+		return result;
+	}
+	LPDISPATCH getAll()
+	{
+		LPDISPATCH result;
+		InvokeHelper(0x229, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, NULL);
+		return result;
+	}
+	LPDISPATCH getByName(LPCTSTR bstrName)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x22a, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, bstrName);
+		return result;
+	}
+	void remove(LPDISPATCH pItem)
+	{
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x22c, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pItem);
+	}
+	void setDeleted(LPDISPATCH pItem, BOOL varfIsDeleted)
+	{
+		static BYTE parms[] = VTS_DISPATCH VTS_BOOL ;
+		InvokeHelper(0x230, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pItem, varfIsDeleted);
+	}
+	BOOL isDeleted(LPDISPATCH pItem)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x231, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, pItem);
+		return result;
+	}
+	LPDISPATCH importPlaylist(LPDISPATCH pItem)
+	{
+		LPDISPATCH result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x232, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, pItem);
+		return result;
+	}
+
+
+};

+ 152 - 0
ThirdParty/Include/wmpplayer/include/CWMPSettings.h

@@ -0,0 +1,152 @@
+// CWMPSettings.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPSettings
+
+class CWMPSettings : public COleDispatchDriver
+{
+public:
+	CWMPSettings() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPSettings(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPSettings(const CWMPSettings& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	BOOL get_isAvailable(LPCTSTR bstrItem)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x71, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, bstrItem);
+		return result;
+	}
+	BOOL get_autoStart()
+	{
+		BOOL result;
+		InvokeHelper(0x65, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_autoStart(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x65, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_baseURL()
+	{
+		CString result;
+		InvokeHelper(0x6c, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_baseURL(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x6c, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_defaultFrame()
+	{
+		CString result;
+		InvokeHelper(0x6d, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_defaultFrame(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x6d, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_invokeURLs()
+	{
+		BOOL result;
+		InvokeHelper(0x67, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_invokeURLs(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x67, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_mute()
+	{
+		BOOL result;
+		InvokeHelper(0x68, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_mute(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x68, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_playCount()
+	{
+		long result;
+		InvokeHelper(0x69, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_playCount(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x69, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	double get_rate()
+	{
+		double result;
+		InvokeHelper(0x6a, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL);
+		return result;
+	}
+	void put_rate(double newValue)
+	{
+		static BYTE parms[] = VTS_R8 ;
+		InvokeHelper(0x6a, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_balance()
+	{
+		long result;
+		InvokeHelper(0x66, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_balance(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x66, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_volume()
+	{
+		long result;
+		InvokeHelper(0x6b, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_volume(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x6b, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL getMode(LPCTSTR bstrMode)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x6e, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, bstrMode);
+		return result;
+	}
+	void setMode(LPCTSTR bstrMode, BOOL varfMode)
+	{
+		static BYTE parms[] = VTS_BSTR VTS_BOOL ;
+		InvokeHelper(0x6f, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrMode, varfMode);
+	}
+	BOOL get_enableErrorDialogs()
+	{
+		BOOL result;
+		InvokeHelper(0x70, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enableErrorDialogs(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x70, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+
+
+};

+ 171 - 0
ThirdParty/Include/wmpplayer/include/CWMPSettings2.h

@@ -0,0 +1,171 @@
+// CWMPSettings2.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPSettings2
+
+class CWMPSettings2 : public COleDispatchDriver
+{
+public:
+	CWMPSettings2() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPSettings2(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPSettings2(const CWMPSettings2& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	BOOL get_isAvailable(LPCTSTR bstrItem)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x71, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, parms, bstrItem);
+		return result;
+	}
+	BOOL get_autoStart()
+	{
+		BOOL result;
+		InvokeHelper(0x65, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_autoStart(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x65, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_baseURL()
+	{
+		CString result;
+		InvokeHelper(0x6c, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_baseURL(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x6c, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	CString get_defaultFrame()
+	{
+		CString result;
+		InvokeHelper(0x6d, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	void put_defaultFrame(LPCTSTR newValue)
+	{
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x6d, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_invokeURLs()
+	{
+		BOOL result;
+		InvokeHelper(0x67, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_invokeURLs(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x67, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL get_mute()
+	{
+		BOOL result;
+		InvokeHelper(0x68, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_mute(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x68, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_playCount()
+	{
+		long result;
+		InvokeHelper(0x69, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_playCount(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x69, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	double get_rate()
+	{
+		double result;
+		InvokeHelper(0x6a, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL);
+		return result;
+	}
+	void put_rate(double newValue)
+	{
+		static BYTE parms[] = VTS_R8 ;
+		InvokeHelper(0x6a, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_balance()
+	{
+		long result;
+		InvokeHelper(0x66, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_balance(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x66, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_volume()
+	{
+		long result;
+		InvokeHelper(0x6b, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	void put_volume(long newValue)
+	{
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x6b, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	BOOL getMode(LPCTSTR bstrMode)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x6e, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, bstrMode);
+		return result;
+	}
+	void setMode(LPCTSTR bstrMode, BOOL varfMode)
+	{
+		static BYTE parms[] = VTS_BSTR VTS_BOOL ;
+		InvokeHelper(0x6f, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrMode, varfMode);
+	}
+	BOOL get_enableErrorDialogs()
+	{
+		BOOL result;
+		InvokeHelper(0x70, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
+		return result;
+	}
+	void put_enableErrorDialogs(BOOL newValue)
+	{
+		static BYTE parms[] = VTS_BOOL ;
+		InvokeHelper(0x70, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
+	}
+	long get_defaultAudioLanguage()
+	{
+		long result;
+		InvokeHelper(0x72, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString get_mediaAccessRights()
+	{
+		CString result;
+		InvokeHelper(0x73, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
+		return result;
+	}
+	BOOL requestMediaAccessRights(LPCTSTR bstrDesiredAccess)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_BSTR ;
+		InvokeHelper(0x74, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, bstrDesiredAccess);
+		return result;
+	}
+
+
+};

+ 64 - 0
ThirdParty/Include/wmpplayer/include/CWMPStringCollection2.h

@@ -0,0 +1,64 @@
+// CWMPStringCollection2.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPStringCollection2
+
+class CWMPStringCollection2 : public COleDispatchDriver
+{
+public:
+	CWMPStringCollection2() {}		// 调用 COleDispatchDriver 默认构造函数
+	CWMPStringCollection2(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
+	CWMPStringCollection2(const CWMPStringCollection2& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
+
+// 特性
+public:
+
+// 操作
+public:
+
+	long get_count()
+	{
+		long result;
+		InvokeHelper(0x191, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
+		return result;
+	}
+	CString Item(long lIndex)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 ;
+		InvokeHelper(0x192, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lIndex);
+		return result;
+	}
+	BOOL isIdentical(LPDISPATCH pIWMPStringCollection2)
+	{
+		BOOL result;
+		static BYTE parms[] = VTS_DISPATCH ;
+		InvokeHelper(0x5ab, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, pIWMPStringCollection2);
+		return result;
+	}
+	CString getItemInfo(long lCollectionIndex, LPCTSTR bstrItemName)
+	{
+		CString result;
+		static BYTE parms[] = VTS_I4 VTS_BSTR ;
+		InvokeHelper(0x5ac, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, lCollectionIndex, bstrItemName);
+		return result;
+	}
+	long getAttributeCountByType(long lCollectionIndex, LPCTSTR bstrType, LPCTSTR bstrLanguage)
+	{
+		long result;
+		static BYTE parms[] = VTS_I4 VTS_BSTR VTS_BSTR ;
+		InvokeHelper(0x5ad, DISPATCH_METHOD, VT_I4, (void*)&result, parms, lCollectionIndex, bstrType, bstrLanguage);
+		return result;
+	}
+	VARIANT getItemInfoByType(long lCollectionIndex, LPCTSTR bstrType, LPCTSTR bstrLanguage, long lAttributeIndex)
+	{
+		VARIANT result;
+		static BYTE parms[] = VTS_I4 VTS_BSTR VTS_BSTR VTS_I4 ;
+		InvokeHelper(0x5ae, DISPATCH_METHOD, VT_VARIANT, (void*)&result, parms, lCollectionIndex, bstrType, bstrLanguage, lAttributeIndex);
+		return result;
+	}
+
+
+};

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPCdromCollection.cpp

@@ -0,0 +1,12 @@
+// CWMPCdromCollection.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPCdromCollection.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPCdromCollection
+
+// CWMPCdromCollection 属性
+
+// CWMPCdromCollection 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPClosedCaption.cpp

@@ -0,0 +1,12 @@
+// CWMPClosedCaption.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPClosedCaption.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPClosedCaption
+
+// CWMPClosedCaption 属性
+
+// CWMPClosedCaption 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPClosedCaption2.cpp

@@ -0,0 +1,12 @@
+// CWMPClosedCaption2.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPClosedCaption2.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPClosedCaption2
+
+// CWMPClosedCaption2 属性
+
+// CWMPClosedCaption2 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPControls.cpp

@@ -0,0 +1,12 @@
+// CWMPControls.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPControls.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPControls
+
+// CWMPControls 属性
+
+// CWMPControls 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPControls2.cpp

@@ -0,0 +1,12 @@
+// CWMPControls2.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPControls2.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPControls2
+
+// CWMPControls2 属性
+
+// CWMPControls2 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPControls3.cpp

@@ -0,0 +1,12 @@
+// CWMPControls3.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPControls3.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPControls3
+
+// CWMPControls3 属性
+
+// CWMPControls3 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPDVD.cpp

@@ -0,0 +1,12 @@
+// CWMPDVD.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPDVD.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPDVD
+
+// CWMPDVD 属性
+
+// CWMPDVD 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPError.cpp

@@ -0,0 +1,12 @@
+// CWMPError.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPError.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPError
+
+// CWMPError 属性
+
+// CWMPError 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPErrorItem.cpp

@@ -0,0 +1,12 @@
+// CWMPErrorItem.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPErrorItem.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPErrorItem
+
+// CWMPErrorItem 属性
+
+// CWMPErrorItem 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPErrorItem2.cpp

@@ -0,0 +1,12 @@
+// CWMPErrorItem2.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPErrorItem2.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPErrorItem2
+
+// CWMPErrorItem2 属性
+
+// CWMPErrorItem2 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPMedia.cpp

@@ -0,0 +1,12 @@
+// CWMPMedia.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPMedia.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMedia
+
+// CWMPMedia 属性
+
+// CWMPMedia 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPMedia2.cpp

@@ -0,0 +1,12 @@
+// CWMPMedia2.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPMedia2.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMedia2
+
+// CWMPMedia2 属性
+
+// CWMPMedia2 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPMedia3.cpp

@@ -0,0 +1,12 @@
+// CWMPMedia3.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPMedia3.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMedia3
+
+// CWMPMedia3 属性
+
+// CWMPMedia3 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPMediaCollection.cpp

@@ -0,0 +1,12 @@
+// CWMPMediaCollection.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPMediaCollection.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMediaCollection
+
+// CWMPMediaCollection 属性
+
+// CWMPMediaCollection 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPMediaCollection2.cpp

@@ -0,0 +1,12 @@
+// CWMPMediaCollection2.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPMediaCollection2.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMediaCollection2
+
+// CWMPMediaCollection2 属性
+
+// CWMPMediaCollection2 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPMetadataPicture.cpp

@@ -0,0 +1,12 @@
+// CWMPMetadataPicture.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPMetadataPicture.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMetadataPicture
+
+// CWMPMetadataPicture 属性
+
+// CWMPMetadataPicture 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPMetadataText.cpp

@@ -0,0 +1,12 @@
+// CWMPMetadataText.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPMetadataText.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPMetadataText
+
+// CWMPMetadataText 属性
+
+// CWMPMetadataText 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPPlayer.cpp

@@ -0,0 +1,12 @@
+// CWMPPlayer.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPPlayer.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlayer
+
+// CWMPPlayer 属性
+
+// CWMPPlayer 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPPlayer2.cpp

@@ -0,0 +1,12 @@
+// CWMPPlayer2.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPPlayer2.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlayer2
+
+// CWMPPlayer2 属性
+
+// CWMPPlayer2 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPPlayer3.cpp

@@ -0,0 +1,12 @@
+// CWMPPlayer3.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPPlayer3.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlayer3
+
+// CWMPPlayer3 属性
+
+// CWMPPlayer3 操作

+ 14 - 0
ThirdParty/Include/wmpplayer/src/CWMPPlayer4.cpp

@@ -0,0 +1,14 @@
+// CWMPPlayer4.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPPlayer4.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlayer4
+
+IMPLEMENT_DYNCREATE(CWMPPlayer4, CWnd)
+
+// CWMPPlayer4 属性
+
+// CWMPPlayer4 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPPlaylist.cpp

@@ -0,0 +1,12 @@
+// CWMPPlaylist.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPPlaylist.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlaylist
+
+// CWMPPlaylist 属性
+
+// CWMPPlaylist 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPPlaylistCollection.cpp

@@ -0,0 +1,12 @@
+// CWMPPlaylistCollection.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPPlaylistCollection.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPPlaylistCollection
+
+// CWMPPlaylistCollection 属性
+
+// CWMPPlaylistCollection 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPSettings.cpp

@@ -0,0 +1,12 @@
+// CWMPSettings.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPSettings.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPSettings
+
+// CWMPSettings 属性
+
+// CWMPSettings 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPSettings2.cpp

@@ -0,0 +1,12 @@
+// CWMPSettings2.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPSettings2.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPSettings2
+
+// CWMPSettings2 属性
+
+// CWMPSettings2 操作

+ 12 - 0
ThirdParty/Include/wmpplayer/src/CWMPStringCollection2.cpp

@@ -0,0 +1,12 @@
+// CWMPStringCollection2.cpp : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的定义
+
+
+#include "stdafx.h"
+#include "CWMPStringCollection2.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CWMPStringCollection2
+
+// CWMPStringCollection2 属性
+
+// CWMPStringCollection2 操作