Apagar la computadora tras inactividad, pero ignorar la inactividad al ver video

Iniciado por Aikanáro Anário, 1 Julio 2011, 21:10 PM

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

WaAYa HaCK

Exacto, es tan simple como agregar una tarea programada que ejecute un .bat:

tarea.bat
Wscript.exe "C:\comprobar.vbs"

comprobar.vbs
Código (vb) [Seleccionar]
set objshell = createobject("wscript.shell")
objshell.run "C:\apagar.bat", vbhide


apagar.bat
Código (dos) [Seleccionar]

@echo off
Title=Foro.ElHacker.Net
setlocal enabledelayedexpansion

REM By PiToLoKo
REM Foro.ElHacker.Net


:Bucle
Set Reproductores=3
ping localhost -n 900 >nul

Set Reproductor=mpc.exe & Call :Verify
Set Reproductor=mpc-hc.exe & Call :Verify
Set Reproductor=kmplayer.exe & Call :Verify

If !Reproductores! EQU 0 (
echo Reinicio en proceso...
shutdown -s -t 30
goto :bucle
) ELSE (
shutdown -a >nul 2>&1
echo Reinicio cancelado, El reproductor de video se esta ejecutando.
ping localhost -n 5 >nul
cls
goto :bucle
)


:Verify
tasklist /fi "IMAGENAME eq %reproductor%" | findstr ".exe" >nul

IF %ERRORLEVEL% GEQ 1 (
Set /a Reproductores-=1
goto:eof
) else (
goto:eof
)




Sólo hacen falta esos 3 elementos:

tarea.bat ejecuta un VBS.
comprobar.vbs ejecuta el apagar.bat, oculto.
apagar.bat se queda ejecutándose oculto todo el rato, comprobando si hay algún reproductor activo. Si no, apaga.

Ahora, lo que puedes hacer es hacer que se ejecute automáticamente "tarea.bat":

Agregándolo al Registro:
reg ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v tarea /d "C:\tarea.bat"

Con schtasks:
schtasks /create /SC ONLOGON /TN "Tarea" /TR "C:\tarea.bat"



Esto es el resumen de todo lo que ha dicho pitoloko . Con los 3 elementos y agregando el primero de ellos al Registro o a Tareas Programadas, no deberías tener ningún problema. Por cierto, cómo haces para detectar si el PC está inactivo?

PD: pitoloko, sé que ERRORLEVEL es una variable, pero a mí me dio error cuando puse:
if %ERRORLEVEL%==1 ...
y tuve que poner:
if ERRORLEVEL 1 ...

Ahora, no sé por qué no me funcionó.

Saludos!
La cacatúa yoyó es nueva en el zoo!

SuperDraco

Cita de: WaAYa HaCK en  3 Julio 2011, 11:33 AM

PD: pitoloko, sé que ERRORLEVEL es una variable, pero a mí me dio error cuando puse:
if %ERRORLEVEL%==1 ...
y tuve que poner:
if ERRORLEVEL 1 ...

Ahora, no sé por qué no me funcionó.

Ahhh vaya vaya, ta bien, pero "errorlevel 1" te funcionaba? porque a mi no  :xD

Yo siempre uso:


LES   : less
LEQ   : less or equal
EQU   : equal
GEQ   :greater or equal
GTR : greater


Así evito esos posibles errores, total, es lo mismo.  :xD
No he vuelto, solo estoy de paso.

WaAYa HaCK

Ya te dije que mi XP es el mejor  :-X
Pijos del W7... bah!  :xD

Cita de: pitoloko en  3 Julio 2011, 15:59 PM


LES   : less
LEQ   : less or equal
EQU   : equal
GEQ   :greater or equal
GTR : greater


Así evito esos posibles errores, total, es lo mismo.  :xD

Sí, funciona mejor, normalmente. Yo los uso para mis juegos en batch, cuando me aburro en clase  :laugh:

Saludos!
La cacatúa yoyó es nueva en el zoo!

Aikanáro Anário

#23
Gracias por todo lo que han hecho, pero creo que han hecho de más  :xD

El script por sí solo no puede darse cuenta cuando la computadora está inactiva, así que si lo ejecuto, siempre que no esté corriendo alguno de esos procesos, se apagará.

Entonces no conviene que el sript tenga un bucle, ya que de eso se encarga el programador de tareas, de que cada 15 minutos, verificar si la computadora está inactiva, si lo está entonces ejecutará el script; pero si el script es un bucle se quedará ejecutandose y apagará la computadora cuando esté haciendo cualquiera otra cosa excepto viendo un video.

La primera versión del script de WaAYa HaCK es la que me conviene  :)

