Página 1 de 1

Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 05 Nov 2009, 03:17
por BasicOs
Este programa es para apagar, resetear el pc, o para cerrar Sesión.

Para animar a los principiantes, por favor, pon tu script en este mismo hilo en responder:

¿Se os ocurre hacer un programa con UNA sola LINEA de código?
Las condiciones:
Es que tu programa sea util para algo, que sea funcional y de una línea, bueno si no puedes de úna hasta de un máximo de 4 lineas.

Atención ayuda, hay trucos para esto como usar _iif(), o anillar funciones :D:D

Estos tres son SuperFaciles y bastante útiles para los que son hiperComodos o que siempre tienen prisa por cerrar y salir: :smt026 :smt026 :smt026 :smt006
Lo puedes poner en el escritorio, cuando quieras apagar o reiniciar el PC, ya no tienes que ir a Inicio, sinó que ganas unos segundos haciendo click en este, (o puedes ponerlo también en el programador de tareas o después de hacer la copia de seguridad.) :smt019 :smt007

Aqui van tres programas diferentes de una sola linea:
  1. Para cerrar la sesión:

    Código: Seleccionar todo

    Shutdown(0)
  2. Para Apagar tu PC

    Código: Seleccionar todo

    Shutdown(1)
    Si además tambien quieres desconectar la corriente donde esta uno pones un 9.
    Cambiar el 1 por un 5 si lo haces para cerrar los programas forzandolos.
    Pon donde el 1 pon un 17 así cierras aunque esté colgado algún programa.
  3. Para Resetear tu PC.

    Código: Seleccionar todo

    Shutdown(2)
    Si ademas también quieres cambiar el 2 por un 6, para resetear y cerrar los programas forzandolos.
    Pon donde el 2 pon un 18 asi reseteas aunque esté colgado algún programa.
Para tener este fantástico programa solo tienes que ir a documentación y echar un vistazo: http://www.emesn.com/autoitforum/viewforum.php?f=2

Si te atreves a usarlo sin mirar los docs, puedes compilar esta linea una vez te bajes el SCITE que es el procesador de "textos" donde vas a copiar esto, solo necesitas instalar esto 8Mb y lo puedes desinstalar sin problema en el menu.
Descarga de 8 Megas. Instalador de Scite el procesador y compilador que necesitas.
http://www.autoitscript.com/cgi-bin/get ... -setup.exe Total Descarga =8 Megas
La página de downloads:
http://www.autoitscript.com/autoit3/downloads.shtml

Solo tienes que compilar este código con el autoit y tienes algo que funciona YA y cuesta CERO

Si alguien :smt036 :smt036 :smt036 dice que es dificil hacer el programa que me lo diga :smt040 :smt040 :smt040

Salu2:)

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 05 Nov 2009, 10:08
por Ximorro
(vaya hombre, acabo de contestar en el foro de "Preguntas sencillas", repito aquí pero quizás queráis ordenarlo y dejarlo en un único foro, si no armaremos un lío)

¡Qué buena idea BasicOs! :smt038 Propongo seguir esta excelente iniciativa con más ideas que puedan animar a los principiantes del foro a usar AutoIt para hacer cositas sencillas, y así seguro que les pica el gusanillo y más adelante querrán ir complicándolas y hacer cosas cada vez más complejas y chulas. ¡A lo mejor quedáis enganchados!

Pero se empieza por el principio. Aquí va mi granito de arena:

También para comodones, o para los que están como yo, que tenemos la caja del ordenador en el suelo y no es tan cómodo darle al botoncito de abrir o cerrar el lector de CD/DVD.
Con esta única línea de código hacemos un programa que abre un lector:
CDTray("G:", "open")

Naturalmente si nuestro DVD está por ejemplo en E:, pues se cambia G: por E:, así de fácil.
Si lo que queremos es cerrarlo hacemos también este otro mini programa:
CDTray("G:", "close")
recordando también cambiar la letra de la unidad, naturalmente.

Desgraciadamente no hay nada en AutoIt que directamente nos diga si la unidad está abierta o cerrada, así que hay que hacer dos programas diferentes y decirle nosotros lo que queremos hacer.
(No es que no se pueda hacer, es que es complicado porque AutoIT no da soporte directo a eso).

