Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Dsalomon en 2 Septiembre 2012, 09:23 am



Título: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 2 Septiembre 2012, 09:23 am
Hoy en día dirijo un pequeño pero prometedor proyecto de un canal de TV local, la necesidad de mejorar cada día me ha llevado a crear una serie de herramientas, personalizadas en conjunto con algunas ya existentes, para lograr mi objetivo, mi idea que con los años y ayuda de expertos he ido formando funciona de la siguiente manera:

1. Utilizo Principalmente Winamp (Winamp.exe) para tirar mis videos, películas, etc, debido a que esta aplicación recibe una gran serie de complementos, plugins, comandos, etc.

2.   Como segundo reproductor utilizo otro mas que soporta casi igual o diferente tipo de comandos Bsplayer (Bsplayer.exe) pero el uso especifico es reproducir unplay list con jingles o anuncios

3.   Utilizo un software llamado Ds clock para mostrar la hora en la pantalla (Dsclock.exe)

4.   Y otro para mostrar logotipos llamado Desktop Logo (DsLogo.exe)

5.   Y finalmente otra aplicación de pago llamada TextTcker (Barra.exe)  para el scrool text…

Bueno  dirán que quiere decir con esto, además qye tiene que ver con programación… XD…

Bueno aquí entra lo poco que he implementado… pero hoy por hoy me doy cuenta que necesito saber algo de programación para hacer funcionar todo esto

Para evitar abrir programas por programas cree una pequeña línea de comandos DOS o batch y uno o fusiono las 2 aplicaciones graficas o informativas

Ds Clock (Dsclock.exe)+ Desktop logo (DsLogo.exe) = LOGO Y HORA.bat o compilado .exe

Los scrips anteriores que use son estos, pero ya me están siendo obsoletos o incómodos para mi objetivo por lo cual tratare de compilar uno mejor


Así:

Código
  1. @echo off
  2. START /D "X:\Disco\Programa\Desktop Logo 1" DesktopLogo.exe
  3. ping -n 5 localhost>nul
  4. START /D "C:\Archivos de programa\DS Clock\" dsclock.exe
  5.  

o con este otros 2 que me acaban de facilitar
Código
  1. @echo off
  2. FOR /R %%_ in (*DsLogo.exe) do ("%%_")
  3.  

No sé pero no los pude unir  así que los hice por aparte y después los compile juntos…
Código
  1. @echo off
  2. START /D "%PROGRAMFILES%\DS Clock" dsclock.exe
  3.  


Para hacerlos desaparecer o quitarlos he usado el comando Batch Kill process

Código
  1. TASKKILL /IM Desktop logo1.exe /F >nul
  2. TASKKILL /IM dsclock.exe /F >nul
  3. TASKKILL /IM TxtTick.exe /F >nul
  4.  

Pero queda el molesto icono en el Systray que muestra los procesos abiertos.
Como se darán cuenta programar esto es sencillo pero me ha resultado incomodo en algún modo…

Que busco hacer ahora…

1 necesito hacer un script que otra vez el llamado de las aplicaciones graficas pero que corra únicamente si el proceso Winamp está corriendo o activo y si detecta el proceso Bsplayer se cierre:
•   Ds clock
•   DsLogo
•   Barra ( si esta activa y es opcional)


presentación de los intentos de fusionar mi idea
SCRIPT LOGO Y HORA AVANZADO.BAT

Código
  1. @echo off
  2. TASKLIST /FI "winamp.exe " | findstr PID >nul
  3. IF %ERRORLEVEL% LEQ 0 Ping -n 5 localhost >nul & goto  START /D "C:\Archivos de programa\DS Clock\" dsclock.exe & FOR /R %%_ in (*DsLogo.exe) do ("%%_") & Ping -n 5 localhost >nul & goto
  4. IF NOT %ERRORLEVEL% LEQ 0 TASKKILL /IM DsLogo.exe /F >nul & TASKKILL /IM dsclock.exe /F >nul
  5. TASKKILL /IM TxtTick.exe /F >nul do ("%%_") & Ping -n 5 localhost >nul & goto
  6.  

Pero no se cómo incluir este codigo VB:

ejemplo de codigo VB No. 1

Código
  1. Select Case Status
  2.       Case 1
  3.          WinAMP_GetStatus = "PLAYING"
  4.       Case 3
  5.          WinAMP_GetStatus = "PAUSED"
  6.       Case Else
  7.          WinAMP_GetStatus = "STOPPED"
  8.    End Select



Ejemplo de codigo VB   numero 2:

