Simpler VideoPlayer unter Verwendung des MS-MediaPlayers

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Simpler VideoPlayer unter Verwendung des MS-MediaPlayers

Beitrag 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)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
inc.
Beiträge: 348
Registriert: 27.10.2004 12:25

Beitrag 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.
Hier gibts die OOP Option für PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
inc.
Beiträge: 348
Registriert: 27.10.2004 12:25

Beitrag 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.
Hier gibts die OOP Option für PureBasic.
Benutzeravatar
inc.
Beiträge: 348
Registriert: 27.10.2004 12:25

Beitrag von inc. »

GetSpecialFolder(#CSIDL_MYVIDEO)

ist das nötig? Könnte ich im OpenFileRequester jenen Parameter nicht als "" übergeben?
Hier gibts die OOP Option für PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag 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
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten