Seite 1 von 1

Simpler VideoPlayer unter Verwendung des MS-MediaPlayers

Verfasst: 26.08.2006 13:49
von ts-soft
Soll jetzt keine fertige Anwendung sein, sondern nur als Anregung und
Beispiel, wie man COM nutzen kann. Ausserdem möchte ich damit auch
gleich auf den hervorragenden OLE/COM Interface generator von Stefan
Moebius aufmerksam machen:
http://www.purebasic.fr/english/viewtopic.php?t=23370
PS: Alle unbenutzen Interfaces etc. hab ich entfernt

Code: Alles auswählen

; Simpler Fullscreen Video Player
; basiert auf Beispiel von Stefan Moebius
; Interface generiert mit OLE/COM Interface generator
; by Stefam Moebius
; http://www.purebasic.fr/english/viewtopic.php?t=23370
;
; und ein paar Zeilen von mir :)
; zur freien Verwendung

; Beenden mit ESC (bei Videoende autom.)
; linker Mausclick Pause/PauseOff
; Video kann als parameter übergeben werden,
; ansonsten erscheint Dateiauswahldialog

; UNICODE-Support

EnableExplicit

; wir benötigen nur das eine Interface
Interface IMediaPlayer ; IMediaPlayer Interface 
  QueryInterface(riid.l,ppvObj.l) 
  AddRef() 
  Release() 
  GetTypeInfoCount(pctinfo.l) 
  GetTypeInfo(itinfo.l,lcid.l,pptinfo.l) 
  GetIDsOfNames(riid.l,rgszNames.l,cNames.l,lcid.l,rgdispid.l) 
  Invoke(dispidMember.l,riid.l,lcid.l,wFlags.l,pdispparams.l,pvarResult.l,pexcepinfo.l,puArgErr.l) 
  get_CurrentPosition(dispidMember.l) 
  put_CurrentPosition(dispidMember.d) 
  get_Duration(dispidMember.l) 
  get_ImageSourceWidth(dispidMember.l) 
  get_ImageSourceHeight(dispidMember.l) 
  get_MarkerCount(dispidMember.l) 
  get_CanScan(dispidMember.l) 
  get_CanSeek(dispidMember.l) 
  get_CanSeekToMarkers(dispidMember.l) 
  get_CurrentMarker(dispidMember.l) 
  put_CurrentMarker(dispidMember.l) 
  get_FileName(dispidMember.l) 
  put_FileName(dispidMember.p-bstr) 
  get_SourceLink(dispidMember.l) 
  get_CreationDate(dispidMember.l) 
  get_ErrorCorrection(dispidMember.l) 
  get_Bandwidth(dispidMember.l) 
  get_SourceProtocol(dispidMember.l) 
  get_ReceivedPackets(dispidMember.l) 
  get_RecoveredPackets(dispidMember.l) 
  get_LostPackets(dispidMember.l) 
  get_ReceptionQuality(dispidMember.l) 
  get_BufferingCount(dispidMember.l) 
  get_IsBroadcast(dispidMember.l) 
  get_BufferingProgress(dispidMember.l) 
  get_ChannelName(dispidMember.l) 
  get_ChannelDescription(dispidMember.l) 
  get_ChannelURL(dispidMember.l) 
  get_ContactAddress(dispidMember.l) 
  get_ContactPhone(dispidMember.l) 
  get_ContactEmail(dispidMember.l) 
  get_BufferingTime(dispidMember.l) 
  put_BufferingTime(dispidMember.d) 
  get_AutoStart(dispidMember.l) 
  put_AutoStart(dispidMember.w) 
  get_AutoRewind(dispidMember.l) 
  put_AutoRewind(dispidMember.w) 
  get_Rate(dispidMember.l) 
  put_Rate(dispidMember.d) 
  get_SendKeyboardEvents(dispidMember.l) 
  put_SendKeyboardEvents(dispidMember.w) 
  get_SendMouseClickEvents(dispidMember.l) 
  put_SendMouseClickEvents(dispidMember.w) 
  get_SendMouseMoveEvents(dispidMember.l) 
  put_SendMouseMoveEvents(dispidMember.w) 
  get_PlayCount(dispidMember.l) 
  put_PlayCount(dispidMember.l) 
  get_ClickToPlay(dispidMember.l) 
  put_ClickToPlay(dispidMember.w) 
  get_AllowScan(dispidMember.l) 
  put_AllowScan(dispidMember.w) 
  get_EnableContextMenu(dispidMember.l) 
  put_EnableContextMenu(dispidMember.w) 
  get_CursorType(dispidMember.l) 
  put_CursorType(dispidMember.l) 
  get_CodecCount(dispidMember.l) 
  get_AllowChangeDisplaySize(dispidMember.l) 
  put_AllowChangeDisplaySize(dispidMember.w) 
  get_IsDurationValid(dispidMember.l) 
  get_OpenState(dispidMember.l) 
  get_SendOpenStateChangeEvents(dispidMember.l) 
  put_SendOpenStateChangeEvents(dispidMember.w) 
  get_SendWarningEvents(dispidMember.l) 
  put_SendWarningEvents(dispidMember.w) 
  get_SendErrorEvents(dispidMember.l) 
  put_SendErrorEvents(dispidMember.w) 
  get_PlayState(dispidMember.l) 
  get_SendPlayStateChangeEvents(dispidMember.l) 
  put_SendPlayStateChangeEvents(dispidMember.w) 
  get_DisplaySize(dispidMember.l) 
  put_DisplaySize(dispidMember.l) 
  get_InvokeURLs(dispidMember.l) 
  put_InvokeURLs(dispidMember.w) 
  get_BaseURL(dispidMember.l) 
  put_BaseURL(dispidMember.p-bstr) 
  get_DefaultFrame(dispidMember.l) 
  put_DefaultFrame(dispidMember.p-bstr) 
  get_HasError(dispidMember.l) 
  get_ErrorDescription(dispidMember.l) 
  get_ErrorCode(dispidMember.l) 
  get_AnimationAtStart(dispidMember.l) 
  put_AnimationAtStart(dispidMember.w) 
  get_TransparentAtStart(dispidMember.l) 
  put_TransparentAtStart(dispidMember.w) 
  get_Volume(dispidMember.l) 
  put_Volume(dispidMember.l) 
  get_Balance(dispidMember.l) 
  put_Balance(dispidMember.l) 
  get_ReadyState(dispidMember.l) 
  get_SelectionStart(dispidMember.l) 
  put_SelectionStart(dispidMember.d) 
  get_SelectionEnd(dispidMember.l) 
  put_SelectionEnd(dispidMember.d) 
  get_ShowDisplay(dispidMember.l) 
  put_ShowDisplay(dispidMember.w) 
  get_ShowControls(dispidMember.l) 
  put_ShowControls(dispidMember.w) 
  get_ShowPositionControls(dispidMember.l) 
  put_ShowPositionControls(dispidMember.w) 
  get_ShowTracker(dispidMember.l) 
  put_ShowTracker(dispidMember.w) 
  get_EnablePositionControls(dispidMember.l) 
  put_EnablePositionControls(dispidMember.w) 
  get_EnableTracker(dispidMember.l) 
  put_EnableTracker(dispidMember.w) 
  get_Enabled(dispidMember.l) 
  put_Enabled(dispidMember.w) 
  get_DisplayForeColor(dispidMember.l) 
  put_DisplayForeColor(dispidMember.l) 
  get_DisplayBackColor(dispidMember.l) 
  put_DisplayBackColor(dispidMember.l) 
  get_DisplayMode(dispidMember.l) 
  put_DisplayMode(dispidMember.l) 
  get_VideoBorder3D(dispidMember.l) 
  put_VideoBorder3D(dispidMember.w) 
  get_VideoBorderWidth(dispidMember.l) 
  put_VideoBorderWidth(dispidMember.l) 
  get_VideoBorderColor(dispidMember.l) 
  put_VideoBorderColor(dispidMember.l) 
  get_ShowGotoBar(dispidMember.l) 
  put_ShowGotoBar(dispidMember.w) 
  get_ShowStatusBar(dispidMember.l) 
  put_ShowStatusBar(dispidMember.w) 
  get_ShowCaptioning(dispidMember.l) 
  put_ShowCaptioning(dispidMember.w) 
  get_ShowAudioControls(dispidMember.l) 
  put_ShowAudioControls(dispidMember.w) 
  get_CaptioningID(dispidMember.l) 
  put_CaptioningID(dispidMember.p-bstr) 
  get_Mute(dispidMember.l) 
  put_Mute(dispidMember.w) 
  get_CanPreview(dispidMember.l) 
  get_PreviewMode(dispidMember.l) 
  put_PreviewMode(dispidMember.w) 
  get_HasMultipleItems(dispidMember.l) 
  get_Language(dispidMember.l) 
  put_Language(dispidMember.l) 
  get_AudioStream(dispidMember.l) 
  put_AudioStream(dispidMember.l) 
  get_SAMIStyle(dispidMember.l) 
  put_SAMIStyle(dispidMember.p-bstr) 
  get_SAMILang(dispidMember.l) 
  put_SAMILang(dispidMember.p-bstr) 
  get_SAMIFileName(dispidMember.l) 
  put_SAMIFileName(dispidMember.p-bstr) 
  get_StreamCount(dispidMember.l) 
  get_ClientId(dispidMember.l) 
  get_ConnectionSpeed(dispidMember.l) 
  get_AutoSize(dispidMember.l) 
  put_AutoSize(dispidMember.w) 
  get_EnableFullScreenControls(dispidMember.l) 
  put_EnableFullScreenControls(dispidMember.w) 
  get_ActiveMovie(dispidMember.l) 
  get_NSPlay(dispidMember.l) 
  get_WindowlessVideo(dispidMember.l) 
  put_WindowlessVideo(dispidMember.w) 
  Play() 
  Stop() 
  Pause() 
  GetMarkerTime(MarkerNum.l) 
  GetMarkerName(MarkerNum.l) 
  AboutBox() 
  GetCodecInstalled(CodecNum.l) 
  GetCodecDescription(CodecNum.l) 
  GetCodecURL(CodecNum.l) 
  GetMoreInfoURL(MoreInfoType.l) 
  GetMediaInfoString(MediaInfoType.l) 
  Cancel() 
  Open(bstrFileName.p-bstr) 
  IsSoundCardEnabled() 
  Next() 
  Previous() 
  StreamSelect(StreamNum.l) 
  FastForward() 
  FastReverse() 
  GetStreamName(StreamNum.l) 
  GetStreamGroup(StreamNum.l) 
  GetStreamSelected(StreamNum.l) 