Código
  1. Function WinAMP_GetStatus() As String
  2.  
  3.    '----------------------------------------------------------'
  4.    'Emula la condicion de Winamo: Play, Pausa y Detener'
  5.     'Retrieves the status of WinAMP: PLAYING, PAUSED or STOPPED'
  6.    '----------------------------------------------------------'
  7.  
  8.    Dim Status As Long
  9.    Dim i As Long
  10.  
  11.    If hWndWinAMP = 0 Then
  12.       MsgBox "WinAMP window not found yet...", vbOKOnly + vbCritical, "WinAMP Not Found"
  13.       Exit Function
  14.    End If
  15.  
  16.    Status = SendMessage(hWndWinAMP, WM_USER, 0, WA_GETSTATUS)
  17.  
  18.    Select Case Status
  19.       Case 1
  20.          WinAMP_GetStatus = "PLAYING"
  21.       Case 3
  22.          WinAMP_GetStatus = "PAUSED"
  23.       Case Else
  24.          WinAMP_GetStatus = "STOPPED"
  25.    End Select
  26.  
  27. End Function


Algo así:


Citar
┌─────────┐    
   SI
   Winamp está en Play 
↓   Ejecute el Script: 
   Abrir
        1. Ds clock
        2. DsLogo


└─   
┌─   Pero

   Si el proceso Bsplayer .exe  está ejecutándose o Winamp está en pausa    
   
   Ejecute el Script: 
↓   Cerrar los programas
   1. Ds clock
   2. DsLogo
   3. Barra


   FIN
└─────────┘


Que haría ahora compilaría en un solo script el abrir el logo y la hora si se cumplen determinadas acciones, eso me ahorraría mucho trabajo de tareas programadas…
Agradeceré cualquier ayuda.

Saludos desde Guatemala.

Dsalomon.


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 3 Septiembre 2012, 00:49 am
viendo otros codigos de por alli logre hacer esto que es casi el 40% de lo que quiero hacer:

Código
  1. @echo off
  2.  
  3. ::set define el proceso con una letra::
  4.  
  5. :repetir
  6. set w=bsplayer.exe
  7. set Dsl=Dslogo.exe
  8.  
  9. ::buscar el proceso Bsplayer y si lo encuentra cierre el proceso Dslogo::
  10.  
  11. tasklist | find "%w%" && taskkill /f /im %Dsl% | Ping -n localhost >nul & goto :repetir
  12.  
  13.  
  14.  
  15. ::Continuara por que todavia me faltan agregar mas programas juntos ::


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Eleкtro en 3 Septiembre 2012, 10:02 am
Citar
┌─────────┐    
   SI
   Winamp está en Play
↓   Ejecute el Script:
   Abrir
        1. Ds clock
        2. DsLogo


└─  
┌─   Pero

   Si el proceso Bsplayer .exe  está ejecutándose o Winamp está en pausa    
  
   Ejecute el Script:
↓   Cerrar los programas
   1. Ds clock
   2. DsLogo
   3. Barra


   FIN
└─────────┘


Check.bat
Código
  1. @Echo off
  2.  
  3. :Check
  4.  
  5. Rem Reseteamos la variable "CLOSE".
  6. Set Close=
  7.  
  8. Rem Busca el proceso en activo "bsplayer", Si lo encuentra le da un valor a la variable "Close".
  9. Tasklist /FI "IMAGENAME eq bsplayer.exe"  | Find /I "bsplayer" >NUL && (Set Close=SI)
  10.  
  11. Rem Busca el proceso en activo "winamp", Si lo encuentra busca la expresión regular en la ventana de título del proceso, para saber si está en pausa y/o detenido, Y si encuentra una de las dos coincidencias le da un valor a la variable "Close"
  12. Tasklist /FI "IMAGENAME eq winamp.exe" /V | Findstr /I "\[detenido\] \[en.pausa\]" >NUL && (Set Close=SI)
  13.  
  14. Rem Si la variable "close" está definida, Mata los siguientes procesos.
  15. If Defined CLOSE (
  16. Taskkill /F /T /IM "dsclock.exe" >NUL 2>&1
  17. Taskkill /F /T /IM "dslogo.exe" >NUL 2>&1
  18. Taskkill /F /T /IM "barra.exe" >NUL 2>&1
  19. ) ELSE (
  20. REM Si la variable "CLOSE" NO está definida, Abre los siguientes procesos.
  21. Start /B dsclock.exe
  22. Start /B dslogo.exe
  23. )
  24.  
  25.  
  26. Ping -n 3 LOCALHOST >NUL
  27. Rem Vuelve a la etiqueta principal.
  28. Goto :Check

