Jump to content
Belini

Capturar tela de vídeo

Recommended Posts

Sempre que tento capturar a tela de algum vídeo a imagem só fica preta mesmo o vídeo estando pausado, alguém sabe como capturar a tela sem que fique preta?

Share this post


Link to post
Share on other sites

Olá Belini.

   Este efeito da tela preta ocorre quando o processo de captura não consegue "entender" o codec utilizado. Li isso faz muito tempo quando precisei uma vez.

   Mas supondo que vc esteja usando um player convencional (VLC, PotPLayer ou WMP) normalmente eles possuem teclas próprias de captura que resolvem isso. Dá uma olhada nisso. Procure pela tecla de captura de imagem no Help do seu player.

   Eu pessoalmente uso e recomendo o PotPlayer (usava o VLC antes), mas ambos tem essa tecla. No PotPlayer é Ctrl-C (dã).

Share this post


Link to post
Share on other sites

@Manimal o problema é que não é player convencional e sim em Autoit usando a UDF _video.au3 e todas funções que tentei dá tela preta!

#include <File.au3>
#include <Array.au3>
#include <ScreenCapture.au3>
#include <GUIConstantsEX.au3>
#include <WindowsConstants.au3>
#include <SliderConstants.au3>

Global $idS, $Tam, $Pos, $local, $arquivos
Global $BtnMais, $BtnMenos, $Vol = 50, $SlideWave, $video, $capture
Global $Tocando = False, $soundhandle, $hGUI, $posicao, $tamanho, $abrir, $play

$hGUI = GUICreate("Player", 644, 570, -1, -1, $WS_CLIPCHILDREN)

GUICtrlCreateLabel("TIME:", 10, 510, 50, 20)
$posicao = GUICtrlCreateLabel("00:00:00", 60, 510, 50, 20)
GUICtrlCreateLabel("/", 110, 510, 10, 20)
$tamanho = GUICtrlCreateLabel("00:00:00", 125, 510, 50, 20)

$open = GUICtrlCreateButton("OPEN", 180, 502, 80, 30)
$play = GUICtrlCreateButton("PLAY", 280, 502, 80, 30)
$capture = GUICtrlCreateButton("CAPTURE", 380, 502, 80, 30)

$Volume = GUICtrlCreateLabel("Volume: " & $Vol & " %", 525, 486, 70, 15)
$SlideWave = GUICtrlCreateSlider(475, 504, 170, 30)
GUICtrlSetLimit($SlideWave, 100, 0)
GUICtrlSetData($SlideWave, $Vol)

$soundhandle = ControlGetHandle($hGUI, "", $SlideWave)
GUICtrlSetState($play, $GUI_DISABLE)
GUISetState(@SW_SHOW, $hGUI)

GUIRegisterMsg($Wm_Hscroll, "_WM_HSCROLL")

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit (0)
        Case $capture
            If $Tocando = True Then
                If Not @error Then _ScreenCapture_Capture(@ScriptDir & "\Capture_Capture.jpg")
                _ScreenCapture_CaptureWnd(@ScriptDir & "\CaptureWnd.jpg", $hGUI)
                GUICtrlSetData($capture, "CAPTURED")
                SLEEP(1500)
                GUICtrlSetData($capture, "CAPTURE")
                endif
        Case $open
            If Not $Tocando Then
                $video = FileOpenDialog("Abrir arquivos .mp4", @ScriptDir, "Midia (*.avi;*.cdg;*.mpg;*.mp4)")
                If Not @error Then
                    _PLAYER($video)
                    GUICtrlSetState($play, $GUI_ENABLE)
                EndIf
            Else
                $Tocando = False
                _Video_close($idS)
                GUICtrlSetData($posicao, "00:00:00")
                GUICtrlSetState($play, $GUI_DISABLE)
                GUICtrlSetData($open, "OPEN")
            EndIf
        Case $play
            _PLAYER("PLAY")
    EndSwitch
WEnd

Func _PLAYER($local = False)
    Local $randon, $i
    If $local = "PLAY" Then
        If GUICtrlRead($play) = "PLAY" Then
            $Tocando = True
            AdlibRegister("_PLAYER", 1000)
            _Video_Play($idS)
            _Video_Volume($idS, 50)
            GUICtrlSetData($play, "PLAY")
            GUICtrlSetData($open, "STOP")
        Else
            _Video_Pause($idS)
            GUICtrlSetData($play, "PLAY")
        EndIf
        Return
    EndIf

    If $local Then
        $idS = _Video_Open($video, $hGUI, 2, 2, 640, 480)
        $Tam = _Video_Length($idS, 1)
        GUICtrlSetData($tamanho, _Video_Length($idS))
        GUICtrlSetData($play, "PLAY")
        Return
    EndIf

    $Pos = _Video_TimePos($idS, 1)

    If $Pos = $Tam Then
        GUICtrlSetData($posicao, "00:00:00")
        _Video_close($idS)
        GUICtrlSetState($play, $GUI_DISABLE)
        GUICtrlSetData($play, "PLAY")
        GUICtrlSetData($open, "OPEN")
        $Tocando = False
    ElseIf $Pos <> 0 Then
        GUICtrlSetData($posicao, _Video_TimePos($idS))
    EndIf

EndFunc   ;==>_PLAYER