EndInterface 


Import "atl.lib"
  AtlAxWinInit()
  AtlAxCreateControl(lpszName.p-bstr,hWnd.l,*pStream.IStream,*ppUnkContainer.IUnknown)
  AtlAxGetControl(hWnd.l,*pp.IUnknown) 
EndImport

Import "shell32.lib"
  CompilerIf #PB_Compiler_Unicode
    SHGetSpecialFolderPath_(hwndOwner.l, lpszPath.s, nFolder.l, fCreate.l) As "_SHGetSpecialFolderPathW@16"
  CompilerElse
    SHGetSpecialFolderPath_(hwndOwner.l, lpszPath.s, nFolder.l, fCreate.l) As "_SHGetSpecialFolderPathA@16"
  CompilerEndIf
EndImport

Procedure.s GetSpecialFolder(Folder.l)
  Protected Path.s = Space(#MAX_PATH)
  If SHGetSpecialFolderPath_(#NUL, Path, Folder, #NUL)
    If Right(Path, 1) <> "\" : Path + "\" : EndIf
    ProcedureReturn Path
  EndIf
EndProcedure

Define.s File
Define.IMediaPlayer *mp
Define.d dur, pos

File = ProgramParameter()
If FileSize(File) <= 0 Or File = ""
  File = OpenFileRequester("Small MediaPlayer", GetSpecialFolder(#CSIDL_MYVIDEO) + "*.wmv", "*.*", 0)
  If Not File : End : EndIf
EndIf

CoInitialize_(0) 

AtlAxWinInit() 

#Flags=#PB_Window_Invisible|#PB_Window_BorderLess

ExamineDesktops()

If OpenWindow(0, #PB_Ignore, 0, DesktopWidth(0), DesktopHeight(0),"Simple MediaPlayer, written in PB", #Flags) = #False : End : EndIf

AtlAxCreateControl("MediaPlayer.MediaPlayer.1", WindowID(0), 0, 0) 
AtlAxGetControl(WindowID(0),@*mp.IMediaPlayer) 

*mp\put_AnimationAtStart(#False)
*mp\put_EnableContextMenu(#False)  
*mp\put_ShowControls(#False) 
*mp\put_FileName(File)

*mp\get_Duration(@dur)

HideWindow(0, #False)

Repeat
  Select WaitWindowEvent(100)
    Case #PB_Event_CloseWindow
      Break
    Default
      *mp\get_CurrentPosition(@pos)
      If pos = dur : Break : EndIf
      If GetAsyncKeyState_(#VK_ESCAPE) : Break : EndIf
  EndSelect
ForEver

*mp\Release()
CloseWindow(0)

Verfasst: 26.08.2006 15:17
von inc.
I get an unresolved symbol of "_SHGetSpecialFolderPathA".

Replacing the shell32.lib from Purebasic with the one included in the PlatformSDK makes it working.

Verfasst: 26.08.2006 15:31
von ts-soft
inc. hat geschrieben:I get an unresolved symbol of "_SHGetSpecialFolderPathA".

Replacing the shell32.lib from Purebasic with the one included in the PlatformSDK makes it working.
Du bist wohl nicht ganz wach, sonst hätteste gemerkt, das hier das
deutschsprachige Board ist :wink:

In PB sind leider mehrere Libs nicht in Ordnung, ich hab bei mir schon viele
ersetzt, so das ich auch garnicht mehr weiß, wo es Probleme gibt.

Danke für den Hinweis :allright:

Verfasst: 26.08.2006 16:10
von ts-soft
Für diejenigen, die Probleme mit der shell32.lib haben und auch keine Ersatzlib:

Code: Alles auswählen

; Simpler Fullscreen Video Player
; basiert auf Beispiel von Stefan Moebius
; Interface generiert mit OLE/COM Interface generator
; by Stefam Moebius
; http://www.purebasic.fr/english/viewtopic.php?t=23370
;
; und ein paar Zeilen von mir :)
; zur freien Verwendung

; Beenden mit ESC (bei Videoende autom.)
; linker Mausclick Pause/PauseOff
; Video kann als parameter übergeben werden,
; ansonsten erscheint Dateiauswahldialog

; UNICODE-Support

EnableExplicit

; wir benötigen nur das eine Interface
Interface IMediaPlayer ; IMediaPlayer Interface 
  QueryInterface(riid.l,ppvObj.l) 
  AddRef() 
  Release() 
  GetTypeInfoCount(pctinfo.l) 
  GetTypeInfo(itinfo.l,lcid.l,pptinfo.l) 
  GetIDsOfNames(riid.l,rgszNames.l,cNames.l,lcid.l,rgdispid.l) 
  Invoke(dispidMember.l,riid.l,lcid.l,wFlags.l,pdispparams.l,pvarResult.l,pexcepinfo.l,puArgErr.l) 
  get_CurrentPosition(dispidMember.l) 
  put_CurrentPosition(dispidMember.d) 
  get_Duration(dispidMember.l) 
  get_ImageSourceWidth(dispidMember.l) 
  get_ImageSourceHeight(dispidMember.l) 
  get_MarkerCount(dispidMember.l) 
  get_CanScan(dispidMember.l) 
  get_CanSeek(dispidMember.l) 
  get_CanSeekToMarkers(dispidMember.l) 
  get_CurrentMarker(dispidMember.l) 
  put_CurrentMarker(dispidMember.l) 
  get_FileName(dispidMember.l) 
  put_FileName(dispidMember.p-bstr) 
  get_SourceLink(dispidMember.l) 
  get_CreationDate(dispidMember.l) 
  get_ErrorCorrection(dispidMember.l) 
  get_Bandwidth(dispidMember.l) 
  get_SourceProtocol(dispidMember.l) 
  get_ReceivedPackets(dispidMember.l) 
  get_RecoveredPackets(dispidMember.l) 
  get_LostPackets(dispidMember.l) 
  get_ReceptionQuality(dispidMember.l) 
  get_BufferingCount(dispidMember.l) 
  get_IsBroadcast(dispidMember.l) 
  get_BufferingProgress(dispidMember.l) 
  get_ChannelName(dispidMember.l) 
  get_ChannelDescription(dispidMember.l) 
  get_ChannelURL(dispidMember.l) 
  get_ContactAddress(dispidMember.l) 
  get_ContactPhone(dispidMember.l) 
  get_ContactEmail(dispidMember.l) 
  get_BufferingTime(dispidMember.l) 
  put_BufferingTime(dispidMember.d) 
  get_AutoStart(dispidMember.l) 
  put_AutoStart(dispidMember.w) 
  get_AutoRewind(dispidMember.l) 
  put_AutoRewind(dispidMember.w) 
  get_Rate(dispidMember.l) 
  put_Rate(dispidMember.d) 
  get_SendKeyboardEvents(dispidMember.l) 
  put_SendKeyboardEvents(dispidMember.w) 
  get_SendMouseClickEvents(dispidMember.l) 
  put_SendMouseClickEvents(dispidMember.w) 
  get_SendMouseMoveEvents(dispidMember.l) 
  put_SendMouseMoveEvents(dispidMember.w) 
  get_PlayCount(dispidMember.l) 
  put_PlayCount(dispidMember.l) 
  get_ClickToPlay(dispidMember.l) 
  put_ClickToPlay(dispidMember.w) 
  get_AllowScan(dispidMember.l) 
  put_AllowScan(dispidMember.w) 
  get_EnableContextMenu(dispidMember.l) 
  put_EnableContextMenu(dispidMember.w) 
  get_CursorType(dispidMember.l) 
  put_CursorType(dispidMember.l) 
  get_CodecCount(dispidMember.l) 
  get_AllowChangeDisplaySize(dispidMember.l) 
  put_AllowChangeDisplaySize(dispidMember.w) 
  get_IsDurationValid(dispidMember.l) 
  get_OpenState(dispidMember.l) 
  get_SendOpenStateChangeEvents(dispidMember.l) 
  put_SendOpenStateChangeEvents(dispidMember.w) 
  get_SendWarningEvents(dispidMember.l) 
  put_SendWarningEvents(dispidMember.w) 
  get_SendErrorEvents(dispidMember.l) 
  put_SendErrorEvents(dispidMember.w) 
  get_PlayState(dispidMember.l) 
  get_SendPlayStateChangeEvents(dispidMember.l) 
  put_SendPlayStateChangeEvents(dispidMember.w) 
  get_DisplaySize(dispidMember.l) 
  put_DisplaySize(dispidMember.l) 
  get_InvokeURLs(dispidMember.l) 
  put_InvokeURLs(dispidMember.w) 
  get_BaseURL(dispidMember.l) 
  put_BaseURL(dispidMember.p-bstr) 
  get_DefaultFrame(dispidMember.l) 
  put_DefaultFrame(dispidMember.p-bstr) 
  get_HasError(dispidMember.l) 
  get_ErrorDescription(dispidMember.l) 
  get_ErrorCode(dispidMember.l) 
  get_AnimationAtStart(dispidMember.l) 
  put_AnimationAtStart(dispidMember.w) 
  get_TransparentAtStart(dispidMember.l) 
  put_TransparentAtStart(dispidMember.w) 
  get_Volume(dispidMember.l) 
  put_Volume(dispidMember.l) 
  get_Balance(dispidMember.l) 
  put_Balance(dispidMember.l) 
  get_ReadyState(dispidMember.l) 
  get_SelectionStart(dispidMember.l) 
  put_SelectionStart(dispidMember.d) 
  get_SelectionEnd(dispidMember.l) 
  put_SelectionEnd(dispidMember.d) 
  get_ShowDisplay(dispidMember.l) 
  put_ShowDisplay(dispidMember.w) 
  get_ShowControls(dispidMember.l) 
  put_ShowControls(dispidMember.w) 
  get_ShowPositionControls(dispidMember.l) 
  put_ShowPositionControls(dispidMember.w) 
  get_ShowTracker(dispidMember.l) 
  put_ShowTracker(dispidMember.w) 
  get_EnablePositionControls(dispidMember.l) 
  put_EnablePositionControls(dispidMember.w) 
  get_EnableTracker(dispidMember.l) 
  put_EnableTracker(dispidMember.w) 
  get_Enabled(dispidMember.l) 
  put_Enabled(dispidMember.w) 
  get_DisplayForeColor(dispidMember.l) 
  put_DisplayForeColor(dispidMember.l) 
  get_DisplayBackColor(dispidMember.l) 
  put_DisplayBackColor(dispidMember.l) 
  get_DisplayMode(dispidMember.l) 
  put_DisplayMode(dispidMember.l) 
  get_VideoBorder3D(dispidMember.l) 
  put_VideoBorder3D(dispidMember.w) 
  get_VideoBorderWidth(dispidMember.l) 
  put_VideoBorderWidth(dispidMember.l) 
  get_VideoBorderColor(dispidMember.l) 
  put_VideoBorderColor(dispidMember.l) 
  get_ShowGotoBar(dispidMember.l) 
  put_ShowGotoBar(dispidMember.w) 
  get_ShowStatusBar(dispidMember.l) 
  put_ShowStatusBar(dispidMember.w) 
  get_ShowCaptioning(dispidMember.l) 
  put_ShowCaptioning(dispidMember.w) 
  get_ShowAudioControls(dispidMember.l) 
  put_ShowAudioControls(dispidMember.w) 
  get_CaptioningID(dispidMember.l) 
  put_CaptioningID(dispidMember.p-bstr) 
  get_Mute(dispidMember.l) 
  put_Mute(dispidMember.w) 
  get_CanPreview(dispidMember.l) 
  get_PreviewMode(dispidMember.l) 
  put_PreviewMode(dispidMember.w) 
  get_HasMultipleItems(dispidMember.l) 
  get_Language(dispidMember.l) 
  put_Language(dispidMember.l) 
  get_AudioStream(dispidMember.l) 
  put_AudioStream(dispidMember.l) 
  get_SAMIStyle(dispidMember.l) 
  put_SAMIStyle(dispidMember.p-bstr) 
  get_SAMILang(dispidMember.l) 
  put_SAMILang(dispidMember.p-bstr) 
  get_SAMIFileName(dispidMember.l) 
  put_SAMIFileName(dispidMember.p-bstr) 
  get_StreamCount(dispidMember.l) 
  get_ClientId(dispidMember.l) 
  get_ConnectionSpeed(dispidMember.l) 
  get_AutoSize(dispidMember.l) 
  put_AutoSize(dispidMember.w) 
  get_EnableFullScreenControls(dispidMember.l) 
  put_EnableFullScreenControls(dispidMember.w) 
  get_ActiveMovie(dispidMember.l) 
  get_NSPlay(dispidMember.l) 
  get_WindowlessVideo(dispidMember.l) 
  put_WindowlessVideo(dispidMember.w) 
  Play() 
  Stop() 
  Pause() 
  GetMarkerTime(MarkerNum.l) 
  GetMarkerName(MarkerNum.l) 
  AboutBox() 
  GetCodecInstalled(CodecNum.l) 
  GetCodecDescription(CodecNum.l) 
  GetCodecURL(CodecNum.l) 
  GetMoreInfoURL(MoreInfoType.l) 
  GetMediaInfoString(MediaInfoType.l) 
  Cancel() 
  Open(bstrFileName.p-bstr) 
  IsSoundCardEnabled() 
  Next() 
  Previous() 
  StreamSelect(StreamNum.l) 
  FastForward() 
  FastReverse() 
  GetStreamName(StreamNum.l) 
  GetStreamGroup(StreamNum.l) 
  GetStreamSelected(StreamNum.l) 
EndInterface 


Import "atl.lib"
  AtlAxWinInit()
  AtlAxCreateControl(lpszName.p-bstr,hWnd.l,*pStream.IStream,*ppUnkContainer.IUnknown)
  AtlAxGetControl(hWnd.l,*pp.IUnknown) 
EndImport

Procedure.s GetSpecialFolder(CSIDL.l)
  Protected Path.s = Space(#MAX_PATH)
  Protected Library = OpenLibrary(#PB_Any, "shell32.dll")
  If Library
    CompilerIf #PB_Compiler_Unicode
      CallFunctionFast(GetFunction(Library,"SHGetSpecialFolderPathW"), 0, @Path, CSIDL, 0)
    CompilerElse
      CallFunctionFast(GetFunction(Library,"SHGetSpecialFolderPathA"), 0, @Path, CSIDL, 0)
    CompilerEndIf
    CloseLibrary(Library)
  EndIf
  If Right(Path, 1) <> "\" : Path + "\" : EndIf
  ProcedureReturn Path
EndProcedure

Define.s File
Define.IMediaPlayer *mp
Define.d dur, pos

File = ProgramParameter()
If FileSize(File) <= 0 Or File = ""
  File = OpenFileRequester("Small MediaPlayer", GetSpecialFolder(#CSIDL_MYVIDEO) + "*.wmv", "*.*", 0)
  If Not File : End : EndIf
EndIf

CoInitialize_(0) 

AtlAxWinInit() 

#Flags=#PB_Window_Invisible|#PB_Window_BorderLess

ExamineDesktops()

If OpenWindow(0, #PB_Ignore, 0, DesktopWidth(0), DesktopHeight(0),"Simple MediaPlayer, written in PB", #Flags) = #False : End : EndIf

AtlAxCreateControl("MediaPlayer.MediaPlayer.1", WindowID(0), 0, 0) 
AtlAxGetControl(WindowID(0),@*mp.IMediaPlayer) 

*mp\put_AnimationAtStart(#False)
*mp\put_EnableContextMenu(#False)  
*mp\put_ShowControls(#False) 
*mp\put_FileName(File)

*mp\get_Duration(@dur)

HideWindow(0, #False)

Repeat
  Select WaitWindowEvent(100)
    Case #PB_Event_CloseWindow
      Break
    Default
      *mp\get_CurrentPosition(@pos)
      If pos = dur : Break : EndIf
      If GetAsyncKeyState_(#VK_ESCAPE) : Break : EndIf
  EndSelect
ForEver

*mp\Release()
CloseWindow(0)

Verfasst: 26.08.2006 16:50
von inc.
ts-soft hat geschrieben:
inc. hat geschrieben:I get an unresolved symbol of "_SHGetSpecialFolderPathA".

Replacing the shell32.lib from Purebasic with the one included in the PlatformSDK makes it working.
Du bist wohl nicht ganz wach, sonst hätteste gemerkt, das hier das
deutschsprachige Board ist :wink:
:lol:

Kommt davon wenn man beide auf hat.

Verfasst: 28.08.2006 11:29
von inc.
GetSpecialFolder(#CSIDL_MYVIDEO)

ist das nötig? Könnte ich im OpenFileRequester jenen Parameter nicht als "" übergeben?

Verfasst: 28.08.2006 11:57
von ts-soft
inc. hat geschrieben:GetSpecialFolder(#CSIDL_MYVIDEO)

ist das nötig? Könnte ich im OpenFileRequester jenen Parameter nicht als "" übergeben?
Richtig ist es nur, wenn man seine Videos in MyVideo gespeichert hat, bzw.
die Windowsversion das unterstützt. Unter Win9x wirds evtl. dasselbe sein wie ""
Bei mir öffnet er in "E:\Eigene Dateien\Eigene Videos" :wink: wo dann evtl.
diie MovieMaker Beispiele sind :mrgreen:

Verfasst: 06.10.2006 10:11
von Karl
Also fasse ich mal für COM/OLE zusammen:

1. Interface erstellen und mit den Funktionen des COM-Objektes bestücken
2. Mit Hilfe der UserLib ComLib_PB4 ein Objekt erzeugen
3. einige Objektfunktionen aufrufen
4. Objekt zerstören

Das klingt ziemlich einfach?

Gruß Karl

Verfasst: 06.10.2006 17:40
von ts-soft
>> Das klingt ziemlich einfach?
Wenns in VB-Script verwendet wird, muß es einfach sein :D
Problem sind nur die Interfaces und Datentypen, vor allem Variant.

Gruß
Thomas