Jump to content



Photo

DirectShow


  • Please log in to reply
22 replies to this topic

#1 wolf9228

wolf9228

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 462 posts

Posted 14 August 2012 - 11:20 PM

Video Files (avi|qt|mov|mpg|mpeg|m1v|wmv)
Audio Files (wav|mpa|mp2|mp3|au|aif|aiff|snd)
MIDI Files (mid|midi|rmi)
Image Files (jpg|bmp|gif)
And Other
http://msdn.microsoft.com/en-us/library/windows/desktop/dd375454%28v=vs.85%29.aspx
The Microsoft DirectShow application programming interface (API) is a media-streaming architecture for Microsoft Windows. Using DirectShow, your applications can perform high-quality video and audio playback or capture.
The DirectShow headers, libraries, SDK tools, and samples are available in the Windows SDK.
Note Previous versions of the DirectShow SDK were included in the DirectX SDK. The last version of the DirectX SDK to include DirectShow was DirectX 9.0 SDK Update - (February 2005) Extras. After this version, DirectShow was moved to the Windows SDK. To get the latest version of the DirectShow headers, libraries, and samples, download the Windows SDK.

http://msdn.microsoft.com/en-us/library/windows/desktop/dd390085%28v=vs.85%29.aspx
IGraphBuilder interface
This interface provides methods that enable an application to build a filter graph. The Filter Graph Manager implements this interface.
The IGraphBuilder interface inherits from the IFilterGraph interface. IFilterGraph provides basic operations, such as adding a filter to the graph or connecting two pins. IGraphBuilder adds further methods that construct graphs from partial information. For example, the IGraphBuilder::RenderFile method builds a graph for file playback, given the name of the file. The IGraphBuilder::Render method renders data from an output pin by connecting new filters to the pin.
Using these methods, an application does not need to specify every filter and pin connection in the graph. Instead, the Filter Graph Manager selects filters that are registered on the user's system, adds them to the graph, and connects them. For more information, see Intelligent Con

Posted Image

script Files
Attached File  DirectShow.zip   7.21K   50 downloads

New script Files
Attached File  New_DirectShow.zip   7.6K   202 downloads

New Image Files
http://www.2shared.com/file/iFA7K7T4/New_DirectShow.html

