SuperTiger Posted October 23, 2012 Share Posted October 23, 2012 How can I get Virtual Method Number ?Example: Virtual Method Number of IBasicVideo.GetCurrentImageSorry for my bad English! Link to comment Share on other sites More sharing options...
veronesi Posted October 24, 2012 Share Posted October 24, 2012 Wunderful function! Nearly perfect!But is there a way to mute the audio in a video?And a "property" to loop the movie endless, without restarting it manually?Thanks for the wunderful work!Veronesi Link to comment Share on other sites More sharing options...
Beege Posted October 25, 2012 Share Posted October 25, 2012 I don't deserve the title MVP...Br,UEZBull shit you dont! Assembly Code: fasmg . fasm . BmpSearch . Au3 Syntax Highlighter . Bounce Multithreading Example . IDispatchASMUDFs: Explorer Frame . ITaskBarList . Scrolling Line Graph . Tray Icon Bar Graph . Explorer Listview . Wiimote . WinSnap . Flicker Free Labels . iTunesPrograms: Ftp Explorer . Snipster . Network Meter . Resistance Calculator Link to comment Share on other sites More sharing options...
Belini Posted November 1, 2019 Share Posted November 1, 2019 (edited) On 10/24/2012 at 3:46 AM, veronesi said: But is there a way to mute the audio in a video? @veronesi I need the same as you, does anyone know how to mute video using this script? Edited November 1, 2019 by Belini My Codes: Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Link to comment Share on other sites More sharing options...
1957classic Posted November 1, 2019 Share Posted November 1, 2019 I used this when I was playing around with it, years ago. #include <GuiButton.au3> $mute = GUICtrlCreateButton("Mute", 30, 30, 30, 30) _ToggleMute() Func _ToggleMute() $readButton = _GUICtrlButton_GetText($mute) If $readButton = "Mute" Then SoundSetWaveVolume(0) _GUICtrlButton_SetText($mute, "Unmute") Else _GUICtrlButton_SetText($mute, "Mute") SoundSetWaveVolume(100) EndIf EndFunc Link to comment Share on other sites More sharing options...
Belini Posted November 1, 2019 Share Posted November 1, 2019 @1957classic this way will not work for me because I only need to silence the video and this way you posted I will silence other sounds too. My Codes: Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Link to comment Share on other sites More sharing options...
Belini Posted November 2, 2019 Share Posted November 2, 2019 If this player had volume control I would set the volume to zero but there is no way to change the volume nor the mute function. My Codes: Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Link to comment Share on other sites More sharing options...
1957classic Posted November 2, 2019 Share Posted November 2, 2019 I can turn the sound off or adjust the volume by clicking the speaker icon and using the mixer. You may be able to find a way of automating it that way. Link to comment Share on other sites More sharing options...
Belini Posted November 2, 2019 Share Posted November 2, 2019 Controlling the sound through the speaker icon I can get both master volume and wave volume but what I really need is to control video volume only. My Codes: Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Link to comment Share on other sites More sharing options...
Belini Posted November 11, 2019 Share Posted November 11, 2019 I searched a lot and found nothing to create the MUTE function or VOLUME function and without having control over the sound of the video I can not use this UDF, could anyone implement volume or mute this UDF? My Codes: Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Link to comment Share on other sites More sharing options...
Belini Posted December 14, 2019 Share Posted December 14, 2019 (edited) Does anyone know what is the Virtual Method Number to change the aspect ratio of video using Ole32.dll? Edited December 16, 2019 by Belini My Codes: Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Link to comment Share on other sites More sharing options...
Belini Posted December 18, 2019 Share Posted December 18, 2019 (edited) Consegui colocar Mute e Volume neste que usa a Ole32.dll e agora já dá prá incluir ele na minha lista de players também. Func IMediaControl_Mute(ByRef $IGraphBuilder, $opt = 0) If $opt = 0 Then IMediaControl_Vol($IGraphBuilder, $volume) Else IMediaControl_Vol($IGraphBuilder, 0) EndIf GUICtrlSetData($lab_mute, "Mute: " & $opt) EndFunc ;==>IMediaControl_Mute Func IMediaControl_Vol(ByRef $IGraphBuilder, $vol = 50) $IMediaControl = GetIMediaControl($IGraphBuilder) If @error Then Return SetError(1, 0, False) ;-------IMediaControl Vol Virtual Method Number Is 46;---------------- $Rt = InterfaceCall($IMediaControl, "long", 46, "long", -Exp((100 - $vol) / 10.86)) ;-------IMediaControl Vol Virtual Method Number Is 46;---------------- GUICtrlSetData($lab_vol, "Vol: " & $vol) If @error Or $Rt[0] <> 1 Then CtrlGraphRelease($IMediaControl) Return SetError(2, 0, False) EndIf Return SetError(0, 0, True) EndFunc ;==>IMediaControl_Vol expandcollapse popup#include <Array.au3> #include <StaticConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $CoInitialize = False, $Ole32 = DllOpen("Ole32.dll"), $MsgGraphArray = 0, $StartGraph = 0 Const $WM_GRAPHNOTIFY = $WM_APP + 1 $hGui = GUICreate("DirectShow", 608, 620, -1, -1, $WS_CAPTION + $WS_SYSMENU + $WS_MINIMIZEBOX + $WS_MAXIMIZEBOX + $WS_SIZEBOX) $FileOpen = GUICtrlCreateButton("FileOpen ", 20, 470, 90, 50) GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM) $Run = GUICtrlCreateButton("Run", 190, 470, 90, 50) GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM) $Pause = GUICtrlCreateButton("Pause", 340, 470, 90, 50) GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM) $Stop = GUICtrlCreateButton("Stop", 500, 470, 90, 50) GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM) $Full = GUICtrlCreateButton("Fullscreen", 20, 535, 90, 50) GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM) $bt_mute = GUICtrlCreateButton("Mute ", 190, 535, 90, 50) GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM) $v_mais = GUICtrlCreateButton("Vol + ", 340, 535, 90, 50) GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM) $v_menos = GUICtrlCreateButton("Vol - ", 500, 535, 90, 50) GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM) $lab_mute = GUICtrlCreateLabel("Mute: 0", 190, 595, 90, 20, BitOR($SS_CENTER, $SS_CENTERIMAGE)) $lab_vol = GUICtrlCreateLabel("Vol: 100", 340, 595, 90, 20, BitOR($SS_CENTER, $SS_CENTERIMAGE)) Global $IGraphBuilder, $volume = 100, $mute = 0, $num = 0 GUISetState() IMediaControl_Vol($IGraphBuilder, 100) While True $iMsg = GUIGetMsg() Select Case $iMsg = $GUI_EVENT_CLOSE Exit Case $iMsg = $bt_mute If $mute = 0 Then $mute = 1 Else $mute = 0 EndIf IMediaControl_Mute($IGraphBuilder, $mute) Case $iMsg = $v_mais $volume += 5 If $volume > 100 Then $volume = 100 IMediaControl_Vol($IGraphBuilder, $volume) Case $iMsg = $v_menos $volume -= 5 If $volume < 0 Then $volume = 0 IMediaControl_Vol($IGraphBuilder, $volume) Case $iMsg = $Run IMediaControl_Run($IGraphBuilder) Case $iMsg = $Pause IMediaControl_Pause($IGraphBuilder) Case $iMsg = $Stop IMediaControl_Stop($IGraphBuilder) Case $iMsg = $Full IVideoWindow_put_FullScreenMode($IGraphBuilder, -1) Case $iMsg = $FileOpen $var = FileOpenDialog("", Default, "Video(*.avi;*.qt;*.mov;*.mpg;*.mpeg;*.m1v;*.wmv;*.flv;*.mp4)", 1 + 4) Local $iPosGet = WinGetPos($hGui, "") If Not @error Then WinMove("DirectShow", "", $iPosGet[0] - 1, $iPosGet[1]) If Not ($IGraphBuilder) Then $IGraphBuilder = GUICtrlCreateGraph($hGui, $var, 0, 0, 608, 456) Else Re_GUICtrlCreateGraph($IGraphBuilder, $var) EndIf WinMove("DirectShow", "", $iPosGet[0] + 1, $iPosGet[1]) EndIf EndSelect WEnd Func IMediaControl_Mute(ByRef $IGraphBuilder, $opt = 0) If $opt = 0 Then IMediaControl_Vol($IGraphBuilder, $volume) Else IMediaControl_Vol($IGraphBuilder, 0) EndIf GUICtrlSetData($lab_mute, "Mute: " & $opt) EndFunc ;==>IMediaControl_Mute Func IMediaControl_Vol(ByRef $IGraphBuilder, $vol = 50) $IMediaControl = GetIMediaControl($IGraphBuilder) If @error Then Return SetError(1, 0, False) ;-------IMediaControl Vol Virtual Method Number Is 46;---------------- $Rt = InterfaceCall($IMediaControl, "long", 46, "long", -Exp((100 - $vol) / 10.86)) ;-------IMediaControl Vol Virtual Method Number Is 46;---------------- GUICtrlSetData($lab_vol, "Vol: " & $vol) If @error Or $Rt[0] <> 1 Then CtrlGraphRelease($IMediaControl) Return SetError(2, 0, False) EndIf Return SetError(0, 0, True) EndFunc ;==>IMediaControl_Vol 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 ;==>IMediaControl_Run 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 ;==>IMediaControl_Pause 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 ;==>IMediaControl_Stop 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 ;==>IVideoWindow_SetWindowPosition 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 ;==>IVideoWindow_put_FullScreenMode 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 ;==>GUICtrlCreateGraph 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 ;==>Re_GUICtrlCreateGraph 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 ;==>GetIVideoWindow 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 ;==>GetIMediaControl 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 ;==>GetIMediaSeeking 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 ;==>GetIMediaEventEx 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 ;==>IMediaSeeking_SeekToCurrent 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 ;==>IMediaControl_StopWhenReady 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 ;==>IMediaControl_GetState 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 ;==>InterfaceCall 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 ;==>GetMethodAddress 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 ;==>IsBadCodePtr 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 ;==>CLSIDFromString 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 ;==>IIDFromString 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 ;==>CREATEGRAPH_WM_MSG Func CREATEGRAPH_ON_EXIT() DllCall($Ole32, "long", "CoUninitialize") DllClose($Ole32) EndFunc ;==>CREATEGRAPH_ON_EXIT Func CtrlGraphRelease($IUnknown1 = 0, $IUnknown2 = 0, $IUnknown3 = 0) If ($IUnknown1) Then IUnknownRelease($IUnknown1) If ($IUnknown2) Then IUnknownRelease($IUnknown2) If ($IUnknown3) Then IUnknownRelease($IUnknown3) EndFunc ;==>CtrlGraphRelease 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 ;==>Add_Remove_MsgGraphArray 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 ;==>IUnknownRelease 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 ;==>GetObjFromGuid ;~ Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) ;~ #forceref $iMsg, $wParam ;~ Local $iPosGet = WinGetClientSize($hGui, "") ;~ IVideoWindow_SetWindowPosition($IGraphBuilder, 0, 0, $iPosGet[0], $iPosGet[1] - 100) ;~ Return $GUI_RUNDEFMSG ;~ EndFunc ;==>WM_SIZE Edited December 18, 2019 by Belini My Codes: Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now