Sign in to follow this  
Followers 0
wolf9228

DirectShow

23 posts in this topic

#1 ·  Posted (edited)

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

Untitled1.png

script Files


New script Files

Have been some additions and amendments to the new version of the Autoit language
Of these additives function call CoInitialize in reference Of Autoit language

So the project Of this topic does not work on the new version of Autoit language

Error in the construction Of CoInitialize function in this project .

The project has been edited and repaired

New script Files New

New_DirectShow(1).zip

New Image Files New
http://www.2shared.com/file/SqJ-kp6X/New_DirectShow_1_.html

DirectShow.au3 New

#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 And $Rt[0] <> 1) 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

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

#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

#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

#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
3 people like this

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

 

Share this post


Link to post
Share on other sites



Cool !! :)


My code:

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. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.

Share this post


Link to post
Share on other sites

Wow,impressive! :ILA2:

Share this post


Link to post
Share on other sites

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 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites

Cool !! :)

Good thing you're here ...Thanks


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

 

Share this post


Link to post
Share on other sites

Wow,impressive! :ILA2:

Thank success pulsing around you ..Thanks


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

 

Share this post


Link to post
Share on other sites

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


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

 

Share this post


Link to post
Share on other sites

;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 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

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

#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
2 people like this

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

 

Share this post


Link to post
Share on other sites

good job wolf9228

Is there some way to seek to a specific time position

Share this post


Link to post
Share on other sites

Thanks wolf9228 ! ;)

now end reading of video event is well detected

but not for audio...


AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites

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


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

 

Share this post


Link to post
Share on other sites

#13 ·  Posted (edited)

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

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

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

 

Share this post


Link to post
Share on other sites

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

IMediaSeeking::SetPositions method

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

Share this post


Link to post
Share on other sites

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 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites

#16 ·  Posted (edited)

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

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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


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

 

Share this post


Link to post
Share on other sites

I don't deserve the title MVP...

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

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.
1 person likes this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0