DirectShow.au3
Plain Text         
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include "InterfaceCall.au3" Global $CoInitialize = False , $Ole32 = DllOpen("Ole32.dll"),$MsgGraphArray = 0,$StartGraph = 0 Const $WM_GRAPHNOTIFY = $WM_APP + 1 ;Video Files (avi|qt|mov|mpg|mpeg|m1v|wmv) ;Audio files (wav|mpa|mp2|mp3|au|aif|aiff|snd) ;MIDI Files (mid|midi|rmi) ;Image Files (jpg|bmp|gif) ;And Other Func GUICtrlCreateGraph($Gui,$FileName,$L,$T,$W,$H,$Style = -1,$ExStyle = -1,$Run = True) ;$FileName the name of a media file if $Style = -1 Then $Style = BitOR($WS_CHILD,$WS_CLIPCHILDREN,$WS_CLIPSIBLINGS) if $ExStyle = -1 Then $ExStyle = 0 $StrIID_IGraphBuilder = "{56a868a9-0ad4-11ce-b03a-0020af0ba770}" $StrCLSID_FilterGraph = "{e436ebb3-524f-11ce-9f53-0020af0ba770}" $NewIGraphBuilder = GetObjFromGuid($StrIID_IGraphBuilder,$StrCLSID_FilterGraph) if @error Then Return SetError(1,0,0) if $StartGraph = 0 Then GUIRegisterMsg($WM_GRAPHNOTIFY,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_ERASEBKGND,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_ACTIVATEAPP,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_DEVMODECHANGE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_DISPLAYCHANGE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_PALETTECHANGED,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_PALETTEISCHANGING,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_QUERYNEWPALETTE,"CREATEGRAPH_WM_MSG") $StartGraph = 1 ElseIf $StartGraph = 2 Then GUIRegisterMsg($WM_ERASEBKGND,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_ACTIVATEAPP,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_DEVMODECHANGE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_DISPLAYCHANGE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_PALETTECHANGED,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_PALETTEISCHANGING,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_QUERYNEWPALETTE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_SYSCOLORCHANGE,"CREATEGRAPH_WM_MSG") EndIf Add_Remove_MsgGraphArray($NewIGraphBuilder) ; Add ;-------IGraphBuilder RenderFile Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($NewIGraphBuilder,"long",14,"wstr",$FileName,"ptr",0) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder) Return SetError(2,0,0) EndIf ;-------IGraphBuilder RenderFile Virtual Method Number Is 14;---------------- $IVideoWindow = GetIVideoWindow($NewIGraphBuilder) if @error Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder) Return SetError(3,0,0) EndIf $IMediaEventEx =  GetIMediaEventEx($NewIGraphBuilder) if @error Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow) Return SetError(4,0,0) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",$Gui,"long",$WM_GRAPHNOTIFY,"ptr",0) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(5,0,0) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",$Gui) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(6,0,0) EndIf ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- ;-------IVideoWindow put_MessageDrain Virtual Method Number Is 32;---------------- $Rt = InterfaceCall($IVideoWindow,"long",32,"ptr",$Gui) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(7,0,0) EndIf ;-------IVideoWindow put_MessageDrain Virtual Method Number Is 32;---------------- ;-------IVideoWindow SetWindowPosition Virtual Method Number Is 40;---------------- $Rt = InterfaceCall($IVideoWindow,"long",40,"long",$L,"long",$T,"long",$W,"long",$H) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(8,0,0) EndIf ;-------IVideoWindow SetWindowPosition Virtual Method Number Is 40;---------------- ;-------IVideoWindow put_WindowStyle Virtual Method Number Is 10;---------------- $Rt = InterfaceCall($IVideoWindow,"long",10,"long",$Style) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(9,0,0) EndIf ;-------IVideoWindow put_WindowStyle Virtual Method Number Is 10;---------------- ;-------IVideoWindow put_WindowStyleEx Virtual Method Number Is 12;---------------- $Rt = InterfaceCall($IVideoWindow,"long",12,"long",$ExStyle) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(10,0,0) EndIf ;-------IVideoWindow put_WindowStyleEx Virtual Method Number Is 12;---------------- ;-------IVideoWindow put_AutoShow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IVideoWindow,"long",14,"long",-1) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(11,0,0) EndIf ;-------IVideoWindow put_AutoShow Virtual Method Number Is 14;---------------- if ($Run) Then IMediaControl_Run($NewIGraphBuilder) EndIf CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(0,0,$NewIGraphBuilder) EndFunc Func Re_GUICtrlCreateGraph(ByRef $OutIGraphBuilder,$FileName,$Run = True) $IVideoWindow = GetIVideoWindow($OutIGraphBuilder) if @error Then Return SetError(1,0,False) $IMediaEventEx =  GetIMediaEventEx($OutIGraphBuilder) if @error Then Return SetError(2,0,False) ;-------IVideoWindow get_WindowStyle Virtual Method Number Is 11;---------------- $Rt = InterfaceCall($IVideoWindow,"long",11,"long*",0) if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(3,0,False) EndIf $Style = $Rt[1] ;-------IVideoWindow get_WindowStyle Virtual Method Number Is 11;---------------- ;-------IVideoWindow get_WindowStyleEx Virtual Method Number Is 13;---------------- $Rt = InterfaceCall($IVideoWindow,"long",13,"long*",0) if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(4,0,False) EndIf $ExStyle = $Rt[1] ;-------IVideoWindow get_WindowStyleEx Virtual Method Number Is 13;---------------- ;-------IVideoWindow get_Owner Virtual Method Number Is 31;---------------- $Rt = InterfaceCall($IVideoWindow,"long",31,"ptr*",0) if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(5,0,False) EndIf $Gui = $Rt[1] ;-------IVideoWindow get_Owner Virtual Method Number Is 31;---------------- ;-------IVideoWindow GetRestorePosition Virtual Method Number Is 44;---------------- $Rt = InterfaceCall($IVideoWindow,"long",44,"long*",0,"long*",0,"long*",0,"long*",0) if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(6,0,False) EndIf $L = $Rt[1] $T = $Rt[2] $W = $Rt[3] $H = $Rt[4] ;-------IVideoWindow GetRestorePosition Virtual Method Number Is 44;------------ $RtIGraphBuilder = GUICtrlCreateGraph($Gui,$FileName,$L,$T,$W,$H,$Style,$ExStyle,$Run) if @error Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(7,0,False) Else IMediaControl_Stop($OutIGraphBuilder) Add_Remove_MsgGraphArray($OutIGraphBuilder,2) ; Remove ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",0,"long",0,"ptr",0) ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- ;-------IVideoWindow put_Visible Virtual Method Number Is 20;---------------- $Rt = InterfaceCall($IVideoWindow,"long",20,"long",0) ;-------IVideoWindow put_Visible Virtual Method Number Is 20;---------------- ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($OutIGraphBuilder,$IVideoWindow,$IMediaEventEx) $OutIGraphBuilder = $RtIGraphBuilder EndIf Return SetError(0,0,True) EndFunc Func GUICtrlDeleteGraph(ByRef $OutIGraphBuilder) $IVideoWindow = GetIVideoWindow($OutIGraphBuilder) if @error Then Return SetError(1,0,False) $IMediaEventEx =  GetIMediaEventEx($OutIGraphBuilder) if @error Then Return SetError(2,0,False) IMediaControl_Stop($OutIGraphBuilder) Add_Remove_MsgGraphArray($OutIGraphBuilder,2) ; Remove ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",0,"long",0,"ptr",0) ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- ;-------IVideoWindow put_Visible Virtual Method Number Is 20;---------------- $Rt = InterfaceCall($IVideoWindow,"long",20,"long",0) ;-------IVideoWindow put_Visible Virtual Method Number Is 20;---------------- ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($IVideoWindow,$OutIGraphBuilder,$IMediaEventEx) $OutIGraphBuilder = 0 Return SetError(0,0,True) EndFunc Func CtrlCreateAudio($Gui,$FileName,$Run = True) ;$FileName the name of a media file $StrIID_IGraphBuilder = "{56a868a9-0ad4-11ce-b03a-0020af0ba770}" $StrCLSID_FilterGraph = "{e436ebb3-524f-11ce-9f53-0020af0ba770}" $NewIGraphBuilder = GetObjFromGuid($StrIID_IGraphBuilder,$StrCLSID_FilterGraph) if @error Then Return SetError(1,0,0) if $StartGraph = 0 Then GUIRegisterMsg($WM_GRAPHNOTIFY,"CREATEGRAPH_WM_MSG") $StartGraph = 2 EndIf Add_Remove_MsgGraphArray($NewIGraphBuilder) ; Add ;-------IGraphBuilder RenderFile Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($NewIGraphBuilder,"long",14,"wstr",$FileName,"ptr",0) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder) Return SetError(2,0,0) EndIf ;-------IGraphBuilder RenderFile Virtual Method Number Is 14;---------------- $IMediaEventEx =  GetIMediaEventEx($NewIGraphBuilder) if @error Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder) Return SetError(3,0,0) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",$Gui,"long",$WM_GRAPHNOTIFY,"ptr",0) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IMediaEventEx) Return SetError(4,0,0) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- if ($Run) Then IMediaControl_Run($NewIGraphBuilder) EndIf CtrlGraphRelease($IMediaEventEx) Return SetError(0,0,$NewIGraphBuilder) EndFunc Func CtrlDeleteAudio(ByRef $OutIGraphBuilder) $IMediaEventEx =  GetIMediaEventEx($OutIGraphBuilder) if @error Then Return SetError(1,0,False) $State = IMediaControl_GetState($OutIGraphBuilder) if @error Then Return SetError(2,0,False) if $State = 2 Or $State = 1 Then IMediaControl_Stop($OutIGraphBuilder) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",0,"long",0,"ptr",0) ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- Add_Remove_MsgGraphArray($OutIGraphBuilder,2) ; Remove CtrlGraphRelease($OutIGraphBuilder,$IMediaEventEx) $OutIGraphBuilder = 0 Return SetError(0,0,True) EndFunc Func GetIVideoWindow($IGraphBuilder) $IID_IVideoWindow =  IIDFromString("{56a868b4-0ad4-11ce-b03a-0020af0ba770}") if @error Then Return SetError(1,0,0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- $Rt = InterfaceCall($IGraphBuilder,"long",1,"struct*",$IID_IVideoWindow,"ptr*",0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- if @error Or $Rt[0] <> 0 Then Return SetError(2,0,0) Return SetError(0,0,$Rt[2]) EndFunc Func GetIMediaControl($IGraphBuilder) $IID_IMediaControl = IIDFromString("{56a868b1-0ad4-11ce-b03a-0020af0ba770}") if @error Then Return SetError(1,0,0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- $Rt = InterfaceCall($IGraphBuilder,"long",1,"struct*",$IID_IMediaControl,"ptr*",0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- if @error Or $Rt[0] <> 0 Then Return SetError(2,0,0) Return SetError(0,0,$Rt[2]) EndFunc Func GetIMediaSeeking($IGraphBuilder) $IID_IMediaSeeking = IIDFromString("{36b73880-c2c8-11cf-8b46-00805f6cef60}") if @error Then Return SetError(1,0,0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- $Rt = InterfaceCall($IGraphBuilder,"long",1,"struct*",$IID_IMediaSeeking,"ptr*",0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- if @error Or $Rt[0] <> 0 Then Return SetError(2,0,0) Return SetError(0,0,$Rt[2]) EndFunc Func GetIMediaEventEx($IGraphBuilder) $IID_IMediaEventEx = IIDFromString("{56a868c0-0ad4-11ce-b03a-0020af0ba770}") if @error Then Return SetError(1,0,0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- $Rt = InterfaceCall($IGraphBuilder,"long",1,"struct*",$IID_IMediaEventEx,"ptr*",0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- if @error Or $Rt[0] <> 0 Then Return SetError(2,0,0) Return SetError(0,0,$Rt[2]) EndFunc Func CREATEGRAPH_WM_MSG($hWnd,$Msg,$wParam,$lParam) if IsArray($MsgGraphArray) Then For $i = 0 To UBound($MsgGraphArray) - 1 Switch $Msg Case $WM_GRAPHNOTIFY Local $EC_COMPLETE = 0x01 $IMediaEventEx =  GetIMediaEventEx($MsgGraphArray[$i]) if Not @error Then ;-------IMediaEventEx GetEvent Virtual Method Number Is 9;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",9,"Long*",0,"LONG_PTR*",0,"LONG_PTR*",0,"long",100) ;-------IMediaEventEx GetEvent Virtual Method Number Is 9;---------------- if Not @error And $Rt[0] = 0 Then $lEventCode = $Rt[1] $lParam1 = $Rt[2] $lParam2 = $Rt[3] if  $lEventCode = $EC_COMPLETE Then IMediaControl_StopWhenReady($MsgGraphArray[$i]) EndIf ;-------IMediaEventEx FreeEventParams Virtual Method Number Is 13;---------------- InterfaceCall($IMediaEventEx,"long",13,"Long",$lEventCode,"LONG_PTR",$lParam1,"LONG_PTR",$lParam2) ;-------IMediaEventEx FreeEventParams Virtual Method Number Is 13;---------------- EndIf EndIf Case $WM_ERASEBKGND $IVideoWindow = GetIVideoWindow($MsgGraphArray[$i]) if Not @error Then ;-------IVideoWindow put_BackgroundPalette Virtual Method Number Is 18;---------------- ;The put_BackgroundPalette method specifies whether the video window realizes its palette ;in the background. ;BackgroundPalette [in] ;Specifies whether the video renderer realizes it palette in the background. Must be one of ;the following values: ;Value     Description ;OATRUE = -1    The video renderer realizes the palette in the background. ;OAFALSE = 0    The video renderer does not realize the palette in the background. (Default.) Local $BackgroundPalette = -1 $Rt = InterfaceCall($IVideoWindow,"long",18,"long",$BackgroundPalette) ;-------IVideoWindow put_BackgroundPalette Virtual Method Number Is 18;---------------- CtrlGraphRelease($IVideoWindow) ; No Return EndIf Case Else $IVideoWindow = GetIVideoWindow($MsgGraphArray[$i]) if Not @error Then ;-------IVideoWindow NotifyOwnerMessage Virtual Method Number Is 39;---------------- InterfaceCall($IVideoWindow,"long",39,"ptr",$hWnd,"long",$Msg,"long",$wParam,"long",$lParam) ;-------IVideoWindow NotifyOwnerMessage Virtual Method Number Is 39;---------------- CtrlGraphRelease($IVideoWindow) Return $GUI_RUNDEFMSG EndIf EndSwitch Next EndIf EndFunc Func CREATEGRAPH_ON_EXIT() DllCall($Ole32,"long","CoUninitialize") DllClose($Ole32) EndFunc Func IMediaSeeking_SeekToCurrent($IGraphBuilder) ;-------IMediaSeeking SetPositions Virtual Method Number Is 15;---------------- $IMediaSeeking = GetIMediaSeeking($IGraphBuilder) if @error Then Return SetError(1,0,False) $Rt = InterfaceCall($IMediaSeeking,"long",15,"INT64*",0,"DWORD",0x1,"INT64*",0,"DWORD",0) ;-------IMediaSeeking SetPositions Virtual Method Number Is 15;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaSeeking) Return SetError(2,0,False) EndIf IMediaControl_Stop($IGraphBuilder) CtrlGraphRelease($IMediaSeeking) Return SetError(0,0,True) EndFunc Func IMediaControl_Run($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,False) $State = IMediaControl_GetState($IGraphBuilder) if @error Then Return SetError(2,0,False) if $State = 2 Then IMediaControl_Stop($IGraphBuilder) if @error Then Return SetError(3,0,False) EndIf if $State = 2 Or $State = 0 Then IMediaSeeking_SeekToCurrent($IGraphBuilder) if @error Then Return SetError(4,0,False) EndIf ;-------IMediaControl Run Virtual Method Number Is 8;---------------- $Rt = InterfaceCall($IMediaControl,"long",8) ;-------IMediaControl Run Virtual Method Number Is 8;---------------- if @error Or $Rt[0] <> 1 Then CtrlGraphRelease($IMediaControl) Return SetError(5,0,False) EndIf CtrlGraphRelease($IMediaControl) Return SetError(0,0,True) EndFunc Func IMediaControl_Pause($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IMediaControl Pause Virtual Method Number Is 9;---------------- $Rt = InterfaceCall($IMediaControl,"long",9) ;-------IMediaControl Pause Virtual Method Number Is 9;---------------- if @error Or $Rt[0] <> 1 Then CtrlGraphRelease($IMediaControl) Return SetError(2,0,False) EndIf Return SetError(0,0,True) EndFunc Func IMediaControl_Stop($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IMediaControl Stop Virtual Method Number Is 10;---------------- $Rt = InterfaceCall($IMediaControl,"long",10) ;-------IMediaControl Stop Virtual Method Number Is 10;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaControl) Return SetError(2,0,False) EndIf CtrlGraphRelease($IMediaControl) Return SetError(0,0,True) EndFunc Func IMediaControl_StopWhenReady($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IMediaControl StopWhenReady Virtual Method Number Is 16;---------------- $Rt = InterfaceCall($IMediaControl,"long",16) ;-------IMediaControl StopWhenReady Virtual Method Number Is 16;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaControl) Return SetError(2,0,False) EndIf CtrlGraphRelease($IMediaControl) Return SetError(0,0,True) EndFunc Func IMediaControl_GetState($IGraphBuilder) ;enum _FilterState ;{    State_Stopped    = 0, ;State_Paused    = State_Stopped + 1, ;State_Running    = State_Paused + 1 ;}    FILTER_STATE; $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,-1) ;-------IMediaControl GetState Virtual Method Number Is 11;---------------- $Rt = InterfaceCall($IMediaControl,"long",11,"long",1000,"long*",0) ;-------IMediaControl GetState Virtual Method Number Is 11;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaControl) Return SetError(2,0,-1) EndIf CtrlGraphRelease($IMediaControl) Return SetError(0,0,$Rt[2]) EndFunc Func IVideoWindow_put_Owner($IGraphBuilder,$Gui) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",$Gui) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_SetWindowPosition($IGraphBuilder,$L,$T,$W,$H) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IVideoWindow SetWindowPosition Virtual Method Number Is 40;---------------- $Rt = InterfaceCall($IVideoWindow,"long",40,"long",$L,"long",$T,"long",$W,"long",$H) ;-------IVideoWindow SetWindowPosition Virtual Method Number Is 40;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_put_WindowState($IGraphBuilder,$WindowState) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;The put_WindowState method shows, hides, minimizes, or maximizes the video window. ;WindowState ;Flag that specifies how the window is to be shown. The value can be any ;constant defined for the nCmdShow parameter of the ShowWindow function. ;-------IVideoWindow put_WindowState Virtual Method Number Is 16;---------------- $Rt = InterfaceCall($IVideoWindow,"long",16,"long",$WindowState) ;-------IVideoWindow Sput_WindowState Virtual Method Number Is 16;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_put_FullScreenMode($IGraphBuilder,$FullScreenMode) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;Sets a hotkey that calls a user function. ;HotKeySet("{ESC}", "HotKeyFullScreenMode") ;Func HotKeyFullScreenMode() ;IVideoWindow_put_FullScreenMode($IGraphBuilder,$FullScreenMode) ;EndFunc ;The put_FullScreenMode method enables or disables full-screen video rendering. ;FullScreenMode [in] ;Boolean value that specifies whether to enable or disable full-screen mode. Must be one ;of the following values: ;Value     Description ;OATRUE = -1    Switch to full-screen mode. ;OAFALSE = 0    Disable full-screen mode. (Default.) ;-------IVideoWindow put_FullScreenMode Virtual Method Number Is 37;---------------- $Rt = InterfaceCall($IVideoWindow,"long",37,"long",$FullScreenMode) ;-------IVideoWindow put_FullScreenMode Virtual Method Number Is 37;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_HideCursor($IGraphBuilder,$HideCursor) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;The SetWindowForeground method places the video window at the top of the Z order. ;HideCursor [in] ;Specifies whether to show or hide the cursor. Must be one of the following values: ;Value    Meaning ;OATRUE = -1 Hide the cursor. ;OAFALSE = 0 Show the cursor. ;-------IVideoWindow HideCursor Virtual Method Number Is 45;---------------- $Rt = InterfaceCall($IVideoWindow,"long",45,"long",$HideCursor) ;-------IVideoWindow HideCursor Virtual Method Number Is 45;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_SetWindowForeground($IGraphBuilder,$Focus) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;The SetWindowForeground method places the video window at the top of the Z order. ;Focus ;Specifies whether to give the window focus. Must be one of the following values: ;Value     Description ;OATRUE = -1    Give the window focus. ;OAFALSE = 0    Do not give the window focus. ;-------IVideoWindow SetWindowForeground Virtual Method Number Is 38;---------------- $Rt = InterfaceCall($IVideoWindow,"long",38,"long",$Focus) ;-------IVideoWindow SetWindowForeground Virtual Method Number Is 38;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_put_BorderColor($IGraphBuilder,$Color) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IVideoWindow put_BorderColor Virtual Method Number Is 35;---------------- $Rt = InterfaceCall($IVideoWindow,"long",35,"long",$Color) ;-------IVideoWindow put_BorderColor Virtual Method Number Is 35;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func CtrlGraphRelease($IUnknown1 = 0,$IUnknown2 = 0,$IUnknown3 = 0) if ($IUnknown1) Then IUnknownRelease($IUnknown1) if ($IUnknown2) Then IUnknownRelease($IUnknown2) if ($IUnknown3) Then IUnknownRelease($IUnknown3) EndFunc Func Add_Remove_MsgGraphArray($IGraphBuilderObj,$Flag = 1) ;$Flag = 1 Add ;$Flag = 2 Remove Switch $Flag Case 1 if Not IsArray($MsgGraphArray) Then Local $TempMsgGraphArray[1] $TempMsgGraphArray[0] = $IGraphBuilderObj $MsgGraphArray = $TempMsgGraphArray Return SetError(0,0,True) Else For $i = 0 To UBound($MsgGraphArray) - 1 if $IGraphBuilderObj = $MsgGraphArray[$i] Then Return SetError(1,0,False) Next ReDim $MsgGraphArray[UBound($MsgGraphArray) + 1] $MsgGraphArray[UBound($MsgGraphArray) - 1] = $IGraphBuilderObj Return SetError(0,0,True) EndIf Case 2 if IsArray($MsgGraphArray) Then Local $TempMsgGraphArray[UBound($MsgGraphArray)],$Test = False , $j = 0 For $i = 0 To UBound($MsgGraphArray) - 1 if $IGraphBuilderObj = $MsgGraphArray[$i] Then $Test = True ContinueLoop EndIf $TempMsgGraphArray[$j] = $MsgGraphArray[$i] $j += 1 Next if ($Test) Then if UBound($TempMsgGraphArray) > 1 Then ReDim $TempMsgGraphArray[UBound($TempMsgGraphArray) - 1] $MsgGraphArray = $TempMsgGraphArray Else $MsgGraphArray = 0 EndIf Return SetError(0,0,True) Else Return SetError(2,0,False) EndIf EndIf Case Else Return SetError(3,0,False) EndSwitch EndFunc Func IUnknownRelease($IUnknown) ;-------IUnknown Release Virtual Method Number Is 3;---------------- $Rt = InterfaceCall($IUnknown,"long",3) ;-------IUnknown Release Virtual Method Number Is 3;---------------- if @error Then Return SetError(1,0,0) Return SetError(0,0,$Rt[0]) EndFunc Func GetObjFromGuid($StrIID,$StrCLSID) Local $LSCTX_ALL = BitOR(0x1,0x4,0x16),$Rt = 0 if Not ($CoInitialize) Then $Rt = DllCall($Ole32,"long","CoInitialize","ptr",0) if @error Or $Rt[0] <> 0 Then Return SetError(1,0,0) $CoInitialize = True OnAutoItExitRegister("CREATEGRAPH_ON_EXIT") EndIf $clsid = CLSIDFromString($StrCLSID) if @error Then Return SetError(2,0,0) $riid = IIDFromString($StrIID) if @error Then Return SetError(3,0,0) $Rt = DllCall($Ole32,"long","CoCreateInstance","ptr",DllStructGetPtr($clsid), _ "ptr",0,"DWORD",$LSCTX_ALL,"ptr",DllStructGetPtr($riid),"ptr*",0) if @error Or $Rt[0] <> 0 Then Return SetError(4,0,0) Return SetError(0,0,$Rt[5]) EndFunc


InterfaceCall.au3
Plain Text         
Func InterfaceCall($Inface,$ReturnType,$MethodNum,$Type1 = 0,$Param1 = 0,$Type2 = 0,$Param2 = 0 _ ,$Type3 = 0,$Param3 = 0, $Type4 = 0,$Param4 = 0 ,$Type5 = 0 ,$Param5 = 0,$Type6 = 0,$Param6 = 0 _ ,$Type7 = 0,$Param7 = 0, $Type8 = 0,$Param8 = 0,$Type9 = 0,$Param9 = 0,$Type10 = 0,$Param10 = 0 _ ,$Type11= 0,$Param11= 0,$Type12= 0,$Param12= 0,$Type13= 0,$Param13 = 0,$Type14 = 0,$Param14 = 0 _ ,$Type15= 0,$Param15= 0,$Type16= 0,$Param16= 0,$Type17= 0,$Param17 = 0,$Type18 = 0,$Param18 = 0 _ ,$Type19= 0,$Param19= 0,$Type20= 0,$Param20= 0,$Type21= 0,$Param21 = 0,$Type22 = 0,$Param22 = 0 _ ,$Type23= 0,$Param23= 0,$Type24= 0,$Param24= 0,$Type25= 0,$Param25 = 0,$Type26 = 0,$Param26 = 0 _ ,$Type27= 0,$Param27= 0,$Type28= 0,$Param28= 0,$Type29= 0,$Param29 = 0,$Type30 = 0,$Param30 = 0) ;;Return Array Of DllCallAddress ;Only Call Virtual Method Form any Class Or From any Interface ;$MethodNum ==> Virtual Method Number In (Virtual Methods Table) ;See the examples ;-------------------------------------------------------------------;C++ Example1 ;C++ Example1 ;class iClass ;{ ;public: ;void MethodA() ;{ ;MessageBox(0,"MethodA","MSG",0); ;} ;virtual void VirtualMethodB() ;{ ;MessageBox(0,"VirtualMethodB","MSG",0); ;} ;virtual void VirtualMethodC() ;{ ;MessageBox(0,"VirtualMethodC","MSG",0); ;} ;void MethodB() ;{ ;MessageBox(0,"MethodB","MSG",0); ;} ;virtual void VirtualMethodA() ;{ ;MessageBox(0,"VirtualMethodA","MSG",0); ;} ;}; ;-----------------------------------------------------------;Virtual Methods Table ;Virtual Methods Table ;virtual void VirtualMethodB() ==> Virtual Method Number Is 1 ;virtual void VirtualMethodC() ==> Virtual Method Number Is 2 ;virtual void VirtualMethodA() ==> Virtual Method Number Is 3 ;-----------------------------------------------------------;Virtual Methods Table ;-------------------------------------------------------------------;C++ Example1 ;//////////////////////////////////////////////////////////////////////////////// ;-------------------------------------------------------------------;C++ Example2 ;C++ Example2 ;class iClassA ;{ ;public: ;void MethodA() ;{ ;MessageBox(0,"MethodA","MSG",0); ;} ;virtual void VirtualMethodB() ;{ ;MessageBox(0,"VirtualMethodB","MSG",0); ;} ;virtual void VirtualMethodC() ;{ ;MessageBox(0,"VirtualMethodC","MSG",0); ;} ;}; ;class iClassB : public iClassA ;{ ;public: ;void MethodD() ;{ ;MessageBox(0,"MethodD","MSG",0); ;} ;virtual void VirtualMethodF() ;{ ;MessageBox(0,"VirtualMethodF","MSG",0); ;} ;virtual void VirtualMethodE() ;{ ;MessageBox(0,"VirtualMethodE","MSG",0); ;} ;}; ;//////////////////////////////////////////////////////////////////////////////// ;//////////////////////////////////////////////////////////////////////////////// ;------------------------------------------;Virtual Methods Table Of iClassA Class ;Virtual Methods Table Of iClassA Class ;virtual void VirtualMethodB() ==> Virtual Method Number Is 1 ;virtual void VirtualMethodC() ==> Virtual Method Number Is 2 ;------------------------------------------;Virtual Methods Table Of iClassA Class ;//////////////////////////////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////////////////////////////// ;------------------------------------------;Virtual Methods Table Of iClassB Class ;class iClassB : public iClassA ;base class ==> iClassA ;derived class ==> iClassB ;http://msdn.microsoft.com/en-us/library/hzk8a7d3.aspx ;When preceding the name of a base class, the public keyword specifies that the public ;and protected members of the base class are public and protected members, respectively, ;of the derived class. ;------------------------------------------------------------------------------------- ;Virtual Methods Table Of iClassB Class ;virtual void VirtualMethodB() In (iClassA) ==> Virtual Method Number Is 1 ;virtual void VirtualMethodC() In (iClassA) ==> Virtual Method Number Is 2 ;virtual void VirtualMethodF() In (iClassB) ==> Virtual Method Number Is 3 ;virtual void VirtualMethodE() In (iClassB) ==> Virtual Method Number Is 4 ;------------------------------------------;Virtual Methods Table Of iClassB Class ;-------------------------------------------------------------------;C++ Example2 ;//////////////////////////////////////////////////////////////////////////////// if Not IsPtr($Inface) Or ($MethodNum < 1) Then Return SetError(1,0,0) if (@NumParams > 3) And (Mod((@NumParams - 3),2) <> 0) Then Return SetError(2,0,0) Local $iMethAddress = GetMethodAddress($Inface,$MethodNum) if Not ($iMethAddress) Then Return SetError(3,0,0) Local $iDataType = "",$iFuncParam = "",$iCommand = "",$iReturn = 0 ;Why use Inface Param In DllCallAddress Function Because the Function of the method ;starts from the (Interface Or class) ;See here ;int class::MethodFunction( int Param ){return 0;}; $iCommand = 'DllCallAddress("' & $ReturnType & '",Eval("iMethAddress"),"ptr",Eval("Inface"),' For $i = 1 To ((@NumParams - 3) / 2) $iDataType = Eval("Type" & $i) $iCommand &= '"' & $iDataType & '",' $iFuncParam = 'Eval("Param' & $i & '"),' $iCommand &= $iFuncParam Next $iCommand = StringTrimRight($iCommand,1) $iCommand &= ")" $iReturn = Execute($iCommand) if @error Then Return SetError(4,0,0) Local $nReturn[UBound($iReturn) -1] , $j = 0 For $i = 0 To UBound($iReturn) - 1 if ($i = 1) Then ContinueLoop ;Skip $Inface Element $nReturn[$j] = $iReturn[$i] $j += 1 Next Return SetError(0,0,$nReturn) EndFunc Func GetMethodAddress($Inface,$MethodNum) ;$MethodNum ==> Virtual Method Number In (Virtual Methods Table) Local $SizeOfUlong_Ptr = 4,$iMethAddress = 0,$OutCastStruct1 = 0 Local $OutCast1 = 0 , $OutCastStruct2 = 0 if Not IsPtr($Inface) Or ($MethodNum < 1) Then Return SetError(1,0,0) ;------------------------------------------------------- $OutCastStruct1 = DllStructCreate("ULONG_PTR",$Inface) $OutCast1 = DllStructGetData($OutCastStruct1,1) ;In C++ ==> unsigned long** OutCast1 = *(unsigned long***)Inface; ;-------------------------------------------------------- ;------------------------------------------------------- $OutCastStruct2 = DllStructCreate("ULONG_PTR",$OutCast1 + ($SizeOfUlong_Ptr * ($MethodNum - 1))) $iMethAddress = DllStructGetData($OutCastStruct2,1) ;$OutCast1 + ($SizeOfUlong_Ptr * ($MethodNum - 1)) ==> $OutCast1 Is PTR Array Of Virtual Methods Table // Method PTR = Array[MethodNum - 1] ;In C++ ==> unsigned long* iMethAddress = *(unsigned long**)((BYTE*)OutCast1 + (SizeOfUlong_Ptr * (MethodNum - 1))); ;Or In C++ ==> unsigned long* iMethAddress = OutCast1[MethodNum - 1]; ;-------------------------------------------------------- if (IsBadCodePtr($iMethAddress)) Then Return SetError(2,0,0) Return SetError(0,0,$iMethAddress) EndFunc Func GetCount_Of_VirtualMethods($Inface) Local $SizeOfUlong_Ptr = 4,$iMethAddress = 0,$OutCastStruct1 = 0 Local $OutCast1 = 0 , $OutCastStruct2 = 0 , $MethodNum = 1 if Not IsPtr($Inface) Then Return SetError(1,0,0) ;------------------------------------------------------- $OutCastStruct1 = DllStructCreate("ULONG_PTR",$Inface) $OutCast1 = DllStructGetData($OutCastStruct1,1) ;In C++ ==> unsigned long** OutCast1 = *(unsigned long***)Inface; ;-------------------------------------------------------- While 1 ;------------------------------------------------------- $OutCastStruct2 = DllStructCreate("ULONG_PTR",DllStructGetData($OutCastStruct1,1) + ($SizeOfUlong_Ptr * ($MethodNum - 1))) $iMethAddress = DllStructGetData($OutCastStruct2,1) ;$OutCast1 + ($SizeOfUlong_Ptr * ($MethodNum - 1)) ==> $OutCast1 Is PTR Array Of Virtual Methods Table // Method PTR = Array[MethodNum - 1] ;In C++ ==> unsigned long* iMethAddress = *(unsigned long**)((BYTE*)OutCast1 + (SizeOfUlong_Ptr * (MethodNum - 1))); ;Or In C++ ==> unsigned long* iMethAddress = OutCast1[MethodNum - 1]; ;-------------------------------------------------------- if (IsBadCodePtr($iMethAddress)) Then $MethodNum -= 1 ExitLoop Else $MethodNum += 1 EndIf WEnd Return SetError(0,0,$MethodNum) EndFunc Func IsBadCodePtr($lpfn) Local $iReturn $iReturn = DllCall("Kernel32.dll","BOOL","IsBadCodePtr","ptr",$lpfn) if @error Then Return SetError(1,0,0) Return SetError(0,0,$iReturn[0]) EndFunc Func CLSIDFromString($psz) $GUID = DllStructCreate("ulong Data1;ushort Data2;ushort Data3;byte Data4[8]") $Oleerror = DllCall("Ole32.dll","int","CLSIDFromString","WSTR",$psz,"struct*",$GUID) if @error Or $Oleerror[0] <> 0 Then Return SetError(1,0,0) Return SetError(0,0,$Oleerror[2]) EndFunc Func IIDFromString($psz) $GUID = DllStructCreate("ulong Data1;ushort Data2;ushort Data3;byte Data4[8]") $Oleerror = DllCall("Ole32.dll","int","IIDFromString","WSTR",$psz,"struct*",$GUID) if @error Or $Oleerror[0] <> 0 Then Return SetError(1,0,0) Return SetError(0,0,$Oleerror[2]) EndFunc


VideoExample.au3
Plain Text         
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include "DirectShow.au3" $hGui = GUICreate("DirectShow Example",500,390) $Run = GUICtrlCreateButton("Run",10,320,100,50) $Pause = GUICtrlCreateButton("Pause",120,320,100,50) $Stop = GUICtrlCreateButton("Stop",230,320,100,50) $FileOpen = GUICtrlCreateButton("FileOpen ",340,320,100,50) GUISetState() $IGraphBuilder = GUICtrlCreateGraph($hGui,"Video.mpg",10,10,480,300) While True      $iMsg = GUIGetMsg()      Select          Case $iMsg = $GUI_EVENT_CLOSE              Exit Case $iMsg = $Run IMediaControl_Run($IGraphBuilder) Case $iMsg = $Pause IMediaControl_Pause($IGraphBuilder) Case $iMsg = $Stop IMediaControl_Stop($IGraphBuilder) Case $iMsg = $FileOpen $var = FileOpenDialog("", @MyDocumentsDir & "\", _ "Video(*.avi;*.qt;*.mov;*.mpg;mpeg*.m1v;*.wmv)|Images(*.gif;*.jpg;*.bmp)|All(*.*)", 1 + 4) if Not @error Then if Not ($IGraphBuilder) Then $IGraphBuilder = GUICtrlCreateGraph($hGui,$var,10,10,480,300) Else              Re_GUICtrlCreateGraph($IGraphBuilder,$var) ;ByRef $IGraphBuilder EndIf EndIf      EndSelect WEnd


ImageExample.au3
Plain Text         
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include "DirectShow.au3" $hGui = GUICreate("DirectShow Example",500,390) $Run = GUICtrlCreateButton("Run",10,320,100,50) $Pause = GUICtrlCreateButton("Pause",120,320,100,50) $Stop = GUICtrlCreateButton("Stop",230,320,100,50) $FileOpen = GUICtrlCreateButton("FileOpen ",340,320,100,50) GUISetState() $IGraphBuilder = GUICtrlCreateGraph($hGui,"Image.gif",10,10,480,300) While True      $iMsg = GUIGetMsg()      Select          Case $iMsg = $GUI_EVENT_CLOSE              Exit Case $iMsg = $Run IMediaControl_Run($IGraphBuilder) Case $iMsg = $Pause IMediaControl_Pause($IGraphBuilder) Case $iMsg = $Stop IMediaControl_Stop($IGraphBuilder) Case $iMsg = $FileOpen $var = FileOpenDialog("", @MyDocumentsDir & "\", _ "Images(*.gif;*.jpg;*.bmp)|Videos(*.avi;*.qt;*.mov;*.mpg;mpeg*.m1v)|" & _ "All(*.*)", 1 + 4) if Not @error Then if Not ($IGraphBuilder) Then $IGraphBuilder = GUICtrlCreateGraph($hGui,$var,10,10,480,300) Else              Re_GUICtrlCreateGraph($IGraphBuilder,$var) ;ByRef $IGraphBuilder EndIf EndIf      EndSelect WEnd


AudioExample.au3
Plain Text         
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include "DirectShow.au3"     $hGui = GUICreate("DirectShow Example",500,250)     $Run = GUICtrlCreateButton("Run",10 + 20,105,100,50)     $Pause = GUICtrlCreateButton("Pause",120 + 20,105,100,50)     $Stop = GUICtrlCreateButton("Stop",230 + 20,105,100,50)     $FileOpen = GUICtrlCreateButton("FileOpen ",340 + 20,105,100,50)     GUISetState()     $IGraphBuilder = CtrlCreateAudio($hGui,"Audio.mid")     While True         $iMsg = GUIGetMsg()         Select             Case $iMsg = $GUI_EVENT_CLOSE                 Exit             Case $iMsg = $Run             IMediaControl_Run($IGraphBuilder)             Case $iMsg = $Pause             IMediaControl_Pause($IGraphBuilder)             Case $iMsg = $Stop             IMediaControl_Stop($IGraphBuilder)             Case $iMsg = $FileOpen                 $var = FileOpenDialog("", @MyDocumentsDir & "\", _                 "Audio(*.mid;*.midi;*.rmi;*.wav;*.mpa;*.mp2;*.mp3;*.au;*.aif;*.aiff;*.snd)|All(*.*)", 1 + 4)                 if Not @error Then                 if ($IGraphBuilder) Then CtrlDeleteAudio($IGraphBuilder) ;ByRef $IGraphBuilder                 $IGraphBuilder = CtrlCreateAudio($hGui,$var)                 EndIf         EndSelect     WEnd

Edited by wolf9228, 16 August 2012 - 08:01 PM.

  • UEZ, bladem2003 and syk3s like this

صرح السماء كان هنا






#2 PhoenixXL

PhoenixXL

    Be what you are, believe me its always the BEST...

  • Active Members
  • PipPipPipPipPipPip
  • 1,329 posts

Posted 15 August 2012 - 03:27 AM

Cool !! :)
PredictText: Predict Text of an Edit Control Like Scite. | Remote Gmail: Execute your Scripts through Gmail. | StringRegExp: Share and learn RegExp. | Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). | Database: An easier approach for _SQ_LITE beginners. | MathsEx: A UDF for Fractions and LCM, GCF/HCF. | FloatingText: An UDF for make your text floating. | Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead.

#3 ashfinal

ashfinal

    Seeker

  • Normal Members
  • 2 posts

Posted 15 August 2012 - 03:56 AM

Wow,impressive! :ILA2:

#4 wakillon

wakillon

    Tiny Tools Coder

  • Active Members
  • PipPipPipPipPipPip
  • 2,481 posts

Posted 15 August 2012 - 05:30 PM

Nice work wolf9228 ! :thumbsup:

Is there a way to get the end of the reading ?
IMediaControl_GetState stay equal to 2 at the end...
May be it's the reason you didn't use a unique button for Play/Pause ?

And when exiting script, do i need to use GUICtrlDeleteGraph ?

Thanks.

  AutoIt Version : 3.3.8.1/3.3.9.4 SciTE 3.3.0 Language:040C OS:WIN_7/ CPU:X64 OS:X64 

  Last updated Scripts and executables with full embedded files are available on : GoogleCode 


#5 wolf9228

wolf9228

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 462 posts

Posted 15 August 2012 - 07:14 PM

Cool !! :)


Good thing you're here ...Thanks

صرح السماء كان هنا


#6 wolf9228

wolf9228

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 462 posts

Posted 15 August 2012 - 07:17 PM

Wow,impressive! :ILA2:


Thank success pulsing around you ..Thanks

صرح السماء كان هنا


#7 wolf9228

wolf9228

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 462 posts

Posted 15 August 2012 - 07:43 PM

Nice work wolf9228 ! :thumbsup:

Is there a way to get the end of the reading ?
IMediaControl_GetState stay equal to 2 at the end...
May be it's the reason you didn't use a unique button for Play/Pause ?

And when exiting script, do i need to use GUICtrlDeleteGraph ?

Thanks.


;enum _FilterState
;{ State_Stopped = 0,
;State_Paused = State_Stopped + 1,
;State_Running = State_Paused + 1
;} FILTER_STATE;

You can get the end of the reading using IMediaControl_GetState function
State_Stopped = 0
State_Paused = 1
State_Running = 2

And when exiting script, do i need to use GUICtrlDeleteGraph ?


Not necessarily but it's good to do so

صرح السماء كان هنا


#8 wakillon

wakillon

    Tiny Tools Coder

  • Active Members
  • PipPipPipPipPipPip
  • 2,481 posts

Posted 15 August 2012 - 07:57 PM

;enum _FilterState
;{ State_Stopped = 0,
;State_Paused = State_Stopped + 1,
;State_Running = State_Paused + 1
;} FILTER_STATE;

You can get the end of the reading using IMediaControl_GetState function
State_Stopped = 0
State_Paused = 1
State_Running = 2

Not necessarily but it's good to do so


As i already notified, IMediaControl_GetState value stays equal to 2 at the end of the play and doesn't return to 0
so i can't detect the end.
If there is no other solution, i can use a timer...

  AutoIt Version : 3.3.8.1/3.3.9.4 SciTE 3.3.0 Language:040C OS:WIN_7/ CPU:X64 OS:X64 

  Last updated Scripts and executables with full embedded files are available on : GoogleCode 


#9 wolf9228

wolf9228

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 462 posts

Posted 16 August 2012 - 01:41 AM

As i already notified, IMediaControl_GetState value stays equal to 2 at the end of the play and doesn't return to 0
so i can't detect the end.
If there is no other solution, i can use a timer...

Thanks
DirectShow.au3
Plain Text         
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include "InterfaceCall.au3" Global $CoInitialize = False , $Ole32 = DllOpen("Ole32.dll"),$MsgGraphArray = 0,$StartGraph = 0 Const $WM_GRAPHNOTIFY = $WM_APP + 1 ;Video Files (avi|qt|mov|mpg|mpeg|m1v|wmv) ;Audio files (wav|mpa|mp2|mp3|au|aif|aiff|snd) ;MIDI Files (mid|midi|rmi) ;Image Files (jpg|bmp|gif) ;And Other Func GUICtrlCreateGraph($Gui,$FileName,$L,$T,$W,$H,$Style = -1,$ExStyle = -1,$Run = True) ;$FileName the name of a media file if $Style = -1 Then $Style = BitOR($WS_CHILD,$WS_CLIPCHILDREN,$WS_CLIPSIBLINGS) if $ExStyle = -1 Then $ExStyle = 0 $StrIID_IGraphBuilder = "{56a868a9-0ad4-11ce-b03a-0020af0ba770}" $StrCLSID_FilterGraph = "{e436ebb3-524f-11ce-9f53-0020af0ba770}" $NewIGraphBuilder = GetObjFromGuid($StrIID_IGraphBuilder,$StrCLSID_FilterGraph) if @error Then Return SetError(1,0,0) if $StartGraph = 0 Then GUIRegisterMsg($WM_GRAPHNOTIFY,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_ERASEBKGND,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_ACTIVATEAPP,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_DEVMODECHANGE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_DISPLAYCHANGE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_PALETTECHANGED,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_PALETTEISCHANGING,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_QUERYNEWPALETTE,"CREATEGRAPH_WM_MSG") $StartGraph = 1 ElseIf $StartGraph = 2 Then GUIRegisterMsg($WM_ERASEBKGND,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_ACTIVATEAPP,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_DEVMODECHANGE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_DISPLAYCHANGE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_PALETTECHANGED,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_PALETTEISCHANGING,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_QUERYNEWPALETTE,"CREATEGRAPH_WM_MSG") GUIRegisterMsg($WM_SYSCOLORCHANGE,"CREATEGRAPH_WM_MSG") EndIf Add_Remove_MsgGraphArray($NewIGraphBuilder) ; Add ;-------IGraphBuilder RenderFile Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($NewIGraphBuilder,"long",14,"wstr",$FileName,"ptr",0) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder) Return SetError(2,0,0) EndIf ;-------IGraphBuilder RenderFile Virtual Method Number Is 14;---------------- $IVideoWindow = GetIVideoWindow($NewIGraphBuilder) if @error Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder) Return SetError(3,0,0) EndIf $IMediaEventEx =  GetIMediaEventEx($NewIGraphBuilder) if @error Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow) Return SetError(4,0,0) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",$Gui,"long",$WM_GRAPHNOTIFY,"ptr",0) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(5,0,0) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",$Gui) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(6,0,0) EndIf ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- ;-------IVideoWindow put_MessageDrain Virtual Method Number Is 32;---------------- $Rt = InterfaceCall($IVideoWindow,"long",32,"ptr",$Gui) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(7,0,0) EndIf ;-------IVideoWindow put_MessageDrain Virtual Method Number Is 32;---------------- ;-------IVideoWindow SetWindowPosition Virtual Method Number Is 40;---------------- $Rt = InterfaceCall($IVideoWindow,"long",40,"long",$L,"long",$T,"long",$W,"long",$H) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(8,0,0) EndIf ;-------IVideoWindow SetWindowPosition Virtual Method Number Is 40;---------------- ;-------IVideoWindow put_WindowStyle Virtual Method Number Is 10;---------------- $Rt = InterfaceCall($IVideoWindow,"long",10,"long",$Style) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(9,0,0) EndIf ;-------IVideoWindow put_WindowStyle Virtual Method Number Is 10;---------------- ;-------IVideoWindow put_WindowStyleEx Virtual Method Number Is 12;---------------- $Rt = InterfaceCall($IVideoWindow,"long",12,"long",$ExStyle) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(10,0,0) EndIf ;-------IVideoWindow put_WindowStyleEx Virtual Method Number Is 12;---------------- ;-------IVideoWindow put_AutoShow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IVideoWindow,"long",14,"long",-1) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($NewIGraphBuilder,$IVideoWindow,$IMediaEventEx) Return SetError(11,0,0) EndIf ;-------IVideoWindow put_AutoShow Virtual Method Number Is 14;---------------- if ($Run) Then IMediaControl_Run($NewIGraphBuilder) EndIf CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(0,0,$NewIGraphBuilder) EndFunc Func Re_GUICtrlCreateGraph(ByRef $OutIGraphBuilder,$FileName,$Run = True) $IVideoWindow = GetIVideoWindow($OutIGraphBuilder) if @error Then Return SetError(1,0,False) $IMediaEventEx =  GetIMediaEventEx($OutIGraphBuilder) if @error Then Return SetError(2,0,False) ;-------IVideoWindow get_WindowStyle Virtual Method Number Is 11;---------------- $Rt = InterfaceCall($IVideoWindow,"long",11,"long*",0) if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(3,0,False) EndIf $Style = $Rt[1] ;-------IVideoWindow get_WindowStyle Virtual Method Number Is 11;---------------- ;-------IVideoWindow get_WindowStyleEx Virtual Method Number Is 13;---------------- $Rt = InterfaceCall($IVideoWindow,"long",13,"long*",0) if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(4,0,False) EndIf $ExStyle = $Rt[1] ;-------IVideoWindow get_WindowStyleEx Virtual Method Number Is 13;---------------- ;-------IVideoWindow get_Owner Virtual Method Number Is 31;---------------- $Rt = InterfaceCall($IVideoWindow,"long",31,"ptr*",0) if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(5,0,False) EndIf $Gui = $Rt[1] ;-------IVideoWindow get_Owner Virtual Method Number Is 31;---------------- ;-------IVideoWindow GetRestorePosition Virtual Method Number Is 44;---------------- $Rt = InterfaceCall($IVideoWindow,"long",44,"long*",0,"long*",0,"long*",0,"long*",0) if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(6,0,False) EndIf $L = $Rt[1] $T = $Rt[2] $W = $Rt[3] $H = $Rt[4] ;-------IVideoWindow GetRestorePosition Virtual Method Number Is 44;------------ $RtIGraphBuilder = GUICtrlCreateGraph($Gui,$FileName,$L,$T,$W,$H,$Style,$ExStyle,$Run) if @error Then CtrlGraphRelease($IVideoWindow,$IMediaEventEx) Return SetError(7,0,False) Else IMediaControl_Stop($OutIGraphBuilder) Add_Remove_MsgGraphArray($OutIGraphBuilder,2) ; Remove ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",0,"long",0,"ptr",0) ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- ;-------IVideoWindow put_Visible Virtual Method Number Is 20;---------------- $Rt = InterfaceCall($IVideoWindow,"long",20,"long",0) ;-------IVideoWindow put_Visible Virtual Method Number Is 20;---------------- ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($OutIGraphBuilder,$IVideoWindow,$IMediaEventEx) $OutIGraphBuilder = $RtIGraphBuilder EndIf Return SetError(0,0,True) EndFunc Func GUICtrlDeleteGraph(ByRef $OutIGraphBuilder) $IVideoWindow = GetIVideoWindow($OutIGraphBuilder) if @error Then Return SetError(1,0,False) $IMediaEventEx =  GetIMediaEventEx($OutIGraphBuilder) if @error Then Return SetError(2,0,False) IMediaControl_Stop($OutIGraphBuilder) Add_Remove_MsgGraphArray($OutIGraphBuilder,2) ; Remove ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",0,"long",0,"ptr",0) ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- ;-------IVideoWindow put_Visible Virtual Method Number Is 20;---------------- $Rt = InterfaceCall($IVideoWindow,"long",20,"long",0) ;-------IVideoWindow put_Visible Virtual Method Number Is 20;---------------- ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",0) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- CtrlGraphRelease($IVideoWindow,$OutIGraphBuilder,$IMediaEventEx) $OutIGraphBuilder = 0 Return SetError(0,0,True) EndFunc Func CtrlCreateAudio($Gui,$FileName,$Run = True) ;$FileName the name of a media file $StrIID_IGraphBuilder = "{56a868a9-0ad4-11ce-b03a-0020af0ba770}" $StrCLSID_FilterGraph = "{e436ebb3-524f-11ce-9f53-0020af0ba770}" $NewIGraphBuilder = GetObjFromGuid($StrIID_IGraphBuilder,$StrCLSID_FilterGraph) if @error Then Return SetError(1,0,0) if $StartGraph = 0 Then GUIRegisterMsg($WM_GRAPHNOTIFY,"CREATEGRAPH_WM_MSG") $StartGraph = 2 EndIf Add_Remove_MsgGraphArray($NewIGraphBuilder) ; Add ;-------IGraphBuilder RenderFile Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($NewIGraphBuilder,"long",14,"wstr",$FileName,"ptr",0) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder) Return SetError(2,0,0) EndIf ;-------IGraphBuilder RenderFile Virtual Method Number Is 14;---------------- $IMediaEventEx =  GetIMediaEventEx($NewIGraphBuilder) if @error Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder) Return SetError(3,0,0) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",$Gui,"long",$WM_GRAPHNOTIFY,"ptr",0) if @error Or $Rt[0] <> 0 Then Add_Remove_MsgGraphArray($NewIGraphBuilder,2) ; Remove CtrlGraphRelease($NewIGraphBuilder,$IMediaEventEx) Return SetError(4,0,0) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- if ($Run) Then IMediaControl_Run($NewIGraphBuilder) EndIf CtrlGraphRelease($IMediaEventEx) Return SetError(0,0,$NewIGraphBuilder) EndFunc Func CtrlDeleteAudio(ByRef $OutIGraphBuilder) $IMediaEventEx =  GetIMediaEventEx($OutIGraphBuilder) if @error Then Return SetError(1,0,False) $State = IMediaControl_GetState($OutIGraphBuilder) if @error Then Return SetError(2,0,False) if $State = 2 Or $State = 1 Then IMediaControl_Stop($OutIGraphBuilder) EndIf ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",14,"ptr",0,"long",0,"ptr",0) ;-------IMediaEventEx SetNotifyWindow Virtual Method Number Is 14;---------------- Add_Remove_MsgGraphArray($OutIGraphBuilder,2) ; Remove CtrlGraphRelease($OutIGraphBuilder,$IMediaEventEx) $OutIGraphBuilder = 0 Return SetError(0,0,True) EndFunc Func GetIVideoWindow($IGraphBuilder) $IID_IVideoWindow =  IIDFromString("{56a868b4-0ad4-11ce-b03a-0020af0ba770}") if @error Then Return SetError(1,0,0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- $Rt = InterfaceCall($IGraphBuilder,"long",1,"struct*",$IID_IVideoWindow,"ptr*",0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- if @error Or $Rt[0] <> 0 Then Return SetError(2,0,0) Return SetError(0,0,$Rt[2]) EndFunc Func GetIMediaControl($IGraphBuilder) $IID_IMediaControl = IIDFromString("{56a868b1-0ad4-11ce-b03a-0020af0ba770}") if @error Then Return SetError(1,0,0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- $Rt = InterfaceCall($IGraphBuilder,"long",1,"struct*",$IID_IMediaControl,"ptr*",0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- if @error Or $Rt[0] <> 0 Then Return SetError(2,0,0) Return SetError(0,0,$Rt[2]) EndFunc Func GetIMediaSeeking($IGraphBuilder) $IID_IMediaSeeking = IIDFromString("{36b73880-c2c8-11cf-8b46-00805f6cef60}") if @error Then Return SetError(1,0,0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- $Rt = InterfaceCall($IGraphBuilder,"long",1,"struct*",$IID_IMediaSeeking,"ptr*",0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- if @error Or $Rt[0] <> 0 Then Return SetError(2,0,0) Return SetError(0,0,$Rt[2]) EndFunc Func GetIMediaEventEx($IGraphBuilder) $IID_IMediaEventEx = IIDFromString("{56a868c0-0ad4-11ce-b03a-0020af0ba770}") if @error Then Return SetError(1,0,0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- $Rt = InterfaceCall($IGraphBuilder,"long",1,"struct*",$IID_IMediaEventEx,"ptr*",0) ;---------IUnknown QueryInterface Virtual Method Number Is 1;------------------- if @error Or $Rt[0] <> 0 Then Return SetError(2,0,0) Return SetError(0,0,$Rt[2]) EndFunc Func CREATEGRAPH_WM_MSG($hWnd,$Msg,$wParam,$lParam) if IsArray($MsgGraphArray) Then For $i = 0 To UBound($MsgGraphArray) - 1 Switch $Msg Case $WM_GRAPHNOTIFY Local $EC_COMPLETE = 0x01 $IMediaEventEx =  GetIMediaEventEx($MsgGraphArray[$i]) if Not @error Then ;-------IMediaEventEx GetEvent Virtual Method Number Is 9;---------------- $Rt = InterfaceCall($IMediaEventEx,"long",9,"Long*",0,"LONG_PTR*",0,"LONG_PTR*",0,"long",100) ;-------IMediaEventEx GetEvent Virtual Method Number Is 9;---------------- if Not @error And $Rt[0] = 0 Then $lEventCode = $Rt[1] $lParam1 = $Rt[2] $lParam2 = $Rt[3] if  $lEventCode = $EC_COMPLETE Then IMediaControl_StopWhenReady($MsgGraphArray[$i]) EndIf ;-------IMediaEventEx FreeEventParams Virtual Method Number Is 13;---------------- InterfaceCall($IMediaEventEx,"long",13,"Long",$lEventCode,"LONG_PTR",$lParam1,"LONG_PTR",$lParam2) ;-------IMediaEventEx FreeEventParams Virtual Method Number Is 13;---------------- EndIf EndIf Case $WM_ERASEBKGND $IVideoWindow = GetIVideoWindow($MsgGraphArray[$i]) if Not @error Then ;-------IVideoWindow put_BackgroundPalette Virtual Method Number Is 18;---------------- ;The put_BackgroundPalette method specifies whether the video window realizes its palette ;in the background. ;BackgroundPalette [in] ;Specifies whether the video renderer realizes it palette in the background. Must be one of ;the following values: ;Value     Description ;OATRUE = -1    The video renderer realizes the palette in the background. ;OAFALSE = 0    The video renderer does not realize the palette in the background. (Default.) Local $BackgroundPalette = -1 $Rt = InterfaceCall($IVideoWindow,"long",18,"long",$BackgroundPalette) ;-------IVideoWindow put_BackgroundPalette Virtual Method Number Is 18;---------------- CtrlGraphRelease($IVideoWindow) ; No Return EndIf Case Else $IVideoWindow = GetIVideoWindow($MsgGraphArray[$i]) if Not @error Then ;-------IVideoWindow NotifyOwnerMessage Virtual Method Number Is 39;---------------- InterfaceCall($IVideoWindow,"long",39,"ptr",$hWnd,"long",$Msg,"long",$wParam,"long",$lParam) ;-------IVideoWindow NotifyOwnerMessage Virtual Method Number Is 39;---------------- CtrlGraphRelease($IVideoWindow) Return $GUI_RUNDEFMSG EndIf EndSwitch Next EndIf EndFunc Func CREATEGRAPH_ON_EXIT() DllCall($Ole32,"long","CoUninitialize") DllClose($Ole32) EndFunc Func IMediaSeeking_SeekToCurrent($IGraphBuilder) ;-------IMediaSeeking SetPositions Virtual Method Number Is 15;---------------- $IMediaSeeking = GetIMediaSeeking($IGraphBuilder) if @error Then Return SetError(1,0,False) $Rt = InterfaceCall($IMediaSeeking,"long",15,"INT64*",0,"DWORD",0x1,"INT64*",0,"DWORD",0) ;-------IMediaSeeking SetPositions Virtual Method Number Is 15;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaSeeking) Return SetError(2,0,False) EndIf IMediaControl_Stop($IGraphBuilder) CtrlGraphRelease($IMediaSeeking) Return SetError(0,0,True) EndFunc Func IMediaControl_Run($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,False) $State = IMediaControl_GetState($IGraphBuilder) if @error Then Return SetError(2,0,False) if $State = 2 Then IMediaControl_Stop($IGraphBuilder) if @error Then Return SetError(3,0,False) EndIf if $State = 2 Or $State = 0 Then IMediaSeeking_SeekToCurrent($IGraphBuilder) if @error Then Return SetError(4,0,False) EndIf ;-------IMediaControl Run Virtual Method Number Is 8;---------------- $Rt = InterfaceCall($IMediaControl,"long",8) ;-------IMediaControl Run Virtual Method Number Is 8;---------------- if @error Or $Rt[0] <> 1 Then CtrlGraphRelease($IMediaControl) Return SetError(5,0,False) EndIf CtrlGraphRelease($IMediaControl) Return SetError(0,0,True) EndFunc Func IMediaControl_Pause($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IMediaControl Pause Virtual Method Number Is 9;---------------- $Rt = InterfaceCall($IMediaControl,"long",9) ;-------IMediaControl Pause Virtual Method Number Is 9;---------------- if @error Or $Rt[0] <> 1 Then CtrlGraphRelease($IMediaControl) Return SetError(2,0,False) EndIf Return SetError(0,0,True) EndFunc Func IMediaControl_Stop($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IMediaControl Stop Virtual Method Number Is 10;---------------- $Rt = InterfaceCall($IMediaControl,"long",10) ;-------IMediaControl Stop Virtual Method Number Is 10;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaControl) Return SetError(2,0,False) EndIf CtrlGraphRelease($IMediaControl) Return SetError(0,0,True) EndFunc Func IMediaControl_StopWhenReady($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IMediaControl StopWhenReady Virtual Method Number Is 16;---------------- $Rt = InterfaceCall($IMediaControl,"long",16) ;-------IMediaControl StopWhenReady Virtual Method Number Is 16;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaControl) Return SetError(2,0,False) EndIf CtrlGraphRelease($IMediaControl) Return SetError(0,0,True) EndFunc Func IMediaControl_GetState($IGraphBuilder) ;enum _FilterState ;{    State_Stopped    = 0, ;State_Paused    = State_Stopped + 1, ;State_Running    = State_Paused + 1 ;}    FILTER_STATE; $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then Return SetError(1,0,-1) ;-------IMediaControl GetState Virtual Method Number Is 11;---------------- $Rt = InterfaceCall($IMediaControl,"long",11,"long",1000,"long*",0) ;-------IMediaControl GetState Virtual Method Number Is 11;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaControl) Return SetError(2,0,-1) EndIf CtrlGraphRelease($IMediaControl) Return SetError(0,0,$Rt[2]) EndFunc Func IVideoWindow_put_Owner($IGraphBuilder,$Gui) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- $Rt = InterfaceCall($IVideoWindow,"long",30,"ptr",$Gui) ;-------IVideoWindow put_Owner Virtual Method Number Is 30;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_SetWindowPosition($IGraphBuilder,$L,$T,$W,$H) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IVideoWindow SetWindowPosition Virtual Method Number Is 40;---------------- $Rt = InterfaceCall($IVideoWindow,"long",40,"long",$L,"long",$T,"long",$W,"long",$H) ;-------IVideoWindow SetWindowPosition Virtual Method Number Is 40;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_put_WindowState($IGraphBuilder,$WindowState) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;The put_WindowState method shows, hides, minimizes, or maximizes the video window. ;WindowState ;Flag that specifies how the window is to be shown. The value can be any ;constant defined for the nCmdShow parameter of the ShowWindow function. ;-------IVideoWindow put_WindowState Virtual Method Number Is 16;---------------- $Rt = InterfaceCall($IVideoWindow,"long",16,"long",$WindowState) ;-------IVideoWindow Sput_WindowState Virtual Method Number Is 16;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_put_FullScreenMode($IGraphBuilder,$FullScreenMode) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;Sets a hotkey that calls a user function. ;HotKeySet("{ESC}", "HotKeyFullScreenMode") ;Func HotKeyFullScreenMode() ;IVideoWindow_put_FullScreenMode($IGraphBuilder,$FullScreenMode) ;EndFunc ;The put_FullScreenMode method enables or disables full-screen video rendering. ;FullScreenMode [in] ;Boolean value that specifies whether to enable or disable full-screen mode. Must be one ;of the following values: ;Value     Description ;OATRUE = -1    Switch to full-screen mode. ;OAFALSE = 0    Disable full-screen mode. (Default.) ;-------IVideoWindow put_FullScreenMode Virtual Method Number Is 37;---------------- $Rt = InterfaceCall($IVideoWindow,"long",37,"long",$FullScreenMode) ;-------IVideoWindow put_FullScreenMode Virtual Method Number Is 37;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_HideCursor($IGraphBuilder,$HideCursor) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;The SetWindowForeground method places the video window at the top of the Z order. ;HideCursor [in] ;Specifies whether to show or hide the cursor. Must be one of the following values: ;Value    Meaning ;OATRUE = -1 Hide the cursor. ;OAFALSE = 0 Show the cursor. ;-------IVideoWindow HideCursor Virtual Method Number Is 45;---------------- $Rt = InterfaceCall($IVideoWindow,"long",45,"long",$HideCursor) ;-------IVideoWindow HideCursor Virtual Method Number Is 45;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_SetWindowForeground($IGraphBuilder,$Focus) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;The SetWindowForeground method places the video window at the top of the Z order. ;Focus ;Specifies whether to give the window focus. Must be one of the following values: ;Value     Description ;OATRUE = -1    Give the window focus. ;OAFALSE = 0    Do not give the window focus. ;-------IVideoWindow SetWindowForeground Virtual Method Number Is 38;---------------- $Rt = InterfaceCall($IVideoWindow,"long",38,"long",$Focus) ;-------IVideoWindow SetWindowForeground Virtual Method Number Is 38;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func IVideoWindow_put_BorderColor($IGraphBuilder,$Color) $IVideoWindow = GetIVideoWindow($IGraphBuilder) if @error Then Return SetError(1,0,False) ;-------IVideoWindow put_BorderColor Virtual Method Number Is 35;---------------- $Rt = InterfaceCall($IVideoWindow,"long",35,"long",$Color) ;-------IVideoWindow put_BorderColor Virtual Method Number Is 35;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IVideoWindow) Return SetError(2,0,False) EndIf CtrlGraphRelease($IVideoWindow) Return SetError(0,0,True) EndFunc Func CtrlGraphRelease($IUnknown1 = 0,$IUnknown2 = 0,$IUnknown3 = 0) if ($IUnknown1) Then IUnknownRelease($IUnknown1) if ($IUnknown2) Then IUnknownRelease($IUnknown2) if ($IUnknown3) Then IUnknownRelease($IUnknown3) EndFunc Func Add_Remove_MsgGraphArray($IGraphBuilderObj,$Flag = 1) ;$Flag = 1 Add ;$Flag = 2 Remove Switch $Flag Case 1 if Not IsArray($MsgGraphArray) Then Local $TempMsgGraphArray[1] $TempMsgGraphArray[0] = $IGraphBuilderObj $MsgGraphArray = $TempMsgGraphArray Return SetError(0,0,True) Else For $i = 0 To UBound($MsgGraphArray) - 1 if $IGraphBuilderObj = $MsgGraphArray[$i] Then Return SetError(1,0,False) Next ReDim $MsgGraphArray[UBound($MsgGraphArray) + 1] $MsgGraphArray[UBound($MsgGraphArray) - 1] = $IGraphBuilderObj Return SetError(0,0,True) EndIf Case 2 if IsArray($MsgGraphArray) Then Local $TempMsgGraphArray[UBound($MsgGraphArray)],$Test = False , $j = 0 For $i = 0 To UBound($MsgGraphArray) - 1 if $IGraphBuilderObj = $MsgGraphArray[$i] Then $Test = True ContinueLoop EndIf $TempMsgGraphArray[$j] = $MsgGraphArray[$i] $j += 1 Next if ($Test) Then if UBound($TempMsgGraphArray) > 1 Then ReDim $TempMsgGraphArray[UBound($TempMsgGraphArray) - 1] $MsgGraphArray = $TempMsgGraphArray Else $MsgGraphArray = 0 EndIf Return SetError(0,0,True) Else Return SetError(2,0,False) EndIf EndIf Case Else Return SetError(3,0,False) EndSwitch EndFunc Func IUnknownRelease($IUnknown) ;-------IUnknown Release Virtual Method Number Is 3;---------------- $Rt = InterfaceCall($IUnknown,"long",3) ;-------IUnknown Release Virtual Method Number Is 3;---------------- if @error Then Return SetError(1,0,0) Return SetError(0,0,$Rt[0]) EndFunc Func GetObjFromGuid($StrIID,$StrCLSID) Local $LSCTX_ALL = BitOR(0x1,0x4,0x16),$Rt = 0 if Not ($CoInitialize) Then $Rt = DllCall($Ole32,"long","CoInitialize","ptr",0) if @error Or $Rt[0] <> 0 Then Return SetError(1,0,0) $CoInitialize = True OnAutoItExitRegister("CREATEGRAPH_ON_EXIT") EndIf $clsid = CLSIDFromString($StrCLSID) if @error Then Return SetError(2,0,0) $riid = IIDFromString($StrIID) if @error Then Return SetError(3,0,0) $Rt = DllCall($Ole32,"long","CoCreateInstance","ptr",DllStructGetPtr($clsid), _ "ptr",0,"DWORD",$LSCTX_ALL,"ptr",DllStructGetPtr($riid),"ptr*",0) if @error Or $Rt[0] <> 0 Then Return SetError(4,0,0) Return SetError(0,0,$Rt[5]) EndFunc

