automatizado de Canal de TV, basado en Batch DOS y VBasic…

Iniciado por Dsalomon, 2 Septiembre 2012, 09:23 AM

0 Miembros y 1 Visitante están viendo este tema.

Dsalomon

excellente... voy a hacer las modificaciones en el codigo y te aviso... que resultado me dio... se me ocurre que para darle play o pausa usare Send keys para no usar aplicaciones de terceros..

Saludos...

Eleкtro

Cita de: Dsalomon en  5 Septiembre 2012, 16:33 PMpara darle play o pausa usare Send keys para no usar aplicaciones de terceros..
Supongo que te refieres a la función "SendKeys" de VisualBasicScript?

Pues hombre, también puedes mover el cursor con VBS, Solo tienes que buscar en Google...
Pero yo usaría nircmd para simplificar las dos tareas, Es una aplicación multiusos que es obligado tener "por si acaso".

Saludos








Dsalomon

maestro te  agradeceria si me corriges el codigo... esta muy bueno el tuyo pero todavia me falta... por aprender:


Código (dos) [Seleccionar]
@Echo off

REM PASO 1 -  - - - - ABRIR el programa Winamp y darle PLAY - - - - - - - - - - - - - - - - - - - - -

START /D "%Programfiles%\Winamp\" winamp.exe

(
Echo Set objShell = WScript.CreateObject("WScript.Shell")
objShell.AppActivate "WINAMP"
    Wscript.Sleep 1000

REM la tecla "X" le da PLAY a la ventana activa en este caso la ventana winamp

Echo oWSH.SendKeys "X"
)>"%TEMP%\play.vbs"

Start /B wscript "%TEMP%\play.vbs"
ping localhost -n 3 > nul
Del "%TEMP%\play.vbs"


REM PASO 2 - - - -  SI BSPLAYER ESTA ACTIVO CIERRE Ds Clock, Ds Logo y Text Ticker y PAUSAR Winamp

@Echo off

:Check

Rem Reseteamos la variable "CLOSE".
Set Close=

Rem Busca el proceso en activo "bsplayer", Si lo encuentra le da un valor a la variable "Close".

Tasklist /FI "IMAGENAME eq bsplayer.exe"  | Find /I "bsplayer" >NUL && (Set Close=SI)

Rem Si la variable "close" está definida, Mata los siguientes procesos.
If Defined CLOSE (
Taskkill /F /T /IM "dsclock.exe" >NUL 2>&1
Taskkill /F /T /IM "dslogo.exe" >NUL 2>&1
Taskkill /F /T /IM "TxTicker.exe" >NUL 2>&1

Echo Set objShell = WScript.CreateObject("WScript.Shell")
objShell.AppActivate "WINAMP"
Wscript.Sleep 1000

REM la tecla "C" le da PAUSA a la ventana activa en este caso la ventana winamp
Echo oWSH.SendKeys "(c)"
)>"%TEMP%\pausa.vbs"

Start /B wscript "%TEMP%\pausa.vbs"
ping localhost -n 3 > nul
Del "%TEMP%\pausa.vbs"

REM PASO 3 - - - Si no esta abierto Bsplayer inicie el programa Ds Clock, Ds Logo y a Winamp darle PLAY

) ELSE (
REM Si la variable "CLOSE" NO esta definida, Abre los siguientes procesos.
START /D "%Programfiles%\DS Clock\" dsclock.exe
FOR /R %%_ in (*DsLogo.exe) do ("%%_")

Echo Set objShell = WScript.CreateObject("WScript.Shell")
objShell.AppActivate "WINAMP"
    Wscript.Sleep 1000

REM la tecla "X" le da PLAY a la ventana activa en este caso la ventana winamp

Echo oWSH.SendKeys "(X)"
)>"%TEMP%\pausa.vbs"

Start /B wscript "%TEMP%\pausa.vbs"
ping localhost -n 3 > nul
Del "%TEMP%\pausa.vbs"
)


Ping -n 3 LOCALHOST >NUL
Rem Vuelve a la etiqueta principal.
Goto :Check



ya casi esta... te agradezco la atencion y todos los consejos que me has brindado... sin duda eres el mejor...

Saludos desde Guatemala...

Eleкtro

Veo que para darle al play/pause usas los atajos especiales de Winamp, no habia caido en eso mira! No se como se me pasó. :xD

Pero el script está lleno de errores como para que funcione, sobretodo de sintaxis.
Voy a comentar solo el error más importante:

CitarSet objShell = WScript.CreateObject("WScript.Shell")
oWSH.SendKeys "X"
Aquí fallas en algo, ¿No te das cuenta?
La variable la defines como "objshell", no "oWSH".