Y también hay que hacer uno para cada unidad de CD que tengamos, no es complicado hacer un GUI (una ventana) con dos o tres botoncitos para cerrar/abrir diferentes unidades, pero eso ya queda para nivel "intermedio" ;-)

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 05 Nov 2009, 10:47
por Ximorro
Va, otro :smt003

Este es un minicalculador de expresiones, por ejemplo si ponemos (2+3)*4 pues muestra 20.
Se pueden hacer cosas más complicadas y sorprendentes, sabiendo las funciones matemáticas de AutoIt, así por ejemplo arcotangente es atan, así que podemos calcular PI, poned atan(1)*4 y ahí lo tenéis con unos cuantos decimales ;-)

En realidad calcula cualquier tipo de expresión que AutoIt pueda reconocer, así que si ya sabéis un poco del lenguaje podéis usarlo para probar expresiones rápidamente. Por ejemplo ¿en StringMid el primer carácter era el 0 ó el 1? Pues en la ventana de la expresión ponemos por ejemplo:
StringMid("ABCD",2,1)... que nos da como resultado B, luego el primer carácter es el número 1.

Sin más dilación he aquí el programita.

Código: Seleccionar todo

$expr = InputBox("Calculadora", "Entra expresión a calcular:")

MsgBox(64, "Calculadora", "Resultado: " & Execute($expr))
Nota: Si hay algún error en la expresión el resultado estará vacío.

Dado el carácter didáctico de estas entradas voy a mostraros cómo ampliarlo para con cuatro cosas hacerlo más chulo. Lo primero que me chocó fue la caja que pide la expresión, que la veo muy fea así tan grande (al menos en XP, no sé en otros SO). Si miramos la ayuda de InputBox vemos que tiene parámetros para poner el tamaño, así que cambiamos esa línea a:
$expr = InputBox("Calculadora", "Entra expresión a calcular:", "", "", 250, 130)
(los parámetros "", "" son el valor por defecto y el carácter de password, por si no queremos que se vea lo que se escribe. Después ya ponemos el ancho y alto de la ventana.

Y ya un pelín más avanzado, perdonadme si me paso, que son 5 líneas ;-) Podemos hacer que nos pregunte continuamente expresiones hasta que le demos a Cancelar cuando nos pide la expresión, se hace así (luego lo explico)

Código: Seleccionar todo

While True

    $expr = InputBox("Calculadora", "Entra expresión a calcular:", "", "", 250, 130)

    If @error = 1 Then Exit

    MsgBox(64, "Calculadora", "Resultado: " & Execute($expr))

WEnd
Hay dos cosas nuevas:
While <condicion>
;codigo
WEnd


Ejecuta el código que hay entre While y Wend mientras condición sea cierta (WEnd significa While-End, o sea, fin del while, que significa "mientras"). True significa "verdadero", luego es una expresión que siempre es cierta.
O sea si lo lees literalmente pone:
Mientras verdadero
;código
Fin Mientras


Así que eso ejecuta nuestro código indefinidas veces, ¿cómo lo paramos?
Pues si vemos la ayuda de InputBox vemos que nos dice que cuando se aprieta el botón Cancelar la variable especial @error vale 1.
Así que lo comprobamos con IF (que significa SI, el condicional). Exit es un comando que termina el programa, así que
If @error = 1 Then Exit
significa literalmente:
Si @error es igual a 1 Entonces Salir

Espero no haberlo complicado mucho al final, el post es largo porque lo he dejado todo muy explicadito, ¡no porque sea difícil!

Saludoooos

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 05 Nov 2009, 15:44
por Ximorro
El último :smt003
Este es un pelín más avanzado pero dado el resultado más complejo sorprende que se pueda hacer en 5 líneas.

¿Queréis saber qué día de la semana nacísteis? Este programa es un calendario perpetuo, esto es un programa que le pasas una fecha y te dice qué día de la semana fue, es, o será.