PD: No te recomiendo que uses el comando ping sin especificar un tiempo de espera (-n) mayor de "1", En tu code dejas el valor vacío y te consumirá bastantes recursos. Además Windows tarda unos segundos en actualizar la lista de procesos etc, Así que no vale la pena comprobar el comando tasklist cada milisegundo, Cada 3 segundos está bien.

Saludos


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 3 Septiembre 2012, 10:52 am
preliminarmente lo he corrido pero solo al ejecutar el batch este se cierra... sin mas ni mas, y no hace nada...

con esto he recontraaprendido mucho... siempre te pido si nos puedes explicar las lineas para comprender mejor su funcionamiento...


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 3 Septiembre 2012, 11:05 am
aqui dejo hasta donde iva estudiando tus anteriores codigos...
pero como te das cuenta todo depende de un proceso BSPLAYER... y no hay instruccion de play, pausa ni nada... es una burda imitacion del tuyo... ja ja


Código
  1. @echo off
  2. ::set define el proceso con una letra::
  3. :: variables de los programas para resumir::
  4. set Bs=bsplayer.exe
  5. set W=Winamp.exe
  6. set Dsl=Dslogo.exe
  7. set DsC=dsclock.exe
  8.  
  9. ::buscar el proceso Bsplayer y si lo encuentra cierre el proceso Dslogo y Dsclock::
  10. :repetir
  11. tasklist | find "%Bs%" && taskkill /f /im %Dsl%
  12. tasklist | find "%Bs%" && taskkill /f /im %Dsc%
  13. tasklist | find "%Bs%" >nul
  14. if %Errorlevel% == 1 (START /D "%Programfiles%\DS Clock\" dsclock.exe)
  15. if %Errorlevel% == 1 (FOR /R %%_ in (*DsLogo.exe) do ("%%_"))
  16. ping -n 05 localhost>nul & goto :repetir
  17.  


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Eleкtro en 3 Septiembre 2012, 11:16 am
preliminarmente lo he corrido pero solo al ejecutar el batch este se cierra... sin mas ni mas, y no hace nada...
El script funciona perfectamente en windows 7, Pero tampoco veo ninguna diferencia en la sintaxis que pueda causar que no funcione bajo la CMD de windows XP.

EDITO: Acabo de probar el script en Una máquina virtual con Win XP SP 3 y Tal como pensaba, funciona. Si has manipulado el script de alguna manera, O si lo has acolpado a otro script, Pues postea la modificación porque ya no tiene que ver con el script original.

De todas formas, Abre la consola y escribe el nombre del bat para ejecutarlo (Desde la consola, No haciendo doble click en el archivo bat ni llamandolo desde otro bat), Así te indicará la posible causa del error y se te podrá ofrecer más ayuda.
En consola:
Código
  1. CMD /K "check.bat"

siempre te pido si nos puedes explicar las lineas para comprender mejor su funcionamiento...
He añadido comentarios al script en mi último comentario.

El último code que has posteado como bien dices está incompleto y tiene sus fallos, El código de salida (%Errorlevel%) Se refiere al último comando que se ejecutó por lo tanto no es efectivo de la manera que lo has hecho, No sigas pensando en como hacer el script, arriba te di la solución, veamos que es lo que está causando el cierre que comentas y una vez arreglado eso ya estará.

Saludos


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 3 Septiembre 2012, 20:55 pm
gracias por corregirlo... solo puse el codigo anterior como referencia... pero ahora estoy en el codigo tuyo...

probare nuevamente en una maquina virtual... buena idea


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 5 Septiembre 2012, 07:29 am
eres un genio...


funciona pero ahora me doy cuenta que he planteado mal el funcionamiento... permiteme lo replanteo correctamente... en win XP corrio perfecto.... en 7 lo probare por que mi sistema 7 ya esta algo trasteado..


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 5 Septiembre 2012, 11:31 am
Perdona me confundi al armar la idea pero creo que aqui corregi la estructura y encontre algunas consideraciones para el funcionamiento


Para Winamp:
   
Código
  1. START /D "%Programfiles%\Winamp\" winamp.exe


Para el Programa DsLogo y los derivados numéricos:
Dslogo, Dslogo1 y Dslogo2 los guardo en una subcarpeta dentro de
la carpeta donde se guarda el BAT por eso pongo este código por que no Abrir el proceso DsLogo.exe conozco otro:
   
Código
  1. FOR /R %%_ in (*DsLogo.exe) do ("%%_")

Para el programa Ds Clock:
Código
  1. START /D "%Programfiles%\DS Clock\" dsclock.exe

Para el programa Bsplayer:
Código
  1. START /D "%Programfiles%\Webteh\BSplayerPro"  bsplayer.exe

Para el programa Text Ticket:
Código
  1. START /D "%Programfiles%\Text Ticker\TxtTick.exe"

Citar
┌─────────────────────────────────────┐


1. ABRIR el programa Winamp y darle PLAY 
                                               
  • Continúe al paso 2

                           
■ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─    



┌─────────────────────────────────────┐    

↓   
                              
2. SI El programa Winamp.exe está en PLAY
            
  • Abrir programa Ds clock                                     
  • Abrir el proceso DsLogo.exe
                                    
↓                                 


└──────────────────────────────────────   
3.   Pero   Si el proceso Bsplayer.exe se ejecuta         ↓                  
┌──────────────────────────────────────   

                              
  • PAUSAR Winamp
  • Cerrar el proceso Dsclock.exe
  • Cerrar el proceso DsLogo.exe
  • Cerrar el proceso DsLogo1.exe
  • Cerrar el proceso DsLogo2.exe
  • Cerrar el proceso TxTicker.exe

↓                                 


└──────────────────────────────────────   
4. CUANDO El proceso Bsplayer.exe se cierre o no este activo         ↓                  
┌──────────────────────────────────────   

  • REPETIR INFINITO DEL PASO 2 AL PASO 4   
               
↓                                 

└─────────────────────────────────────┘


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Eleкtro en 5 Septiembre 2012, 13:40 pm
Citar
darle PLAY 
Citar
PAUSAR Winamp

Para hacer eso solo puedes hacerlo con el puntero del mouse...

Descarga NIRCMD, y lee ejemplos:
Problema con Comando para hacer fuerza bruta (http://foro.elhacker.net/empty-t357086.0.html)
Crear una tarea prograbada en bat (http://foro.elhacker.net/empty-t367633.0.html)

Para hacer un bucle infinito solo tienes que crear una etiqueta en el "paso 2" y llamarla en el "paso 4", Cuando terminen los chequeos...

Saludos


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 5 Septiembre 2012, 16:33 pm
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...


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Eleкtro en 5 Septiembre 2012, 18:06 pm
para 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


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 6 Septiembre 2012, 10:39 am
maestro te  agradeceria si me corriges el codigo... esta muy bueno el tuyo pero todavia me falta... por aprender:


Código
  1. @Echo off
  2.  
  3. REM PASO 1 -  - - - - ABRIR el programa Winamp y darle PLAY - - - - - - - - - - - - - - - - - - - - -
  4.  
  5. START /D "%Programfiles%\Winamp\" winamp.exe
  6.  
  7. (
  8. Echo Set objShell = WScript.CreateObject("WScript.Shell")
  9. objShell.AppActivate "WINAMP"
  10.    Wscript.Sleep 1000
  11.  
  12. REM la tecla "X" le da PLAY a la ventana activa en este caso la ventana winamp
  13.  
  14. Echo oWSH.SendKeys "X"
  15. )>"%TEMP%\play.vbs"
  16.  
  17. Start /B wscript "%TEMP%\play.vbs"
  18. ping localhost -n 3 > nul
  19. Del "%TEMP%\play.vbs"
  20.  
  21.  
  22. REM PASO 2 - - - -  SI BSPLAYER ESTA ACTIVO CIERRE Ds Clock, Ds Logo y Text Ticker y PAUSAR Winamp
  23.  
  24. @Echo off
  25.  
  26. :Check
  27.  
  28. Rem Reseteamos la variable "CLOSE".
  29. Set Close=
  30.  
  31. Rem Busca el proceso en activo "bsplayer", Si lo encuentra le da un valor a la variable "Close".
  32.  
  33. Tasklist /FI "IMAGENAME eq bsplayer.exe"  | Find /I "bsplayer" >NUL && (Set Close=SI)
  34.  
  35. Rem Si la variable "close" está definida, Mata los siguientes procesos.
  36. If Defined CLOSE (
  37. Taskkill /F /T /IM "dsclock.exe" >NUL 2>&1
  38. Taskkill /F /T /IM "dslogo.exe" >NUL 2>&1
  39. Taskkill /F /T /IM "TxTicker.exe" >NUL 2>&1
  40.  
  41. Echo Set objShell = WScript.CreateObject("WScript.Shell")
  42. objShell.AppActivate "WINAMP"
  43. Wscript.Sleep 1000
  44.  
  45. REM la tecla "C" le da PAUSA a la ventana activa en este caso la ventana winamp
  46. Echo oWSH.SendKeys "(c)"
  47. )>"%TEMP%\pausa.vbs"
  48.  
  49. Start /B wscript "%TEMP%\pausa.vbs"
  50. ping localhost -n 3 > nul
  51. Del "%TEMP%\pausa.vbs"
  52.  
  53. REM PASO 3 - - - Si no esta abierto Bsplayer inicie el programa Ds Clock, Ds Logo y a Winamp darle PLAY
  54.  
  55. ) ELSE (
  56. REM Si la variable "CLOSE" NO esta definida, Abre los siguientes procesos.
  57. START /D "%Programfiles%\DS Clock\" dsclock.exe
  58. FOR /R %%_ in (*DsLogo.exe) do ("%%_")
  59.  
  60. Echo Set objShell = WScript.CreateObject("WScript.Shell")
  61. objShell.AppActivate "WINAMP"
  62.    Wscript.Sleep 1000
  63.  
  64. REM la tecla "X" le da PLAY a la ventana activa en este caso la ventana winamp
  65.  
  66. Echo oWSH.SendKeys "(X)"
  67. )>"%TEMP%\pausa.vbs"
  68.  
  69. Start /B wscript "%TEMP%\pausa.vbs"
  70. ping localhost -n 3 > nul
  71. Del "%TEMP%\pausa.vbs"
  72. )
  73.  
  74.  
  75. Ping -n 3 LOCALHOST >NUL
  76. Rem Vuelve a la etiqueta principal.
  77. 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...


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Eleкtro en 6 Septiembre 2012, 13:13 pm
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:

Citar
Código:
Set 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
  1. @Echo off
  2.  
  3. :: [PASO 1]
  4. :: Ejecutar el proceso Winamp y darle PLAY.
  5. START /D "%Programfiles%\Winamp\" winamp.exe
  6. Call :Winamp_Key "x"
  7.  
  8. :: [PASO 2]
  9. :: Si BSPLAYER está activo, cerrar "Ds Clock", "Ds Logo", "Text Ticker", y darle PAUSE a Winamp.
  10. :: Si BSPLAYER no está activo, iniciar "Ds Clock", "Ds Logo", y darle PLAY a Winamp.
  11. :Loop
  12. Tasklist /FI "IMAGENAME eq bsplayer.exe"  | Find /I "bsplayer" >NUL && (
  13. For /F %%# in ('Tasklist ^| Find /I "DSLOGO"') Do (Taskkill /F /T /IM "%%#" >NUL 2>&1)
  14. Taskkill /F /T /IM "dsclock.exe"  >NUL 2>&1
  15. Taskkill /F /T /IM "TxTicker.exe" >NUL 2>&1
  16. Call :Winamp_Key "c"
  17. ) || (
  18. START /D "%Programfiles%\DS Clock\" dsclock.exe
  19. FOR /R %%_ in (*DsLogo.exe) do ("%%_")
  20. Call :Winamp_Key "x"
  21. )
  22.  
  23. :Winamp_Key
  24. :: Hotkeys Winamp:
  25. ::
  26. :: c=Pause
  27. :: x=Play
  28. ::
  29. If NOT "%~1" EQU "" (
  30. (
  31. Echo Set objShell = WScript.CreateObject("WScript.Shell"^)
  32. Echo Do Until Success = True
  33. Echo     Success = objShell.AppActivate("winamp"^)
  34. Echo     Wscript.Sleep 250
  35. Echo Loop
  36. Echo objShell.SendKeys "%~1"
  37. Echo Wscript.quit
  38. )>"%TEMP%\winamp.vbs"
  39. Start /W wscript "%TEMP%\winamp.vbs"
  40. Del /Q "%TEMP%\Winamp.vbs"
  41. Goto :EOF
  42. )
  43.  
  44. Ping -n 3 LOCALHOST >NUL
  45. Goto :Loop

Saludos


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 7 Septiembre 2012, 02:19 am
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


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 26 Septiembre 2012, 11:50 am
maestro sera que se puede corregir... asi

(http://imageshack.us/a/img259/2718/procesoautomatizacion.png) (http://imageshack.us/photo/my-images/259/procesoautomatizacion.png/)


Código
  1. @Echo off
  2.  
  3. ::[PASO 1] ABRIR Winamp,PLAY a Winamp, ABRIR Dsclock.exe, Dslogo.exe y Dslogo2.exe
  4.  
  5. START /D "%Programfiles%\Winamp\" winamp.exe
  6. Call :Winamp_Key "x"
  7. START /D "%Programfiles%\DS Clock\" dsclock.exe
  8. FOR /R %%_ in (*DsLogo.exe) do ("%%_") | FOR /R %%_ in (*DsLogo2.exe) do ("%%_")
  9.  
  10. ::[PASO 2] PROGRAMAR BSplayer y sus listas en el el Escritorio activo - el archivo .bsl es nativo de BSplayer -
  11.  
  12. at 6:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
  13. at 9:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
  14. at 12:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
  15. at 15:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
  16. at 18:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
  17. at 21:45:00 /interactive start "%DesktopPath%" LISTA1.bsl
  18.  
  19. at 7:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
  20. at 10:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
  21. at 13:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
  22. at 16:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
  23. at 19:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
  24. at 22:30:00 /interactive start "%DesktopPath%" LISTA2.bsl
  25.  
  26. at 8:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
  27. at 11:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
  28. at 14:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
  29. at 17:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
  30. at 20:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
  31. at 23:15:00 /interactive start "%DesktopPath%" LISTA3.bsl
  32.  
  33. at 9:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
  34. at 12:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
  35. at 15:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
  36. at 18:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
  37. at 21:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
  38. at 0:00:00 /interactive start "%DesktopPath%" LISTA4.bsl
  39.  
  40. ::[PASO 3]
  41. :ETIQUETA1
  42.  
  43. ::[PASO 4] Busque El Proceso BSplayer y al encontrarlo, PAUSE Winamp, CERRAR: Dsclock.exe, Dslogo.exe, Dslogo2.exe y TextTicker.exe
  44.  
  45. Tasklist /FI "IMAGENAME eq bsplayer.exe"  | Find /I "bsplayer" >NUL && (
  46. Call :Winamp_Key "c"
  47. Taskkill /F /T /IM "dsclock.exe"  >NUL 2>&1
  48. Taskkill /F /T /IM "Dslogo.exe" >NUL 2>&1
  49. Taskkill /F /T /IM "Dslogo2.exe" >NUL 2>&1
  50. Taskkill /F /T /IM "TxTicker.exe" >NUL 2>&1
  51.  
  52. ::[PASO 5] Esperar  que proceso BSplayer TERMINE de reproducir y se cierre después: Dar PLAY a Winamp, Abrir Dsclock, Abrir Dslogo y Dslogo2
  53. )
  54. Echo Set WshShell = CreateObject("WScript.Shell")
  55. Echo Set oExec = WshShell.Exec("BSplayer")
  56. Echo Do While oExec.Status = 0
  57.     Echo WScript.Sleep 100
  58. Echo Loop
  59. Echo WScript.Echo oExec.Status
  60. )>"%TEMP%\winamp.vbs"
  61. Start /W wscript "%TEMP%\BSplayer.vbs"
  62. Del /Q "%TEMP%\BSplayer.vbs"
  63. Goto :EOF
  64. )
  65.  
  66. Call :Winamp_Key "x"
  67. START /D "%Programfiles%\DS Clock\" dsclock.exe
  68. FOR /R %%_ in (*DsLogo.exe) do ("%%_") | FOR /R %%_ in (*DsLogo2.exe) do ("%%_")
  69.  
  70.  
  71. :Winamp_Key
  72. :: Hotkeys Winamp:
  73. ::
  74. :: c=Pause
  75. :: x=Play
  76. ::
  77.  
  78. Ping -n 3 LOCALHOST >NUL
  79.  
  80. ::[PASO 6] repetir hasta Etiqueta 1
  81. Goto ::ETIQUETA1


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Eleкtro en 26 Septiembre 2012, 12:37 pm
Citar
Código:
: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
Código:
)>"%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
Código:
FOR /R %%_ in (*DsLogo.exe) do ("%%_") | FOR /R %%_ in (*DsLogo2.exe) do ("%%_")