Aparte de muchos más errores críticos, el script se puede simplificar y mejorar mucho, Aquí tienes:

Código (dos) [Seleccionar]
@Echo off

:: [PASO 1]
:: Ejecutar el proceso Winamp y darle PLAY.
START /D "%Programfiles%\Winamp\" winamp.exe
Call :Winamp_Key "x"

:: [PASO 2]
:: Si BSPLAYER está activo, cerrar "Ds Clock", "Ds Logo", "Text Ticker", y darle PAUSE a Winamp.
:: Si BSPLAYER no está activo, iniciar "Ds Clock", "Ds Logo", y darle PLAY a Winamp.
:Loop
Tasklist /FI "IMAGENAME eq bsplayer.exe"  | Find /I "bsplayer" >NUL && (
For /F %%# in ('Tasklist ^| Find /I "DSLOGO"') Do (Taskkill /F /T /IM "%%#" >NUL 2>&1)
Taskkill /F /T /IM "dsclock.exe"  >NUL 2>&1
Taskkill /F /T /IM "TxTicker.exe" >NUL 2>&1
Call :Winamp_Key "c"
) || (
START /D "%Programfiles%\DS Clock\" dsclock.exe
FOR /R %%_ in (*DsLogo.exe) do ("%%_")
Call :Winamp_Key "x"
)

:Winamp_Key
:: Hotkeys Winamp:
::
:: c=Pause
:: x=Play
::
If NOT "%~1" EQU "" (
(
Echo Set objShell = WScript.CreateObject("WScript.Shell"^)
Echo Do Until Success = True
Echo     Success = objShell.AppActivate("winamp"^)
Echo     Wscript.Sleep 250
Echo Loop
Echo objShell.SendKeys "%~1"
Echo Wscript.quit
)>"%TEMP%\winamp.vbs"
Start /W wscript "%TEMP%\winamp.vbs"
Del /Q "%TEMP%\Winamp.vbs"
Goto :EOF
)

Ping -n 3 LOCALHOST >NUL
Goto :Loop


Saludos








Dsalomon

Cita de: EleKtro H@cker en  5 Septiembre 2012, 18:06 PM
Supongo que te refieres a la función "SendKeys" de VisualBasicScript?

Pues hombre, también puedes mover el cursor con VBS, Solo tienes que buscar en Google...
Pero yo usaría nircmd para simplificar las dos tareas, Es una aplicación multiusos que es obligado tener "por si acaso".

Saludos


gracias por la guia es lo mas avanzado que jamas  haya intentado hacer... con el block de notas...

si habia pensado en usar el plug in de terceros como el Clever para winamp y guardarlo en la misma carpeta del batch... alguna vez publique algo de eso aqui... pero en este caso lo pienso usar en mis 2 Pc que tengo para este fin de automatizacion...

me ha gustado tanto lo de buscar la manera por que he aprendido de VB tambien por eso es que me me he guiado con ejemplos...


http://foro.elhacker.net/empty-t321121.0.html

Dsalomon

maestro sera que se puede corregir... asi



Código (dos) [Seleccionar]
@Echo off

::[PASO 1] ABRIR Winamp,PLAY a Winamp, ABRIR Dsclock.exe, Dslogo.exe y Dslogo2.exe

START /D "%Programfiles%\Winamp\" winamp.exe
Call :Winamp_Key "x"
START /D "%Programfiles%\DS Clock\" dsclock.exe
FOR /R %%_ in (*DsLogo.exe) do ("%%_") | FOR /R %%_ in (*DsLogo2.exe) do ("%%_")

::[PASO 2] PROGRAMAR BSplayer y sus listas en el el Escritorio activo - el archivo .bsl es nativo de BSplayer -

at 6:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
at 9:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
at 12:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
at 15:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
at 18:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
at 21:45:00 /interactive start "%DesktopPath%" LISTA1.bsl

at 7:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
at 10:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
at 13:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
at 16:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
at 19:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
at 22:30:00 /interactive start "%DesktopPath%" LISTA2.bsl

at 8:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
at 11:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
at 14:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
at 17:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
at 20:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
at 23:15:00 /interactive start "%DesktopPath%" LISTA3.bsl

at 9:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
at 12:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
at 15:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
at 18:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
at 21:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
at 0:00:00 /interactive start "%DesktopPath%" LISTA4.bsl

::[PASO 3]
:ETIQUETA1

::[PASO 4] Busque El Proceso BSplayer y al encontrarlo, PAUSE Winamp, CERRAR: Dsclock.exe, Dslogo.exe, Dslogo2.exe y TextTicker.exe