En realidad esta versión no es "perpetua", funciona para nuestro actual calendario gregoriano, y eso es desde el 15 de octubre de 1582.
(Por si no lo sabíais cuando se ajustó el calendario, del jueves 4 de octubre se pasó al viernes 15 de octubre. Los días desde el 5 al 14 de octubre de 1582 ¡no existen en nuestro calendario!)

El programita, luego lo explico y mejoro:

Código: Seleccionar todo

#Include <Date.au3>

$fechaStr = InputBox("Calendario perpetuo", "Entra fecha (día/mes/año):", "", "", 250, 130)

$fechaPartes = StringSplit($fechaStr, "/")

$numDia = _DateToDayOfWeek($fechaPartes[3], $fechaPartes[2], $fechaPartes[1])

MsgBox(64, "Calendario perpetuo", "Día de la semana: " & _DateDayOfWeek($numDia))
#Include <Date.au3> le dice a AutoIt que cargue una extensión que tiene para trabajar con fechas. AutoIt viene con muchas extensiones que no carga por defecto para ahorrar memoria, con esto del #include le decimos que las cargue sólo cuando las necesitamos.

El InputBox ya está explicado en el comentario anterior :smt003
Lógicamente para hacerlo simple no se comprueban errores en la entrada, así que hay que introducirla bien. Esto es la fecha en números en formato día/mes/año, por ejemplo hoy es 5/11/2009. No hace falta poner ceros de relleno, pero sí el año con todos los dígitos, si ponemos 1/1/10 no sabe si se trata de 2010 ó 1910...

StringSplit separa la cadena que le pasas por la letra o símbolo que le indicas y te lo da en partes que puedes acceder por un número. Así parto la fecha por el separador "/" y me da tres partes en la variable $fechaPartes (eso se llama vector o matriz, en inglés array). Para acceder a una parte concreta se pone el número entre corchetes. Como por ejemplo el año es la tercera parte, pues lo extraemos con $fechaPartes[3].
(Para ser exactos hay una parte (o elemento) número 0 (cero), que contiene el número de partes que vienen después)

Eso lo usamos en la siguiente función (_DateToDayOfWeek = fecha a día de la semana) que nos da el número del día de la semana para una fecha, que hay que pasarla con año, mes y día por separado.

Ese número se lo pasamos a la función _DateDayOfWeek (=fecha día de la semana, ojo que se parece a la anterior pero no es lo mismo), que nos da en texto el día de la semana, cosa que imprimimos con MsgBox.

El problema es que AutoIT estos textos los tiene almacenados en inglés. ¿Qué pasa si lo queremos en castellano? Pues lo tenemos que hacer nosotros...
Pero sólo es una línea más. Como _DateToDayOfWeek me da el número del día de la semana (eso sí, el 1 corresponde con domingo, el 2 al lunes...) pues me creo un vector de esos que he comentado antes con los días de la semana, y si tengo un 2, pues cogeré el segundo elemento, que corresponderá al lunes. Para eso uso la función StringSplit, aprovechando que ya la he usado, el nuevo programa quedaría:

Código: Seleccionar todo

#Include <Date.au3>

$fechaStr = InputBox("Calendario perpetuo", "Entra fecha (día/mes/año):", "", "", 250, 130)

$fechaPartes = StringSplit($fechaStr, "/")

$numDia = _DateToDayOfWeek($fechaPartes[3], $fechaPartes[2], $fechaPartes[1])

$dias = StringSplit("Domingo,Lunes,Martes,Miércoles,Jueves,Viernes,Sábado", ",")

MsgBox(64, "Calendario perpetuo", "Día de la semana: " & $dias[$numDia])
Como $numDia tiene el valor numérico del día de la semana, si $dias[2] me da el segundo elemento de $dias, de la misma manera $dias[$numDia] me dará el elemento correspondiente a lo que valga $numDia, que es el que corresponde a nuestra fecha.

Ale, a disfrutarlo también.

Espero no haberme pasado un poco. Si queréis se puede montar un post con un menú y ordenar las entradas por dificultad (totalmente novato, iniciado, medio), tipo el menú que han hecho aquí:
http://www.autoitscript.com/forum/index ... ntry133769