Edited by wolf9228, 16 August 2012 - 08:03 PM.

  • wakillon and bladem2003 like this

صرح السماء كان هنا


#10 bladem2003

bladem2003

    Seeker

  • Active Members
  • 19 posts

Posted 16 August 2012 - 08:51 AM

good job wolf9228

Is there some way to seek to a specific time position

#11 wakillon

wakillon

    Tiny Tools Coder

  • Active Members
  • PipPipPipPipPipPip
  • 2,481 posts

Posted 16 August 2012 - 10:20 AM

Thanks wolf9228 ! ;)

now end reading of video event is well detected
but not for audio...

  AutoIt Version : 3.3.8.1/3.3.9.4 SciTE 3.3.0 Language:040C OS:WIN_7/ CPU:X64 OS:X64 

  Last updated Scripts and executables with full embedded files are available on : GoogleCode 


#12 wolf9228

wolf9228

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 462 posts

Posted 16 August 2012 - 08:08 PM

Thanks wolf9228 ! ;)

now end reading of video event is well detected
but not for audio...


Sorry I did not have enough time to adjust ... Try the script now

صرح السماء كان هنا


#13 wolf9228

wolf9228

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 462 posts

Posted 16 August 2012 - 08:46 PM

good job wolf9228

Is there some way to seek to a specific time position