Tasklist /FI "IMAGENAME eq bsplayer.exe"  | Find /I "bsplayer" >NUL && (
Call :Winamp_Key "c"
Taskkill /F /T /IM "dsclock.exe"  >NUL 2>&1
Taskkill /F /T /IM "Dslogo.exe" >NUL 2>&1
Taskkill /F /T /IM "Dslogo2.exe" >NUL 2>&1
Taskkill /F /T /IM "TxTicker.exe" >NUL 2>&1

::[PASO 5] Esperar  que proceso BSplayer TERMINE de reproducir y se cierre después: Dar PLAY a Winamp, Abrir Dsclock, Abrir Dslogo y Dslogo2
)
Echo Set WshShell = CreateObject("WScript.Shell")
Echo Set oExec = WshShell.Exec("BSplayer")
Echo Do While oExec.Status = 0
     Echo WScript.Sleep 100
Echo Loop
Echo WScript.Echo oExec.Status
)>"%TEMP%\winamp.vbs"
Start /W wscript "%TEMP%\BSplayer.vbs"
Del /Q "%TEMP%\BSplayer.vbs"
Goto :EOF
)

Call :Winamp_Key "x"
START /D "%Programfiles%\DS Clock\" dsclock.exe
FOR /R %%_ in (*DsLogo.exe) do ("%%_") | FOR /R %%_ in (*DsLogo2.exe) do ("%%_")


:Winamp_Key
:: Hotkeys Winamp:
::
:: c=Pause
:: x=Play
::

Ping -n 3 LOCALHOST >NUL

::[PASO 6] repetir hasta Etiqueta 1
Goto ::ETIQUETA1

Eleкtro

#16
Citar:Winamp_Key
:: Hotkeys Winamp:
::
:: c=Pause
:: x=Play
::

Ping -n 3 LOCALHOST >NUL

Porque la rutina ":Winamp_Key" solo contiene un "ping"?  :¬¬
has eliminado la función por completo, en la primera página la tienes, vuelvela a copiar.

Aparte:
Citar)>"%TEMP%\winamp.vbs"
Start /W wscript "%TEMP%\BSplayer.vbs"
Fíjate bien a donde redireccionas y lo que intentas ejecutar (no existe).


Citar::[PASO 5]
)
Echo Set WshShell = CreateObject("WScript.Shell")
Echo Set oExec = WshShell.Exec("BSplayer")
...
)

(
Echo Set WshShell = CreateObject("WScript.Shell"^)
Echo Set oExec = WshShell.Exec("BSplayer"^)
etc...
)

Citar
FOR /R %%_ in (*DsLogo.exe) do ("%%_") | FOR /R %%_ in (*DsLogo2.exe) do ("%%_")

¿Porque usas la pipe |?

FOR /R %%_ in (*DsLogo*.exe) do ("%%_")

saludos








Dsalomon

Gracias maestro seguire tus consejos y por la noche hare una prueba... ;-)

Dsalomon

Mastro me puedes explicar como funcionan estas lineas por que en realidad solo copie y pegue peno entiendo su funcionamiento, sobre todo de las teclas de winamp


Código (dos) [Seleccionar]
)

:Winamp_Key
:: Hotkeys Winamp:
::
:: c=Pause
:: x=Play
::
If NOT "%~1" EQU "" (
(
Echo Set objShell = WScript.CreateObject("WScript.Shell"^)
Echo Do Until Success = True
Echo     Success = objShell.AppActivate("winamp"^)
Echo     Wscript.Sleep 250
Echo Loop
Echo objShell.SendKeys "%~1"
Echo Wscript.quit
)>"%TEMP%\winamp.vbs"
Start /W wscript "%TEMP%\winamp.vbs"
Del /Q "%TEMP%\Winamp.vbs"
Goto :EOF
)

Ping -n 3 LOCALHOST >NUL
Goto :Loop


Eleкtro

Ay señor... :xD Con explicarte lo que hacen las lineas no sería suficiente, necesitas aprender lo que es un argumento...

Call :Winamp_Key "X"
Esto llama a la etiqueta "Winamp_key" y le pasa un argumento, la "X".

If NOT "%~1" EQU "" ()
Si por error no se le pasa un argumento pues el código del interior no se ejecuta, así se evitan aún más errores xD.

las lineas con dobles puntos :: son lineas de comentario, nada más.

Se escribe un código VBS en el archivo "%TEMP%\winamp.vbs"

El código VBS ya sabes lo que hace, envía el argumento de la etiqueta a winamp (La "X" o la "C").

No hay más.

Saludos