Hola amigos
Como puedo hacer para mostrar el tiempo de duracion de un archivo de video, como lo muestra el explorer de windows
He intentado con Directory y con el comando DIR y no muestra.
Gracias por la ayuda
Saludos,
Adhemar
/*------------------------------------------------------------------------------*/
*STATIC Function GetPropFile( oWnd, cFile )
/*------------------------------------------------------------------------------*/
/*
LOCAL oActiveX, pStatus := Array( 11 )
oActiveX = TActiveX():New( oWnd, "MediaPlayer.MediaPlayer.1",0,0,0,0)
oActiveX:SetProp( "FileName", cFile )
oActiveX:Hide()
pStatus[1] := cFileNoPath( oActiveX:GetProp( "FileName" ) ) // Nombre del fichero
pStatus[2] := cFilePath( oActiveX:GetProp( "FileName" ) ) // Path
pStatus[3] := oActiveX:GetProp( "Duration" ) // Duracion
pStatus[4] := oActiveX:GetProp( "ImageSourceWidth" ) // Ancho fotograma
pStatus[5] := oActiveX:GetProp( "ImageSourceHeight" ) // Alto fotograma
pStatus[6] := oActiveX:GetProp( "BandWidth" ) // Velocidad de datos
pStatus[7] := oActiveX:GetProp( "Rate" ) // Velocidad fotogramas/s
pStatus[8] := oActiveX:GetProp( "SourceProtocol" ) // Protocolo de datos
pStatus[9] := FDate( oActiveX:GetProp( "FileName" ) ) // Fecha creacion
pStatus[10] := FTime( oActiveX:GetProp( "FileName" ) ) // Hora creacion
pStatus[11] := FSize( oActiveX:GetProp( "FileName" ) ) // Tamaño
oActiveX:DO( "Stop" )
oActiveX:End()
DeleteObject( oActiveX )
Return( pStatus )
#include <windows.h>
#include <dshow.h>
extern "C"
{
#include <hbapi.h>
}
HB_FUNC( GETVIDEODURATION )
{
HRESULT hr;
IGraphBuilder * pGraph;
IMediaSeeking * pMediaSeeking;
wchar_t * lpszFileNameW = hb_mbtowc( hb_parc( 1 ) );
LONGLONG lDurationStream = 0;
hr = CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, ( void ** ) &pGraph );
if( SUCCEEDED( hr ) )
{
hr = pGraph->QueryInterface( IID_IMediaSeeking, ( void ** ) &pMediaSeeking );
if ( SUCCEEDED( hr ) )
{
hr = pGraph->RenderFile( lpszFileNameW, NULL );
if ( SUCCEEDED(hr) )
{
pMediaSeeking->GetDuration( &lDurationStream );
pMediaSeeking->Release();
}else
lDurationStream = -1;
}else
lDurationStream = -2;
}else
lDurationStream = -3;
hb_xfree( lpszFileNameW );
hb_retnl( lDurationStream );
}
#include "fivewin.ch"
*
Function Main()
Private oDlg, oActiveX,aCoors:=GetCoors( FindWindow("Shell_TrayWnd","") ),aPaths:={}
WinExec("ListVideos.BAT",0) //DIR D:\VIDEOS\*.AVI /-C >D:\VIDEOS\VIDEOS.TXT
oFile:= TTxtFile():New( "D:\VIDEOS\VIDEOS.TXT" )
ZpDir:=""
Do while !oFile:EOF()
cLinea:=oFile:ReadLine()
EsDir:=Subs(cLinea,2,2)
If At(Left(cLinea,1),"0123456789")>0 .or. EsDir="Di"
If EsDir="Di"
cDir:=ALLTRIM(Subs(cLinea,16,60))+"\"
If !ZpDir=cDir
ZpDir:=cDir
Endif
Else
cNom:=AllTrim(Subs(cLinea,42,80))
AADD( aPaths,cDir+cNom )
Endif
Endif
oFile:Skip()
EndDo
oFile:End()
For I=1 to Len(aPaths)
VideoPath:=aPaths[ I ]
If Empty(VideoPath)
MsgAlert("No existe el video","Lo siento")
Return
Endif
DEFINE DIALOG oDlg TITLE UPPER(aPaths[ I ]) FROM 0,1 TO aCoors[1]+5, aCoors[4] PIXEL;oDlg:lHelpIcon := .F.
ACTIVATE DIALOG oDlg CENTER ON INIT MuestraVIDEO()
oDlg:End()
oActiveX:Stop()
Next I
Return NIL
*
STATIC Function MuestraVIDEO()
oActiveX = TActiveX():New( oDlg,"MediaPlayer.MediaPlayer.1",oDlg:nTop, oDlg:nLeft, oDlg:nRight, oDlg:nBottom )
oActiveX:ShowControls:=.T.
oActiveX:Balance:=-10
oActiveX:FileName = VideoPath
Return Nil
*
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 61 guests