http://msdn.microsoft.com/en-us/library/windows/desktop/dd407038%28v=vs.85%29.aspx
IMediaSeeking::SetPositions method
Plain Text         
TimeRun($IGraphBuilder,0,1) ;One second Func TimeRun($IGraphBuilder,$TimeStart,$TimeStop) ;$TimeStart And $TimeStop ;Specifies the time value, in second ;-------IMediaSeeking SetPositions Virtual Method Number Is 15;---------------- $IMediaSeeking = GetIMediaSeeking($IGraphBuilder) if @error Then Return SetError(1,0,False) $TimeStart *= 1000000 $TimeStop *= 1000000 $TimeStartSt = DllStructCreate("INT64") DllStructSetData($TimeStartSt,1,$TimeStart) $TimeStopSt = DllStructCreate("INT64") DllStructSetData($TimeStopSt,1,$TimeStop) $Rt = InterfaceCall($IMediaSeeking,"long",15,"ptr",DllStructGetPtr($TimeStartSt),"DWORD",0x1, _ "ptr",DllStructGetPtr($TimeStopSt),"DWORD",0x1) ;-------IMediaSeeking SetPositions Virtual Method Number Is 15;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaSeeking) Return SetError(2,0,False) EndIf IMediaControl_Stop($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then CtrlGraphRelease($IMediaSeeking) Return SetError(3,0,False) EndIf ;-------IMediaControl Run Virtual Method Number Is 8;---------------- $Rt = InterfaceCall($IMediaControl,"long",8) ;-------IMediaControl Run Virtual Method Number Is 8;---------------- if @error Or $Rt[0] <> 1 Then CtrlGraphRelease($IMediaControl,$IMediaSeeking) Return SetError(4,0,False) EndIf CtrlGraphRelease($IMediaControl,$IMediaSeeking) Return SetError(0,0,True) EndFunc

Edited by wolf9228, 01 September 2012 - 06:46 AM.

صرح السماء كان هنا


#14 bladem2003

bladem2003

    Seeker

  • Active Members
  • 19 posts

Posted 17 August 2012 - 08:55 AM

http://msdn.microsoft.com/en-us/library/windows/desktop/dd407038%28v=vs.85%29.aspx
IMediaSeeking::SetPositions method

Plain Text         
TimeRun($IGraphBuilder,0,1) ;One second Func TimeRun($IGraphBuilder,$TimeStat,$TimeStop) ;$TimeStat And $TimeStop ;Specifies the time value, in second ;-------IMediaSeeking SetPositions Virtual Method Number Is 15;---------------- $IMediaSeeking = GetIMediaSeeking($IGraphBuilder) if @error Then Return SetError(1,0,False) $TimeStat *= 1000000 $TimeStop *= 1000000 $TimeStatSt = DllStructCreate("INT64") DllStructSetData($TimeStatSt,1,$TimeStat) $TimeStopSt = DllStructCreate("INT64") DllStructSetData($TimeStopSt,1,$TimeStop) $Rt = InterfaceCall($IMediaSeeking,"long",15,"ptr",DllStructGetPtr($TimeStatSt),"DWORD",0x1, _ "ptr",DllStructGetPtr($TimeStopSt),"DWORD",0x1) ;-------IMediaSeeking SetPositions Virtual Method Number Is 15;---------------- if @error Or $Rt[0] <> 0 Then CtrlGraphRelease($IMediaSeeking) Return SetError(2,0,False) EndIf IMediaControl_Stop($IGraphBuilder) $IMediaControl = GetIMediaControl($IGraphBuilder) if @error Then CtrlGraphRelease($IMediaSeeking) Return SetError(3,0,False) EndIf ;-------IMediaControl Run Virtual Method Number Is 8;---------------- $Rt = InterfaceCall($IMediaControl,"long",8) ;-------IMediaControl Run Virtual Method Number Is 8;---------------- if @error Or $Rt[0] <> 1 Then CtrlGraphRelease($IMediaControl,$IMediaSeeking) Return SetError(4,0,False) EndIf CtrlGraphRelease($IMediaControl,$IMediaSeeking) Return SetError(0,0,True) EndFunc



thanks

#15 wakillon

wakillon

    Tiny Tools Coder

  • Active Members
  • PipPipPipPipPipPip
  • 2,481 posts

Posted 17 August 2012 - 07:38 PM

Sorry I did not have enough time to adjust ... Try the script now


Thanks, now end of audio playing is detected ! :)
Is there a way to get your New DirectShow working on X64 ?

  AutoIt Version : 3.3.8.1/3.3.9.4 SciTE 3.3.0 Language:040C OS:WIN_7/ CPU:X64 OS:X64 

  Last updated Scripts and executables with full embedded files are available on : GoogleCode 