¿Porque usas la pipe |?

Código:
FOR /R %%_ in (*DsLogo*.exe) do ("%%_")

saludos


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 26 Septiembre 2012, 18:45 pm
Gracias maestro seguire tus consejos y por la noche hare una prueba... ;-)


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 26 Septiembre 2012, 20:29 pm
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
  1. )
  2.  
  3. :Winamp_Key
  4. :: Hotkeys Winamp:
  5. ::
  6. :: c=Pause
  7. :: x=Play
  8. ::
  9. If NOT "%~1" EQU "" (
  10. (
  11. Echo Set objShell = WScript.CreateObject("WScript.Shell"^)
  12. Echo Do Until Success = True
  13. Echo     Success = objShell.AppActivate("winamp"^)
  14. Echo     Wscript.Sleep 250
  15. Echo Loop
  16. Echo objShell.SendKeys "%~1"
  17. Echo Wscript.quit
  18. )>"%TEMP%\winamp.vbs"
  19. Start /W wscript "%TEMP%\winamp.vbs"
  20. Del /Q "%TEMP%\Winamp.vbs"
  21. Goto :EOF
  22. )
  23.  
  24. Ping -n 3 LOCALHOST >NUL
  25. Goto :Loop


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Eleкtro en 27 Septiembre 2012, 00:36 am
Ay señor... :xD Con explicarte lo que hacen las lineas no sería suficiente, necesitas aprender lo que es un argumento...

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