Código (dos) [Seleccionar]
@echo off
tasklist /fi "IMAGENAME eq wmplayer.exe" | find /i "wmplayer.exe"
if ERRORLEVEL 2 echo. >nul
if ERRORLEVEL 1 goto kmplayer
:kmplayer
tasklist /fi "IMAGENAME eq KMPlayer.exe" | find /i "KMPlayer.exe"
if ERRORLEVEL 2 echo. >nul
if ERRORLEVEL 1 goto mplayerc
:mplayerc
tasklist /fi "IMAGENAME eq mplayerc.exe" | find /i "mplayerc.exe"
if ERRORLEVEL 2 echo. >nul
if ERRORLEVEL 1 shutdown -s -t 30 -c "No estas viendo ningun video"
ping localhost -n 5 >nul




Solo le agregué el Media Player Classic, creo que está bien xD

Una pregunta ¿Qué hace la última línea?
Lo que faltaba en internet: http://binar10s.blogspot.com/

WaAYa HaCK

Exacto!

Entonces, no hace falta que haga un bucle. Modifico el script de pitoloko:
Código (dos) [Seleccionar]
@echo off
Title=Foro.ElHacker.Net
setlocal enabledelayedexpansion

REM By PiToLoKo
REM Foro.ElHacker.Net

Set Reproductores=3


Set Reproductor=mpc.exe & Call :Verify
Set Reproductor=mpc-hc.exe & Call :Verify
Set Reproductor=kmplayer.exe & Call :Verify

If !Reproductores! EQU 0 (
echo Reinicio en proceso...
shutdown -s -t 30
) ELSE (
shutdown -a >nul 2>&1
echo Reinicio cancelado, El reproductor de video se esta ejecutando.
ping localhost -n 5 >nul
cls
)


:Verify
tasklist /fi "IMAGENAME eq %reproductor%" | findstr ".exe" >nul

IF %ERRORLEVEL% GEQ 1 (
Set /a Reproductores-=1
goto:eof
) else (
goto:eof
)


Sólo hace falta que tu tarea programada ejecute esto.


Saludos!
La cacatúa yoyó es nueva en el zoo!

Aikanáro Anário

Yo no sé mucho de batch, pero creo que tiene un error dices goto :bucle, pero no existe :bucle, o sea no tiene donde ir....

¿Y cual es la diferencia entre la versión de pitoloko y la tuya?
Lo que faltaba en internet: http://binar10s.blogspot.com/

WaAYa HaCK

Jajaja OMG FAIL! xDD . Modifiqué el script de pitoloko borrando los bucles y voy y me dejo el goto.  :P

Ya está arreglado.

Cita de: Aikanáro Anário en  3 Julio 2011, 17:39 PM
Una pregunta ¿Qué hace la última línea?

La línea ping localhost -n 5>nul es usada como temporizador, aunque no sirve para esto.
Ping (Packet InterNetwork Groper) es la utilidad de Windows que debes conocer, envía paquetes a un host para comprobar si está activo, aunque puede tener otras funciones.
localhost somos nosotros, el host al que hacemos ping.
-n 5 es el número de peticiones de ping al host. Cada petición es 1 segundo, así que esta línea tarda 5 segundos.
Por último, >nul es una redirección. Con ella, se podría resumir que:
la línea ping localhost -n 5>nul envía 5 peticiones a nosotros mismos durante 5 segundos, y no lo muestra en ninguna parte. Por eso, suele ser usada como temporizador.

ping localhost -n 200 >nul en un batch tardaría 200 segundos en proceder, ya que está ocupado haciendo otra cosa, pero tú no ves nada. Es como una pausa.


Saludos!
La cacatúa yoyó es nueva en el zoo!

Aikanáro Anário

Lo que faltaba en internet: http://binar10s.blogspot.com/

Edu


SuperDraco

Cita de: Aikanáro Anário en  3 Julio 2011, 17:39 PM
un bucle se quedará ejecutandose y apagará la computadora cuando esté haciendo cualquiera otra cosa excepto viendo un video.

Yo pensé que era eso lo que querias  :xD


Cita de: Aikanáro Anário en  3 Julio 2011, 17:57 PM
¿Y cual es la diferencia entre la versión de pitoloko y la tuya?

Que la mia era un bucle que se ejecuta cada 15 min, y la modificación de waAya solo ejecuta una vez la comprobación (Su versión esta pensada para que cada 15 min tu corras el batch desde la tarea)

Cita de: Aikanáro Anário en  3 Julio 2011, 17:39 PM
ping localhost -n 5 >nul

Una pregunta ¿Qué hace la línea?

Como diría Leo, Son las solicitudes de echo.

Cita de: XXX-ZERO-XXX en  3 Julio 2011, 18:57 PM
Como haces para saber cuando esta inactiva la pc?

tal vez use esta api :/

GetIdleMinutes API function
No he vuelto, solo estoy de paso.