#16 UEZ

UEZ

    Never say never

  • MVPs
  • 3,606 posts

Posted 18 August 2012 - 05:20 PM

Is it possible to play an avi or any other supported file from memory using binary string with your code?

Br,
UEZ

Edited by UEZ, 18 August 2012 - 05:21 PM.

 
The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯


#17 bladem2003

bladem2003

    Seeker

  • Active Members
  • 19 posts

Posted 21 August 2012 - 05:54 PM

Is there any way to change audio language if two audio streams are available?

it would be nice to have a DirectShow udf!!!

#18 wolf9228

wolf9228

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 462 posts

Posted 01 September 2012 - 08:25 AM

Is it possible to play an avi or any other supported file from memory using binary string with your code?

Br,
UEZ



I can do that ...But if you deserve the title MVP
You'll be able to do so easily and without use InterfaceCall.au3

صرح السماء كان هنا


#19 UEZ

UEZ

    Never say never

  • MVPs
  • 3,606 posts

Posted 01 September 2012 - 10:28 AM

I don't deserve the title MVP...

Br,
UEZ

 
The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯


#20 AdmiralAlkex

AdmiralAlkex

    I'm on a boat

  • MVPs
  • 4,490 posts

Posted 01 September 2012 - 09:58 PM

I can do that ...But if you deserve the title MVP
You'll be able to do so easily and without use InterfaceCall.au3

People are not allowed in to the MVP group based on their expertise on DirectShow.
  • BrewManNH likes this




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users