Código:
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


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Dsalomon en 29 Septiembre 2012, 02:54 am
Continuando maestro me puedes seguir guiando

No me funcionan las tareas programadas pues me dice que no encuentra el archivo...

Estaba pensando usar esto:

Código
  1. AT 6:45 /interactive start If Not Exist "%UserProfile%\Escritorio\" (Set "DesktopPath=%UserProfile%\Desktop") LISTA1.bsl


me preguntaste ¿Porque usas la pipe |?

lo uso así... por qué probé en una máquina virtual Xp y W7 ultímate... y no corría
Hacia abajo asi que lo pegue asi y funciono...

Código
  1. (FOR /R %%_ in (*DsLogo.exe) do ("%%_")) | (FOR /R %%_ in (*DsLogo2.exe) do ("%%_"))

Además añadí o cambie esta parte: porque no logre que corriera como anteriormente

Código
  1. Tasklist|find /i "Bsplayer.exe"
  2. if %errorlevel%==0 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 | Call :Winamp_Key "c"


Para que espere  que proceso BSplayer TERMINE de reproducir y se cierre después: Dar PLAY a Winamp, Abrir Dsclock, Abrir Dslogo y Dslogo2 use este código
Pero como dije yo no he utilizado batch más que lo añadí y adpte… pero di me si esta correcto