Lo he puesto aquí porque creo que poder hacer un calendario perpetuo en cinco líneas muestra la potencia de AutoIT. Sólo se usan 3 funciones, a parte de la de pedir la fecha y mostrar el resultado. ¡Eso no es na!

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 06 Nov 2009, 06:06
por XPyro
Esto si que anima, AutoIt es tan fácil que con una sola linea ya tienes un programa :smt003

Vamos que de todos los lenguajes que e probado no se comparan a AutoIt en lo simple, fácil y cómodo :smt005

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 10 Nov 2009, 00:23
por joanfran55
Bueno, si se pueden anidar funciones...

Código: Seleccionar todo

TirarRuleta (Random(1,24,1))





Func TirarRuleta($num)

    $j=0

While $j<24

    $j=$j+1

SplashImageOn("Rulando",'imagenes/'&$j&'.jpg')

Sleep (20)

SplashOff()

WEnd

$j=0

    While $j<$num

        $j=$j+1

SplashImageOn("Rulando",'imagenes/'&$j&'.jpg')

Sleep (20)

SplashOff()

WEnd

SplashImageOn("Has obtenido",'imagenes/'&$j&'.jpg')

Sleep (8000)

SplashOff()

EndFunc
SImplemente va mostrando imágenes en orden hasta llegar a un numero aleatorio, donde se detiene, indicando la puntuación obtenida.

Codigo e imágenes:

http://rapidshare.com/files/304697925/ruleta.rar

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 10 Nov 2009, 11:39
por Ximorro
Hombre, no sé yo si este sigue el espíritu de la entrada. Y yo que tenía dudas de mi calendario perpetuo...

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 10 Nov 2009, 14:47
por BasicOs
Ximorro escribió:Hombre, no sé yo si este sigue el espíritu de la entrada. Y yo que tenía dudas de mi calendario perpetuo...
;) :smt044 :smt044 :smt036 :smt036

Otra aplicación más:

Código: Seleccionar todo

_iif(msgbox(1,"Aviso del sistema","Acepte para reiniciar"),Shutdown(2),msgbox(0,"Gracias","No se reinició"))
No están mal todas las aportaciones :smt023 :smt045
Salu2:)

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 10 Nov 2009, 17:06
por gna08
A ver, esto casi casi 1 linea, solo xq la bendita estructura del au3 no lo permitio, pero kreo k se puede lograr agregar mas controles, pero no se :smt017

Código: Seleccionar todo

Null;
PARECEN MAS PERO SON SOLO 2 lineaaas! :smt039

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 11 Nov 2009, 10:00
por Ximorro
¡Madre del amor hermoso! Hombre, no creo que ayude mucho a los que comienzan con AutoIT, ¡pero es flipante!

Creo que antes de poner una línea incomprensible es mejor poner 3 ó 4 de fácil entendimiento, pero impresionado me he quedao...

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 11 Nov 2009, 20:28
por gna08
Ximorro escribió:¡Madre del amor hermoso! Hombre, no creo que ayude mucho a los que comienzan con AutoIT, ¡pero es flipante!

Creo que antes de poner una línea incomprensible es mejor poner 3 ó 4 de fácil entendimiento, pero impresionado me he quedao...
Jaja es cierto Ximo, pero es un ejemplo, solo k no lei todo lo k puso BasicOs, (lo de para principiantes :smt021 ) pero lei lo de una linea jaja :smt023

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 12 Nov 2009, 10:30
por Ximorro
Bueno ese código es para mí totalmente incomprensible, pero una de las cosas que más me intrigan es la transparencia al finalizar. Veo ahí el WinSetTrans... ¿¿¿pero cómo hace el bucle para ir haciéndolo cada vez más transparente??? parece que toma el numerito del título, que veo al final que empieza en 255... ¿¿pero cómo decrementa ese número??

Parece magia.

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 13 Nov 2009, 01:34
por Chefito
Jejejeje....hay que ver lo que se puede hacer con AutoIt con unas pocas líneas eh? :smt002 .
Me ha gustado mucho la explicación del calendario perpetuo de Ximorro. No sabía cuando se creó y que saltaban esos días inexistente :smt005 . Muy interesante.