Func _WM_HSCROLL($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $wParam

    Switch $lParam
        Case $soundhandle
            _Video_Volume($idS, GUICtrlRead($SlideWave))
            GUICtrlSetData($Volume, "Volume: " & GUICtrlRead($SlideWave) & " %")
    EndSwitch

    Return $GUI_RUNDEFMSG

EndFunc   ;==>_WM_HSCROLL
; ========================================================= EXAMPLE =========================================================

#region ==> UDF Vídeo By: smashly
#include-once
Global $vRet, $iTicks
;==================================== #CURRENT FUNCTIONS#==================================================
; _Video_Close
; _Video_Dimension ==> Adicionado
; _Video_FrameRate ==> Adicionado
; _Video_Length
; _Video_Mute
; _Video_Open
; _Video_Pause
; _Video_Play
; _Video_Resume
; _Video_Seek
; _Video_Status  ==> Adicionado
; _Video_Step    ==> Adicionado
; _Video_Stop    ==> Adicionado
; _Video_TimePos
; _Video_Volume  ==> Adicionado
; _RandomStr
; _MSToHMS
; _mciDeviceExists
; _mciListDevices
; _mciSendString
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Close
; Description....: Close a video.
; Syntax.........: _Video_Close($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Return 1 and sets Alias name to "".
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = MCI failed to close video
; Author ........: smashly
Func _Video_Close(ByRef $sAlias)
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If _mciSendString("close " & $sAlias) = 0 Then
        $sAlias = ""
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Close
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Dimension
; Description....: Retrieves the Width and Height of the source video.
; Syntax.........: _Video_Dimension($sFile)
; Parameters ....: $sFile     - The full path to video file.
; Return values .: Success    - Returns an array. array[0] = Width, array[1] = Height
;                  Failure    - Return 0 and @error 1~3
;                               @error 1 = File doesn't exist.
;                               @error 2 = MCI failed to open the video file.
;                               @error 3 = MCI failed to get the source video dimensions.
; Author ........: smashly
Func _Video_Dimension($sFile)
    Local $iRet, $sVID, $aTmp
    If Not FileExists($sFile) Then Return SetError(1, 0, 0)
    $sVID = _RandomStr()
    $iRet = _mciSendString("open " & FileGetShortName($sFile) & " alias " & $sVID)
    If $iRet <> 0 Then Return SetError(2, 0, 0)
    $iRet = _mciSendString("where " & $sVID & " source", 255)
    If $iRet = "" Then
        _mciSendString("close " & $sVID)
        Return SetError(3, 0, 0)
    EndIf
    _mciSendString("close " & $sVID)
    $aTmp = StringSplit($iRet, Chr(32))
    $aTmp[1] = $aTmp[$aTmp[0]]
    $aTmp[0] = $aTmp[$aTmp[0] - 1]
    ReDim $aTmp[2]
    Return $aTmp
EndFunc   ;==>_Video_Dimension
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_FrameRate
; Description....: Close a video.
; Syntax.........: _Video_FrameRate($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Returns the Frames Per Second of the video.
;                  Failure    - Return 0 and @error 1
;                               @error 1 = Invalid Alias
; Author ........: smashly
Func _Video_FrameRate($sAlias)
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    Return _mciSendString("status " & $sAlias & " nominal frame rate", 255) / 1000
EndFunc   ;==>_Video_FrameRate
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Length
; Description....: Get the time length of a video in Milliseconds or Hours, Minutes, Seconds (HH:MM:SS)
; Syntax.........: _Video_Length($sAlias[, $iTime = 0])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open
;                  $iTime     - 0 Return time lenth in Hours, Minutes, Seconds (HH:MM:SS)
;                             - 1 Return time lenth in Milliseconds.
; Return values .: Success    - Return time length in Milliseconds or Hours, Minutes, Seconds (HH:MM:SS)
;                  Failure    - Return 0 and @error 1
;                               @error 1 = Invalid Alias
; Author ........: smashly
Func _Video_Length($sAlias, $iTime = 0)
    Local $iMS
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    _mciSendString("set " & $sAlias & " time format ms")
    $iMS = _mciSendString("status " & $sAlias & " length", 255)
    If Not $iTime Then Return _MSToHMS($iMS)
    If $iTime Then Return $iMS
EndFunc   ;==>_Video_Length
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Mute
; Description....: Turn off/on the audio in a video.
; Syntax.........: _Video_Mute($sAlias[, $iMute = 0])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iAudio    - 0 = Audio On, 1 = Audio Off
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = MCI failed to turn the video audio off/on
; Author ........: smashly
Func _Video_Mute($sAlias, $iMute = 0)
    Local $iRet, $iAM = "on"
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If $iMute Then $iAM = "off"
    $iRet = _mciSendString("set " & $sAlias & " audio all " & $iAM)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Mute
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Open
; Description ...: Opens a Video file ready for use with other _Video_xxxx functions.
; Syntax.........: _Video_Open($sFile, $hWnd, $iX, $iY, $iW, $iH[, $sDevice = ""])
; Parameters ....: $sFile     - The full path to video file.
;                  $hWnd      - Handle to a window or control that the video will be displayed on
;                  $iX        - Left position of the video.
;                  $iY        - Top position of the video.
;                  $iW        - Width of the video.
;                  $iH        - Height of the video.
;                  $sDevice   - MCI Device type to play video with. (See Remarks for more info)
; Return values .: Success    - Return an Alias name for use with other _Video_xxxx functions.
;                  Failure    - Return an empty String "" and @error 1~5
;                               @error 1 = File doesn't exist
;                               @error 2 = Window or Control handle not valid.
;                               @error 3 = Invalid MCI Device type specified.
;                               @error 4 = MCI failed to open video file
;                               @error 5 = MCI failed window for video.
;                               @error 5 = MCI failed to put video at the deignated location.
;
; Remarks .......: If your having trouble with avi playback (eg; playing fast, slow, choppy or no audio)
;                  or a video won't play but it plays fine in any other player ...
;                  Then set the $sDevice parameter to "MPEGVideo"
;                  If the $sDevice parameter is left blank then windows will decide which MCI Device type
;                  to use.
;                  Most current day avi/wmv/mp4 formats dont play properly or at all when windows selects
;                  the mci device type to use.
;                  Windows would default use "AVIVideo" MCI Device type to play avi with mci.
;                  When you specify "MPEGVideo" for an avi and mci fails it then uses the windows native
;                  chain of codecs that would be used by any other player not using mci ;)
;                  Because of this behaviour you can usually play almost any type of video that normally
;                  fails when using mci just by specifying "MPEGVideo" mci device type.
;                  For playing video on an autoit gui then be sure to add the $WS_CLIPCHILDREN style
;                  to your Gui. This will keep the Video dislpayed on your Gui all the time.
; PT-BR :: Observações:
; ... Se você tiver problemas com a reprodução avi (por exemplo, jogar rápido, lento, intermitente ou sem áudio)
; Ou um vídeo não será reproduzido, mas reproduz bem em qualquer outro player ...
; Em seguida, defina o parâmetro $sDevice como "MPEGVideo"
; Se o parâmetro $sDevice for deixado em branco, o Windows decidirá qual tipo de dispositivo MCI usar.
; A maioria dos formatos atuais de avi / wmv / mp4 não jogam corretamente ou quando o Windows seleciona
; O tipo de dispositivo mci a ser usado.
; Windows usaria padrão "AVIVideo" tipo de dispositivo MCI para jogar avi com mci.
; Quando você especifica "MPEGVideo" para um avi e mci falha, em seguida, usa as janelas nativas
; Cadeia de codecs que seriam usados ??por qualquer outro jogador que não usasse mci;)
; Devido a esse comportamento, você geralmente pode reproduzir quase qualquer tipo de vídeo que normalmente
; Falha ao usar mci apenas especificando "MPEGVideo" tipo de dispositivo mci.
; Para reproduzir o vídeo em um gui autoit, então certifique-se de adicionar o estilo $WS_CLIPCHILDREN
; Para o seu Gui. Isto manterá o vídeo dislpayed em seu Gui todo o tempo.
;
; Author ........: smashly
Func _Video_Open($sFile, $hWnd, $iX, $iY, $iH, $iW, $sDevice = "MPEGVideo")
    Local $sVID, $gId, $iRet, $sDT = ""
    $sDevice = "MPEGVideo"
    If Not FileExists($sFile) Then Return SetError(1, 0, "")
    If Not IsHWnd($hWnd) Then Return SetError(2, 0, "")
    If $sDevice <> "" Then
        If Not _mciDeviceExists($sDevice) Then Return SetError(3, 0, "")
        $sDT = " type " & $sDevice
    EndIf
    $gId = Dec(StringTrimLeft($hWnd, 2))
    $sVID = _RandomStr()
    $iRet = _mciSendString("open " & FileGetShortName($sFile) & " alias " & $sVID & $sDT)
    If $iRet <> 0 Then Return SetError(4, 0, "")
    $iRet = _mciSendString("window " & $sVID & " handle " & $gId)
    If $iRet <> 0 Then
        _mciSendString("close " & $sVID)
        Return SetError(5, 0, "")
    EndIf
    $iRet = _mciSendString("put " & $sVID & " destination at " & $iX & " " & $iY & " " & $iH & " " & $iW)
    If $iRet <> 0 Then
        _mciSendString("close " & $sVID)
        Return SetError(6, 0, "")
    EndIf
    Return SetError(0, 0, $sVID)
EndFunc   ;==>_Video_Open
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Pause
; Description....: Pause a Video at the current playing position.
; Syntax.........: _Video_Pause($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = Failed to pause video.
; Author ........: smashly
Func _Video_Pause($sAlias)
    Local $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    $iRet = _mciSendString("pause " & $sAlias)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Pause
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Play
; Description....: Plays a Video from the current position.
; Syntax.........: _Video_Play($sAlias[, $iMode = 0])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iMode     - 0 play video on the window or control as specified in _Video_Open
;                             - 1 play video in Fullscreen mode.
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = MCI failed to play video.
; Author ........: smashly
Func _Video_Play($sAlias, $iMode = 0)
    Local $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If _Video_TimePos($sAlias, 1) = _Video_Length($sAlias, 1) Then _Video_Seek($sAlias, "start")
    If $iMode Then
        $vRet = _mciSendString("play " & $sAlias & " fullscreen")
    Else
        $iRet = _mciSendString("play " & $sAlias)
    EndIf
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(1, 0, 0)
    EndIf
EndFunc   ;==>_Video_Play
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Resume
; Description....: Resume playing a video after pausing.
; Syntax.........: _Video_Resume($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = MCI failed to resume video.
; Author ........: smashly
Func _Video_Resume($sAlias)
    Local $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    $iRet = _mciSendString("resume " & $sAlias)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Resume
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Seek
; Description....: Seek a video to the specified time position.
; Syntax.........: _Video_Seek($sAlias, $iTime)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iTime     - Time to Seek. Can be Millisecons or HH:MM:SS or "start" or "end"
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~3
;                               @error 1 = Invalid Alias
;                               @error 2 = Invalid time format.
;                               @error 3 = MCI Seek error
; Author ........: smashly
Func _Video_Seek($sAlias, $iTime)
    Local $iMS, $aTime, $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If StringInStr($iTime, ":") Then
        $aTime = StringSplit($iTime, ":")
        If $aTime[0] <> 3 Then Return SetError(2, 0, 0)
        $iMS = 1000 * ((3600 * $aTime[1]) + (60 * $aTime[2]) + $aTime[3])
    ElseIf StringIsInt($iTime) Or $iTime = "start" Or $iTime = "end" Then
        $iMS = $iTime
    Else
        Return SetError(2, 0, 0)
    EndIf
    _mciSendString("set " & $sAlias & " time format ms")
    $iRet = _mciSendString("seek " & $sAlias & " to " & $iMS)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(3, 0, 0)
    EndIf
EndFunc   ;==>_Video_Seek
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Status
; Description....: Get a status status message from a video device.
; Syntax.........: _Video_Status($sAlias[, $sQuery = "mode"])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open
;                  $sQuery    - What to get the status of:
;                               "audio" - returns the "on" or "off"
;                               "mode"  - returns "paused", "playing" and "stopped"
; Return values .: Success    - Returns a Status message from the video device.
;                  Failure    - Return 0 and @error 1
;                               @error 1 = Invalid Alias
;                               @error 2 = Invalid query (To be implemented)
; Author ........: smashly
Func _Video_Status($sAlias, $sQuery = "mode")
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    ;; error check for the $sQuery goes here
    Return _mciSendString("status " & $sAlias & " " & $sQuery, 255)
EndFunc   ;==>_Video_Status
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Step
; Description....: Step a video forwards or backwards by a number of frames.
; Syntax.........: _Video_Step($sAlias, $iFrames)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open
;                  $iFrames   - The number of frames to step, use negative numbers to step backwards.
; Return values .: Success    - Returns 1 and @error 0
;                  Failure    - Return 0 and @error 1~3
;                               @error 1 = Invalid Alias
;                               @error 2 = Invalid frames
;                               @error 3 = MCI Step error
; Author ........: smashly
Func _Video_Step($sAlias, $iFrames)
    Local $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If StringRegExp(StringReplace($iFrames, "-", ""), '\D', 0) Then Return SetError(2, 0, 0)
    $iRet = _mciSendString("step " & $sAlias & " by " & $iFrames)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(3, 0, 0)
    EndIf
EndFunc   ;==>_Video_Step
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Stop
; Description....: Stop a Video playing. (seeks video to start)
; Syntax.........: _Video_Stop($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = Failed to stop or seek
; Author ........: smashly
Func _Video_Stop($sAlias)
    Local $iRet, $iRet2
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    $iRet = _Video_Seek($sAlias, "start")
    $iRet2 = _mciSendString("stop " & $sAlias)
    If $iRet = 0 And $iRet2 = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Stop
;==========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_TimePos
; Description....: Get the time poition of a video in Milliseconds or Hours, Minutes, Seconds (HH:MM:SS)
; Syntax.........: _Video_TimePos($sAlias[, $iTime = 0])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iTime     - 0 Return time lenth in Hours, Minutes, Seconds (HH:MM:SS)
;                             - 1 Return time lenth in Milliseconds.
; Return values .: Success    - Return time position in Milliseconds or Hours, Minutes, Seconds (HH:MM:SS)
;                  Failure    - Return 0 and @error 1
;                               @error 1 = Invalid Alias
; Author ........: smashly
Func _Video_TimePos($sAlias, $iTime = 0)
    Local $iMS
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    _mciSendString("set " & $sAlias & " time format ms")
    $iMS = _mciSendString("status " & $sAlias & " position", 255)
    If Not $iTime Then Return _MSToHMS($iMS)
    If $iTime Then Return $iMS
EndFunc   ;==>_Video_TimePos
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _Video_Volume
; Description....: Turn the video audio volume up or down.
; Syntax.........: _Video_AudioVolume($sAlias[, $iVolume = 100])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iVolume   - 0 = Min, 100 = Max
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = Invalid Volume
;                               @error 3 = MCI failed to set volume
; Author ........: smashly
;~ Func _Video_Volume($sAlias, $iVolume = 100)
;~  Local $iRet, $iVol
;~  If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
;~  If StringRegExp($iVolume, '\D', 0) Then Return SetError(2, 0, 0)
;~  If $iVolume >= 100 Then
;~      $iVol = 1000
;~  ElseIf $iVolume <= 0 Then
;~      $iVol = 0
;~  ElseIf $iVolume > 0 And $iVolume < 100 Then
;~      $iVol = $iVolume * 10
;~  EndIf
;~  $iRet = _mciSendString("setaudio " & $sAlias & " volume to " & $iVol)
;~  If $iRet = 0 Then
;~      Return SetError(0, 0, 1)
;~  Else
;~      Return SetError(3, 0, 0)
;~  EndIf
;~ EndFunc   ;==>_Video_Volume

;By PedroWarlock
Func _Video_Volume($sAlias, $iVol = 100, $sName = "")

    ;Declare variables
    Local $iRet

    If $iVol >= 0 And $iVol <= 100 Then
        $iVol *= 10 ; vol goes here from 0 - 1000
    EndIf

    Switch $sName
        Case "LEFT"
            $iRet = _mciSendString("setaudio " & $sAlias & " left volume to " & $iVol & " wait")

        Case "RIGHT"
            $iRet = _mciSendString("setaudio " & $sAlias & " right volume to " & $iVol & " wait")

        Case "BASS"
            $iRet = _mciSendString("setaudio " & $sAlias & " bass to " & $iVol & " wait")

        Case "TREBLE"
            $iRet = _mciSendString("setaudio " & $sAlias & " treble to " & $iVol & " wait")

        Case Else ; default 0 ""
            $iRet = _mciSendString("setaudio " & $sAlias & " volume to " & $iVol & " wait")
    EndSwitch

    ;return
    If $iRet = 0 Then
        Return 1
    Else
        Return SetError(1, 0, 0)
    EndIf
EndFunc   ;==>_Video_Volume
; =========================================================================================================
;==========================================================================================================
; Internal use functions beyond this point / Funções de uso interno além deste ponto
;==========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _mciDeviceExists
; Description....: Check if a MCI Device type exists
; Syntax.........: _mciDeviceExists($sDevice)
; Parameters ....: $sDevice   - Name of MCI Device type to check for
; Return values .: Success    - Return 1 if MCI Device type exists and @error 0
;                  Failure    - Return 0 if MCI Device type does not exist and @error 1~2
;                               @error 1 = No matching MCI Device type found.
;                               @error 2 = Failed to list any MCI Device types
; Author ........: smashly
Func _mciDeviceExists($sDevice)
    Local $aDT = _mciListDevices()
    If @error Then Return SetError(2, 0, 0)
    For $idx = 1 To $aDT[0]
        If $sDevice = $aDT[$idx] Then Return SetError(0, 0, 1)
    Next
    Return SetError(1, 0, 0)
EndFunc   ;==>_mciDeviceExists
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _mciListDevices
; Description....: List all found MCI Device types in an array
; Syntax.........: _mciListDevices()
; Parameters ....: None
; Return values .: Success    - Return 1D array of found MCI Device types and @error 0
;                               array[0] Number of MCI Device types found
;                               array[n] MCI Device type name
;                  Failure    - Return empty 1D array and @error 1
; Author ........: smashly
Func _mciListDevices()
    Local $iMD, $sTmp
    $iMD = _mciSendString("sysinfo all quantity", 255)
    If StringIsInt($iMD) Then
        For $idx = 1 To $iMD
            $sTmp &= _mciSendString("sysinfo all name " & $idx, 255) & Chr(0)
        Next
        Return SetError(0, 0, StringSplit(StringTrimRight($sTmp, 1), Chr(0)))
    EndIf
    Return SetError(1, 0, StringSplit($sTmp, Chr(0)))
EndFunc   ;==>_mciListDevices
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _mciSendString
; Description....:
; Syntax.........: _mciSendString($string[, $iLen = 0])
; Parameters ....: $string
;                  $iLen
; Return values .:
; Author ........: RazerM
Func _mciSendString($string, $iLen = 0)
    Local $iRet ; winmm.dll Fica na Pasta System32.
;~   $iRet = DllCall("winmm.dll", "int", "mciSendStringA", "str", $string, "str", "", "long", $iLen, "long", 0) ; Usado pelo smashly.
    $iRet = DllCall("winmm.dll", "dword", "mciSendStringW", "wstr", $string, "wstr", "", "uint", $iLen, "ptr", 0) ; Usado por jscript.
    If Not @error Then Return $iRet[2]
EndFunc   ;==>_mciSendString
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _MSToHMS
; Description....: Converts Milliseconds to Hours, Minutes, Seconds
; Syntax.........: _MSToHMS($iMS)
; Parameters ....: $iMS       - Milliseconds to convert
; Return values .: Success    - Returns Hours, Minutes, Seconds (HH:MM:SS)
; Author ........: smashly
Func _MSToHMS($iMS)
    Local $iHours = 0, $iMins = 0, $iSecs = 0
    If Number($iMS) > 0 Then
        $iMS = Round($iMS / 1000)
        $iHours = Int($iMS / 3600)
        $iTicks = Mod($iMS, 3600)
        $iMins = Int($iMS / 60)
        $iSecs = Round(Mod($iMS, 60))
        Return StringFormat("%02i:%02i:%02i", $iHours, $iMins, $iSecs)
    EndIf

    Return StringFormat("%02i:%02i:%02i", $iHours, $iMins, $iSecs)
EndFunc   ;==>_MSToHMS
; =========================================================================================================
; #FUNCTION# ==============================================================================================
; Name...........: _RandomStr
; Description....: Creates a random string
; Syntax.........: _RandomStr([$iLen = 10])
; Parameters ....: $iLen      - Length of string to return
; Return values .: Success    - Returns a string of random letters (a~z)
; Author ........: RazerM
Func _RandomStr($iLen = 10)
    Local $sTmp = ''
    For $i = 1 To $iLen
        $sTmp &= Chr(Random(97, 122, 1))
    Next
    Return $sTmp
EndFunc   ;==>_RandomStr
; =========================================================================================================
#endregion ==> UDF Vídeo By: smashly

 

Share this post


Link to post
Share on other sites

Bom dia Belini.

   Fiz teste aqui com o script que vc enviou e capturou todas as telas sem problemas. Com imagem normal.

   Testei com vários tipos de filmes (AVI, MP4. MPG) e sempre capturou a imagem.

   Aliás, capturou 2 telas:

  1. tela do player com a imagem
  2. tela do computador inteira com o player em 1o plano

   Daí volto a questão de que o problema são os CODECS e não o player, até porque estava analisando e vi que ele utiliza as funções do SO de Print-Screen e Alt+Print Screen, ou seja, são padrões do SO e não do Player ou ao AutoIt.

   Neste caso, sugiro vc remover todos os codecs, limpar o registro e instalar um pacote novo de codecs.

   Minha sugestão, depois de trocentos testes, é o K-Lite Mega Codec Pack, com a opção "Profile 4 - Advanced Playback WITHOUT Player" porque daí instala todos os codecs necessários sem instalar ou alterar o player que vc já tem. O que eu acho o máximo é que depois, com versões mais novas ou atualizadas do mesmo pacote, ele reconhece a instalação e faz um "quick upgrade" bem mais rápido e descomplicado.

   E vc tem a liberdade de escolher o player que mais gosta. Neste caso, o próprio AutoIt seria o Player.

   Testa aí.

Capture_Capture.jpg

CaptureWnd.jpg

Share this post


Link to post
Share on other sites

@manimal com esta versão realmente capturou a tela no windows 7 só que no xp só aceita até a versão 1384 do klite e nesta versão dá tela preta e também porque tem clientes que usam outros codecs e não vão querer mudar por isto tenho que conseguir outra forma para capturar que não seja trocando codecs.

EDITADO: No forum americano falaram prá usar _GDIPlus_Startup() junto com _ScreenCapture_Capture, tentei mas não deu certo vc conhece alguma maneira de usar GDI para capturar tela?

Share this post


Link to post
Share on other sites

olha se resolve...

; mutleey
; 09/06/2018


; print screen tela cheia
PrintScreen('Screen', 'fullscreen.jpg', 100)


; print screen parcial
PrintScreen('Region', 'region.bmp', 100, 5, 5, 300, 200)


Func PrintScreen($Type, $sFile, $Quality, $Left = "", $Top = "", $Width = "", $Height = "")
    Switch $Type
        Case "Screen"
            DllCall("wprint.dll", "int:cdecl", "CaptureScreen", "str", $sFile, "int", $Quality)
        Case "Region"
            DllCall("wprint.dll", "int:cdecl", "CaptureRegion", "str", $sFile, "int", $Left, "int", $Top, "int", $Width, "int", $Height, "int", $Quality)
    EndSwitch
EndFunc

 

DLL em anexo.

wprint.zip

Edited by mutleey
  • Like 1

Share this post


Link to post
Share on other sites

Ok, mas agora confirmamos que os problemas são realmente os codecs e a estrutura necessária para que o copiar tela seja possível.

Seu problema agora não é nem a respeito dos codecs no WinXP, porque devo ter aqui uma versão do K-Lite que funciona com esse Windows, mas a parte que vc disse que seus clientes não vão querer mexer nisso.

Quanto a conseguir ou não capturar a tela não usando codecs, já fica mais complicado pois é uma questão de sistema e não de vontade. É como querer matar a sede e não usar líquidos. Veja eu disse líquido e não água. Se fosse água, poderia matar a sede com leite, cerveja, etc (alternativas), mas todas tem a base líquida.

Neste caso dos codecs é o mesmo princípio. Eu recomendo 2 sugestões:

  1. Como vai ser para melhor, troque os codecs dos clientes, funciona para vc e para eles. E sinceramente a maioria (99%) nem sabe o que é um codec;
  2. Tente utilizar algum software de captura de tela mais profissional como ShareX ou Greenshot. Porém neste caso tem que verificar se algum deles possui algum tipo de comunicação, senão terá que usar um simulador de teclas pra ativar a captura tipo SEND("combinação maluca de teclas que ativa o software"). Neste caso, também terá que instalar um software destes e talvez o cliente não goste.

Em suma, em qualquer cenário, algum tipo de modificação no SO terá que ser feito. Este inclusive é o princípio dos programas de instalação, que por sua vez, instalam os drivers, codecs, aplicativos paralelos e tudo o mais necessário para que o programa principal funcione adequadamente. Como exemplo:

  • Instalação do PotPlayer baixa e instala um pacote de codecs próprio;
  • Instalação de vários jogos e programas que instalam sua própria versão do Visual C (2012, 2015, 2018...);
  • Instalação do Bullzip PDF (excelente impressora PDF free) que baixa e instala 3 aplicativos adicionais para poder funcionar;
  • Qualquer aplicativo que funcione com .NET (que por sua vez tbm precisa estar autalizado).

E assim por diante...

E sem contar com a dificuldade adicional que muitos destes programas não tem mais suporte ao WinXP.

Enquanto isso, vou dar uma olhada nos comandos de GDI...

Share this post


Link to post
Share on other sites

@manimal a última versão do Klite que saiu para XP foi a 1384 e deu tela preta, também tentei vários softwares de terceiros que também deram tela preta agora vou testar com estes que vc citou (ShareX ou Greenshot)

Share this post


Link to post
Share on other sites

É que quando faço a troca de vídeos dá um buraco entre um e outro ou seja fica preto no período que fecho um até começar a tocar o outro e fazendo testes ví que dá prá colocar uma imagem no pic até iniciar o próximo aí tiro um print antes de fechar e coloco a imagem no pic até o próximo abrir, fazendo assim dá a impressão que deu uma pequena pausa ao invés de ficar tela preta entre um vídeo e outro!

Share this post


Link to post
Share on other sites

Bom se tratando de autoit acho que vai ser um "tiro no pé", lembramos autoit é lento então mesmo que seu script chame o próximo vídeo e logo em seguida chame a função pra tirar um "print" antes de fechar o vídeo em reprodução, como sabemos o autoit demora um certo tempinho pra executar certas funções (creio eu que tirar um print) demoraria quase que o mesmo tempo entre carregar um outro vídeo, ou seja iria talvez minimizar o tal "buraco"..  não seria mais viável criar um banner seu com uma propaganda ou com a frase "Carregando...", "Loading..." e apenas renderizar ela no pic?

Share this post


Link to post
Share on other sites

@mutleey fiz o teste aqui e funciona pois trocar o vídeo pelo print que foi tirado é rápido e não dá prá perceber e aí fica na tela a imagem até carregar o proximo vídeo e assim que inicia o vídeo o pic é limpo, pensei em colocar um banner como vc falou mas não gostei pois fica muito repetitivo mostrar a mesma coisa a cada troca de vídeo, do windows 7 prá cima já está funcionando e o problema agora é conseguir tirar o print no xp também!

Share this post


Link to post
Share on other sites

Entendi.. bom no caso então uma sugestão seria você ao invés de tirar um print extrair um frame do vídeo e renderizar, lógico que o script teria que estar acompanhando o "andar" do video para extrair o frame na mesma parte que esta em reprodução.. e isso é só uma ideia, teria que testar e ver se ficaria eficaz.

Share this post


Link to post
Share on other sites
20 hours ago, mutleey said:

Mais você precisa do "print" ou de uma imagem "frame" do video?

Excelente pergunta Mutleey. Vai levar medalha por essa ;)

Eu pensei que o Belini queria um print pois havia uma função no soft que o cliente fazia o print (user request), mas agora pelo papo deu a entender que o print é apenas para preencher o espaço (ou buraco) entre um vídeo e outro, isso?

Se for este o caso, porque não deixar uma série de imagens prontas e daí randomizar entre elas? O efeito é o mesmo.

É o caso do banner, só que iria mudar a imagem. Na verdade, os clientes não ligam muito para isso. Quem se liga nessa viagem somos nós!

Eu apanhei muito (e ainda apanho) pra não perder muito tempo viajando em um detalhe do soft (perfeccionismo) que muitas vezes o cliente nem nota.

Sabe aquele "efeito arredondado" nas bordas da janela que vc movimentou meio mundo pra fazer? Pois é o ciente nem sabia que estava ali ;(

O problema não é fazer o efeito mas o tempo dispendido nessa tarefa, que poderia ser melhor aproveitado desenvolvendo novas "features" ou melhorando o código em algo que realmente faça diferença.

Eu ainda faço isso, mas tento me policiar para reduzir o tempo gasto nestas coisas! Não que não sejam legais, só tem que avaliar o tempo x efeito!

Se dependesse só de mim, eu ficava polindo cada pixel da interface ;)

  • Thanks 1

Share this post


Link to post
Share on other sites

@manimal eu também tenho este defeito mas no caso deste programa preciso mesmo fazer o mais perfeito possível para ficar bem profissional e acho que colocando imagens entre os vídeos não fica bom, quanto a extrair o frame qual função poderia ser usada?

Share this post


Link to post
Share on other sites

Olha vou te dar um exemplo, mais pode ser que você tenha que ajustar para seu proposito..

; mutleey
; 12/06/2018

; de uma olhada nas opçoes do ffmpeg (ffmpeg -help)

$vidIN = "meu_video.mp4" ; video entrada
$imgOUT = "frame.jpg" ; frame saida
$outRES = "1024x768" ; resolução da imagem
$vidTIME = "00:01:14" ; posição do video reproduzido HH:MM:SS

ShellExecute("ffmpeg.exe", '-ss ' & $vidTIME & ' -i ' & $vidIN & ' -t 1 -s '& $outRES & ' -f image2 ' & $imgOUT, @ScriptDir, "open", @SW_HIDE)

ffmpeg Download

obs: isso é só uma ideia, existe outros softwares que podem extrair frames, basta testar e ajustar..

Edited by mutleey
  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

O MciSendString deveria capturar frame de vídeo. Eu tentei aqui _mciSendString('capture mpegvideo as "C:\image.jpg" at destination'), mas nem funcionou, estranho.

Share this post


Link to post
Share on other sites

Olá Pedro.

   Não tenho certeza se a sintaxe do comando capture está correta. O Help não ajudou e não consegui exemplos práticos.

   Mas imagino que deva ter algum problema com ela, pois para capturar a tela os programadores originais da função que o Belini usou, preferiram usar uma outra rotina para tal.

   Estranho, mas sua dúvida é válida!

Share this post


Link to post
Share on other sites

Encontrei outra UDF que tem a função capture mas não funcionou e ainda toca o vídeo acelerado, tentei mudar em speed mas nem abre quando altero.

;===============================================================================
;
; Function Name:    _MediaOpen()
; Description:      Opens a media file.
; Parameter(s):     $s_location     - Location of the media file
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns Media ID needed for the other media functions
;                   On Failure - Returns 0  and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaOpen($s_location, $h_guihandle = 0)
    If Not IsDeclared("i_MediaCount") Then Global $i_MediaCount=0
    $i_MediaCount=$i_MediaCount+1
    DllCall("winmm.dll","int","mciSendString","str","open "&FileGetShortName($s_location)&" alias media"&String($i_MediaCount),"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return String($i_MediaCount)
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaCreate()
; Description:      Creates a new media for recording, capturing etc.
; Parameter(s):     $s_format     - Format of the file.
;                   0 = CD Audio
;                   1 = Digital video
;                   2 = Overlay
;                   3 = sequencer
;                   4 = Vcr
;                   5 = Video disc
;                   6 = Wave Audio
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns Media ID needed for the other media functions
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaCreate($s_format)
    If Not IsDeclared("i_MediaCount") Then Global $i_MediaCount=0
    $i_MediaCount=$i_MediaCount+1
    If $s_format=0 Then
        $s_Use="cdaudio"
    ElseIf $s_format=1 Then
        $s_Use="digitalvideo"
    ElseIf $s_format=2 Then
        $s_Use="overlay"
    ElseIf $s_format=3 Then
        $s_Use="sequencer"
    ElseIf $s_format=4 Then
        $s_Use="vcr"
    ElseIf $s_format=5 Then
        $s_Use="videodisc"
    ElseIf $s_format=6 Then
        $s_Use="waveaudio"
    EndIf
    DllCall("winmm.dll","int","mciSendString","str","open new type "&$s_Use&" alias media"&String($i_MediaCount),"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return String($i_MediaCount)
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaPlay()
; Description:      Plays a opened media file.
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
;                   [optional] $i_From        - Sets time in seconds where to begin playing
;                   [optional] $i_To          - Sets time in seconds where to bstop playing
;                   [optional] $i_Speed       - Sets the speed to play with
;                   [optional] $f_Fast        - When 1 it will play faster then normal
;                   [optional] $f_Slow        - When 1 it will play slower then normal
;                   [optional] $f_Fullscreen  - When 1 movies will play fullscreen
;                   [optional] $f_Repeat      - When 1 it will keep repeating
;                   [optional] $f_Reverse     - When 1 the movie will been played reversed
;                   [optional] $f_Scan        - When 1 plays as fast as possible
;                   The default value of all the optional parameters is 0.
;                   Some file formats dont understand some of the optional functions
;                   Experimate with it.
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaPlay($i_MediaId,$i_From = 0,$i_To = 0,$i_Speed = 0,$f_Fast = 0,$f_Slow = 0,$f_Fullscreen = 0,$f_Repeat=0,$f_Reverse=0,$f_Scan = 0)
    $s_Parameters=""
    If $i_From Then $s_Parameters=$s_Parameters&" from "&$i_From
    If $i_To Then $s_Parameters=$s_Parameters&" to "&$i_To
    If $i_Speed Then $s_Parameters=$s_Parameters&" speed "&$i_Speed
    If $f_Fast Then $s_Parameters=$s_Parameters&" fast"
    If $f_Fullscreen Then $s_Parameters=$s_Parameters&" fullscreen"
    If $f_Repeat Then $s_Parameters=$s_Parameters&" repeat"
    If $f_Reverse Then $s_Parameters=$s_Parameters&" reverse"
    If $f_Scan Then $s_Parameters=$s_Parameters&" scan"
    If $f_Slow Then $s_Parameters=$s_Parameters&" slow"
    DllCall("winmm.dll","int","mciSendString","str","play media"&$i_MediaId&$s_Parameters,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaCapture()
; Description:      Copies the contents of the frame buffer and stores it in the
;                   specified file.
;                   Stop recording with _MediaStop()
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
;                   $s_Location    - Location where to store the file.
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaCapture($i_MediaId,$s_Location)
    DllCall("winmm.dll","int","mciSendString","str","capture media"&$i_MediaId&" "&FileGetShortName($s_Location),"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaRecord()
; Description:      Records from a microphone
;                   Stop recording with _MediaStop()
;                   (choose position with _MediaSeek())
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaRecord($i_MediaId)
    DllCall("winmm.dll","int","mciSendString","str","record media"&$i_MediaId,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaCut()
; Description:      Cuts a specified part of the movie to the clipboard.
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
;                   $i_From        - From time in seconds
;                   $i_To          - To time in seconds
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaCut($i_MediaId,$i_From,$i_To)
    DllCall("winmm.dll","int","mciSendString","str","cut media"&$i_MediaId&" from "&$i_From&" to "&$i_To,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaCopy()
; Description:      Copies a specified part of the movie to the clipboard.
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
;                   $i_From        - From time in seconds
;                   $i_To          - To time in seconds
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaCopy($i_MediaId,$i_From,$i_To)
    DllCall("winmm.dll","int","mciSendString","str","copy media"&$i_MediaId&" from "&$i_From&" to "&$i_To,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaPaste()
; Description:      Paste media from the clipboard.
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaPaste($i_MediaId,$i_From,$i_To)
    DllCall("winmm.dll","int","mciSendString","str","paste media"&$i_MediaId,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaDelete()
; Description:      Deletes a specified part of the movie.
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
;                   $i_From        - From time in seconds
;                   $i_To          - To time in seconds
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaDelete($i_MediaId,$i_From,$i_To)
    DllCall("winmm.dll","int","mciSendString","str","delete media"&$i_MediaId&" from "&$i_From&" to "&$i_To,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaStop()
; Description:      Stops playing/recording of a Media ID
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaStop($i_MediaId)
    DllCall("winmm.dll","int","mciSendString","str","stop media"&$i_MediaId,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaSeek()
; Description:      Moves to a specified Position and stops.
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
;                   $i_Position    - Position in seconds to move to, -1 goes to start
;                   -2 goes to end
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaSeek($i_MediaId,$i_Position)
    If $i_Position = -1 Then
        $s_Position = "end"
    ElseIf $i_Position = -2 Then
        $s_Position = "begin"
    Else
        $s_Position = String($i_Position)
    EndIf
    DllCall("winmm.dll","int","mciSendString","str","seek media"&$i_MediaId&" to "&$s_Position,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaPause()
; Description:      Pauses playing/recording of a Media ID
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaPause($i_MediaId)
    DllCall("winmm.dll","int","mciSendString","str","pause media"&$i_MediaId,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaResume()
; Description:      Resumes playing/recording of a Media ID
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaResume($i_MediaId)
    DllCall("winmm.dll","int","mciSendString","str","resume media"&$i_MediaId,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaSave()
; Description:      Saves a opened Media ID to the selected file
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
;                   $s_Location    - Location to save to (must be full path)
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaSave($i_MediaId,$s_Location)
    DllCall("winmm.dll","int","mciSendString","str","save media"&$i_MediaId&" "&FileGetShortName($s_Location),"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc
;===============================================================================
;
; Function Name:    _MediaClose()
; Description:      Closes a existing Media ID
; Parameter(s):     $i_MediaId     - Media ID returned by _MediaOpen()/MediaCreate()
; Requirement(s):   AutoIt
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @ERROR = 1
; Author(s):        svennie
;
;===============================================================================
Func _MediaClose($i_MediaId)
    DllCall("winmm.dll","int","mciSendString","str","close media"&$i_MediaId,"str","","int",65534,"hwnd",0)
    If @error Then
        SetError(1)
        Return 0
    Else
        Return 1
    EndIf
EndFunc

 

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


×