Código
  1. (
  2. Echo Set WshShell = CreateObject("WScript.Shell"^)
  3. Echo Set oExec = WshShell.Exec("BSplayer"^)
  4. Echo Do While oExec.Status = 0
  5.     Echo WScript.Sleep 100
  6. Echo Loop
  7. Echo WScript.Echo oExec.Status
  8. )>"%TEMP%\BSplayer.vbs"
  9. Start /W wscript "%TEMP%\BSplayer.vbs"
  10. Del /Q "%TEMP%\BSplayer.vbs"
  11. Goto :EOF
  12. )
  13.  

Aqui estan todas las lineas.

Código
  1. Echo off
  2. AT 6:45 /interactive start "%DesktopPath%" LISTA1.bsl
  3. AT 7:30 /interactive start "%DesktopPath%" LISTA2.bsl
  4. AT 8:15 /interactive start "%DesktopPath%" LISTA3.bsl
  5. AT 9:00 /interactive start "%DesktopPath%" LISTA4.bsl
  6. AT 9:45 /interactive start "%DesktopPath%" LISTA1.bsl
  7. AT 10:30 /interactive start "%DesktopPath%" LISTA2.bsl
  8. AT 11:15 /interactive start "%DesktopPath%" LISTA3.bsl
  9. AT 12:00 /interactive start "%DesktopPath%" LISTA4.bsl
  10. AT 12:45 /interactive start "%DesktopPath%" LISTA1.bsl
  11. AT 13:30 /interactive start "%DesktopPath%" LISTA2.bsl
  12. AT 14:15 /interactive start "%DesktopPath%" LISTA3.bsl
  13. AT 15:00 /interactive start "%DesktopPath%" LISTA4.bsl
  14. AT 15:45 /interactive start "%DesktopPath%" LISTA1.bsl
  15. AT 16:30 /interactive start "%DesktopPath%" LISTA2.bsl
  16. AT 17:15 /interactive start "%DesktopPath%" LISTA3.bsl
  17. AT 18:00 /interactive start "%DesktopPath%" LISTA4.bsl
  18. AT 18:45 /interactive start "%DesktopPath%" LISTA1.bsl
  19. AT 19:30 /interactive start "%DesktopPath%" LISTA2.bsl
  20. AT 20:15 /interactive start "%DesktopPath%" LISTA3.bsl
  21. AT 21:00 /interactive start "%DesktopPath%" LISTA4.bsl
  22. AT 21:45 /interactive start "%DesktopPath%" LISTA1.bsl
  23. AT 22:30 /interactive start "%DesktopPath%" LISTA2.bsl
  24. AT 23:15 /interactive start "%DesktopPath%" LISTA3.bsl
  25. AT 0:00 /interactive start "%DesktopPath%" LISTA4.bsl
  26.  
  27. @Echo off
  28. START /D "%Programfiles%\Winamp\" winamp.exe
  29. Call :Winamp_Key "x"
  30. START /D "%Programfiles%\DS Clock\" dsclock.exe
  31. (FOR /R %%_ in (*DsLogo.exe) do ("%%_")) | (FOR /R %%_ in (*DsLogo2.exe) do ("%%_"))
  32.  
  33. :Loop
  34.  
  35. ::[PASO 4] Busque El Proceso BSplayer y al encontrarlo: CERRAR Dsclock.exe, Dslogo.exe, Dslogo2.exe, TextTicker.exe y PAUSE Winamp
  36. @Echo Off
  37. Tasklist|find /i "Bsplayer.exe"
  38. if %errorlevel%==0 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 | Call :Winamp_Key "c"
  39.  
  40. ::[PASO 5] Esperar  que proceso BSplayer TERMINE de reproducir y se cierre después: Dar PLAY a Winamp, Abrir Dsclock, Abrir Dslogo y Dslogo2
  41. (
  42. Echo Set WshShell = CreateObject("WScript.Shell"^)
  43. Echo Set oExec = WshShell.Exec("BSplayer"^)
  44. Echo Do While oExec.Status = 0
  45.     Echo WScript.Sleep 100
  46. Echo Loop
  47. Echo WScript.Echo oExec.Status
  48. )>"%TEMP%\BSplayer.vbs"
  49. Start /W wscript "%TEMP%\BSplayer.vbs"
  50. Del /Q "%TEMP%\BSplayer.vbs"
  51. Goto :EOF
  52. )
  53. Call :Winamp_Key "x"
  54. START /D "%Programfiles%\DS Clock\" dsclock.exe
  55. (FOR /R %%_ in (*DsLogo.exe) do ("%%_")) | (FOR /R %%_ in (*DsLogo2.exe) do ("%%_"))
  56.  
  57.  
  58. :Winamp_Key
  59. :: Hotkeys Winamp:
  60. ::
  61. :: c=Pause
  62. :: x=Play
  63. ::
  64. If NOT "%~1" EQU "" (
  65. (
  66. Echo Set objShell = WScript.CreateObject("WScript.Shell"^)
  67. Echo Do Until Success = True
  68. Echo     Success = objShell.AppActivate("winamp"^)
  69. Echo     Wscript.Sleep 250
  70. Echo Loop
  71. Echo objShell.SendKeys "%~1"
  72. Echo Wscript.quit
  73. )>"%TEMP%\winamp.vbs"
  74. Start /W wscript "%TEMP%\winamp.vbs"
  75. Del /Q "%TEMP%\Winamp.vbs"
  76. Goto :EOF
  77. )
  78.  
  79. Ping -n 3 LOCALHOST >NUL
  80.  
  81. ::[PASO 6] repetir hasta Etiqueta 1
  82. Goto :Loop


Título: Re: automatizado de Canal de TV, basado en Batch DOS y VBasic…
Publicado por: Eleкtro en 1 Octubre 2012, 10:01 am
Aparte de que la variable de entorno "DesktopPath" no existe, y has cambiado la manera de usar el comando start sin los parámetros correspondientes, ¿porque intentas usar un comando para abrir el archivo cuando puedes abrirlo directamente? (Siempre que lo tengas asociado al bsplayer).

Código:
AT 6:45 /NEXT: "%USERPROFILE%\Desktop\LISTA1.bsl"

http://ss64.com/nt/at.html
http://ss64.com/nt/schtasks.html

el trozo del código VBS de "Bsplayer.vbs" está bien, bueno, le sobra el parentesis suelto ) de abajo del todo, pero supongo que arriba del todo hay una linea que no pusiste (If not exist...() entonces ya no sobraría el paréntesis.

Te aconsejo que leas un manual básico... lo necesitas para tu hobby/trabajo y no puedes pasarte la vida preguntando sobre el mismo tema  :xD

saludos