Re: [Win32Lib] wrap Media control?
- Posted by ghaberek (admin) Feb 09, 2009
- 1046 views
Here's my updated example. It still doesn't load the media, but other methods work fine...
include Win32Lib.ew include wmp.ew without warning object PATH PATH = getenv("PATH") if sequence( PATH ) then PATH = w32split( PATH, ";" ) PATH = w32removeItem( "", PATH ) VOID = setSearchPaths( PATH ) end if constant icoMedia = extractIcon({ "wmp.dll", 7, 1 }) constant kAppName = "Windows Media Player Demo" constant Main = create( Window, kAppName, 0, Default, Default, 640, 480, 0 ) constant File = create( Menu, "&File", Main, 0, 0, 0, 0, 0 ) constant File_Open = create( MenuItem, "&Open...", File, 0, 0, 0, 0, 0 ) constant File_Sep1 = create( MenuItem, "-", File, 0, 0, 0, 0, 0 ) constant File_Exit = create( MenuItem, "E&xit", File, 0, 0, 0, 0, w32AUTOCLOSE ) constant Help = create( Menu, "&Help", Main, 0, 0, 0, 0, 0 ) constant Help_About = create( MenuItem, "&About...", Help, 0, 0, 0, 0, 0 ) constant WMPlayer = create_com_control( WindowsMediaPlayer_clsid_ix, getHandle(Main), 0, 0, 0, 0 ) constant WMControls = ref_com_object( IWMPControls3_clsid_ix, invoke(WMPlayer, {WindowsMediaPlayer_p_controls}, {}, {}, DISPATCH_PROPERTYGET) ) constant WMSettings = ref_com_object( IWMPSettings2_clsid_ix, invoke(WMPlayer, {WindowsMediaPlayer_p_settings}, {}, {}, DISPATCH_PROPERTYGET) ) setIcon( Main, icoMedia ) procedure Main_onOpen( integer pSelf, integer pEvent, sequence pParams ) VOID = invoke( WMSettings, {IWMPSettings2_p_autoStart}, {w32True}, {VT_BOOL}, DISPATCH_PROPERTYPUT ) VOID = invoke( WMPlayer, {WindowsMediaPlayer_p_enabled}, {w32True}, {VT_BOOL}, DISPATCH_PROPERTYPUT ) end procedure setHandler( Main, w32HOpen, routine_id("Main_onOpen") ) procedure Main_onResize( integer pSelf, integer pEvent, sequence pParams ) sequence rect rect = getClientRect( pSelf ) move_obj( WMPlayer, rect[1..4] ) end procedure setHandler( Main, w32HResize, routine_id("Main_onResize") ) procedure Main_onClose( integer pSelf, integer pEvent, sequence pParams ) VOID = invoke( WMPlayer, {WindowsMediaPlayer_m_close}, {}, {}, DISPATCH_METHOD ) release_com() end procedure setHandler( Main, w32HClose, routine_id("Main_onClose") ) procedure File_Open_onClick( integer pSelf, integer pEvent, sequence pParams ) sequence filename, media object pWMPCore, bstr atom WMCore, WMMedia, WMError, WMErrorItem filename = getOpenFileName( Main, "", {"All files (*.*)", "*.*"} ) if length( filename ) = 0 then return end if -- both methods result in #80020004 DISP_E_PARAMNOTFOUND: Parameter not found. -- method #1 bstr = alloc_bstr( filename ) WMMedia = ref_com_object( IWMPMedia_clsid_ix, invoke(WMPlayer, {WindowsMediaPlayer_m_newMedia}, {bstr}, {VT_BSTR}, DISPATCH_METHOD) ) free_bstr( bstr ) media = invoke( WMMedia, {IWMPMedia_p_name}, {}, {}, DISPATCH_PROPERTYGET ) setText( Main, kAppName & " - " & media ) VOID = invoke( WMPlayer, {WindowsMediaPlayer_p_currentMedia}, {WMMedia}, {VT_BYREF}, DISPATCH_PROPERTYPUT ) if is_error( VOID ) then VOID = message_box( sprintf("#%08x", VOID), "Error", MB_ICONERROR ) end if -- method #2 --bstr = alloc_bstr( filename ) --VOID = invoke( WMPlayer, {WindowsMediaPlayer_p_URL}, {bstr}, {VT_BSTR}, DISPATCH_PROPERTYPUT ) --free_bstr( bstr ) end procedure setHandler( File_Open, w32HClick, routine_id("File_Open_onClick") ) procedure Help_About_onClick( integer pSelf, integer pEvent, sequence pParams ) sequence version version = invoke( WMPlayer, {WindowsMediaPlayer_p_versionInfo}, {}, {}, DISPATCH_PROPERTYGET ) VOID = message_box( "Version: " & version, "Windows Media Player Demo", MB_ICONINFORMATION ) end procedure setHandler( Help_About, w32HClick, routine_id("Help_About_onClick") ) WinMain( Main, Normal )
-Greg