Y el programa de gna08.......jajajajaja.....me ha dejado alucinado :smt020 . Nunca se me habría ocurrido meter tantas funciones en un while gracias a los operadores lógicos. Lo has hecho tú, o lo has sacado de algún sitio?

Aunque más o menos entiendo todo, incluido el como hace transparente la ventana (Ximorro, daremos la oportunidad a que te lo explique el que lo ha hecho :smt002 ), pienso lo mismo que Ximorro.....esto es un follón y es mejor separar todo. Pero para un concurso de códigos con pocas líneas estaría muy bien :smt005 .

Saludos.

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 16 Nov 2009, 12:32
por Ximorro
Pues sí, ya hace tiempo estuve mirando lo de los calendarios y descubrí eso, es muy curioso. Antes se usaba el calendario juliano... ¡de Julio César nada menos! En el siglo XVI descubrieron que la Pascua se les estaba desfasando, así que lo reajustaron cambiando la forma de calcular los años bisiestos (antes eran todos cada 4 años, ahora también excepto los de final de siglo, como el 2000, que sólo lo son si son divisibles entre 400, así por ejemplo 2000 fue bisiesto, pero 2100 no lo será, aunque es divisible entre 4 no le es entre 400).

Y para rematar el reajuste quitaron los días que nos habíamos pasado con el calendario juliano, así de un plumazo, me quedé flipao cuando me enteré. Seguramente en esa época la mitad de la gente no sabía ni en qué año estaba, pero no deja de ser curioso.

Para la informática es una faena ese agujero en el calendario, por ejemplo los calendarios perpetuos normalmente no pasan al calendario juliano, y esos días no son hueco... A las funciones de AutoIt les pasa eso, para fechas anteriores al 15 de octubre de 1582 hay un desfase de semana y media, pero es más complicado por lo de los bisiestos...

Respecto al one-liner mostruoso, veo que coge el numerito para la transparencia del título de la ventana, pero no veo dónde lo decrementa... ¡tela!

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 01 Oct 2010, 03:48
por Dick_
hola chicos, aqui aporto mi script de 1 linea (en realidad son 3) se trata de un antiares ideal para un cibercafe y es tan sencillo que no hace falta explicarlo, eso si es muy eficaz lo estuve probando y no tienen problemas para imperdir el uso del ares (tiempo atras me rompi la cabeza buscando formas de bloquear el ares, antiejecutables, politicas de serguridad de windows, bloquear puertos, etc.) y a la final fue tan sencillo con el autoit y un par de lineas de codigo.

#NoTrayIcon
while True
if ProcessExists("ares.exe") Then processclose("ares.exe")
WEnd

Dick_
Saludos :smt039

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 01 Oct 2010, 11:23
por Ximorro
¿No te consume mucha CPU?
Te recomiendo poner un retardo pequeñito, por ejemplo un Sleep(25) dentro del bucle.
Irá igual de bien (cerrar con un retraso máximo de 25 milisegundos ni se nota) pero la CPU lo agradecerá.

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 01 Oct 2010, 23:03
por Dick_
hola Ximorro, la verdad es que no lo note, pero leyendo en el foro vi que sleep(n) hace q la cpu se libere, entonces le pondria un sleep(1000) y q el programa verifique y cierre el ares cada segundo, no le hace, lo mismo no va a dejar que descargen nada. gracias por la corrección.

;AntiAres por Dick_
NoTrayIcon
while True
if ProcessExists("ares.exe") Then processclose("ares.exe")
sleep(1000)
WEnd

Dick_
Saludos :smt039

Re: Tus programas de una sola linea ¿Eres capáz? - MegaFacil

Publicado: 04 Oct 2010, 08:05
por Ximorro
¡De nada!

Por cierto, existe otra función similar que te puede interesar: ProcessWait, se queda esperando hasta que aparece el proceso, en realidad lo que hace es comprobar cada 250ms, así que es como hacer un if ProcessExists y un Sleep(250) en una sóla llamada. Lo único es que ese tiempo es fijo, si quieres controlar la pausa tienes que poner tú el Sleep, pero si los 250ms te van bien pues simplifica el código.