ABC para Novatos 2: MACROS

Consejos y trucos de programación en AutoHotkey

Moderator: Flipeador

Guill
Posts: 139
Joined: 09 Jun 2016, 22:00

ABC para Novatos 2: MACROS

Post by Guill » 27 Aug 2016, 16:10

AVISO: No creo que pueda responder preguntas, porque apenas conozco lo que comparto. Ojalá les sirva y entre todos, vayamos ayudando a elaborar un tutorial de AHK.

__________________________________________

2- MACROS

Una macro, o macroinstrucción es una serie de tareas que se predefinen para simplificar acciones repetitivas, recurrentes y monotónas. Hay programas como Word o Excel que tienen su propio sistema de macros, de modo que el usuario puede preestablecerlas, para no tener que hacer muchos pasos repetidos innecesarios.

Con AHK se puede hacer macros desde muy simples a muy complejas. En el post anterior vimos que la única orden que le dábamos era la de ejecutar algo con Run.
Aquí veremos otros comandos (los más comunes y sencillos) que ayudarán para este fin.


Send / SendInput : se traduce como "enviar" y sirve para hacer que pulse determinada tecla, escriba un texto o "envíe" algún comando.
La distinción entre Send y SendImput es para usuarios más avanzados. Acá los mencionamos porque eventualmente funciona mejor el segundo. Pero hacen aproximadamente la misma cosa.

:::::::::::

Sleep: (descansar) sirve para que AHK espere determinado tiempo sin hacer nada.  Su utilidad se entiende fácilmente por ejemplo cuando le decimos que abra un determinado programa,  pero para que siga con la nueva instrucción, debe esperar unos segundos hasta que se abra.

Se usa con un número que representa la cantidad de Milisegundos que AHK debe esperar.
Sleep 1000 ; equivale a  esperar 1 segundo

Sleep 500; medio segundo


:::::::::::::

Soundset: Sirve para modificar el volumen general de la computadora.

_____
_________________________
REPETIR VARIAS VECES, UNA SERIE DE ÓRDENES O INSTRUCCIONES

Loop: repite las veces que se le indica,  la tarea que sigue, normalmente entre llaves.

Un ejemplo que muestra lo anterior

F4::
Run notepad
Loop 3
{
Send a
Sleep 2000
Send b
}
Return


Qué hará lo anterior? Al presionar F4,
1. abrirá el Block de notas
2. Escribirá la letra a
3. Esperará 2 segundos
4. Escribirá la letra b

Pero como está afectado por un Loop desde el segundo punto, hará los pasos 2, 3 y 4, tres veces seguidas.


::::::::::

A TENER EN CUENTA
- Si se quiere dar la orden de presionar alguna de las 4 teclas auxiliares (Control, Shift, Win, Alt), no debe usarse sus símbolos, sino que debe ponerse la palabra entre llaves, de este modo:

F3::
Send {Control}

Lo mismo para otras teclas como "suprimir", Inicio (Home). etc.
También para símbolos que normalmente el programa interpretará con otra función
(Como !, +, #).

AHK tiene un nombre específico para cada una de las teclas. Algunas son predecibles, pero no todas. El listado de cómo AHK interpreta cada tecla está en
https://autohotkey.com/docs/commands/Send.htm

(ver el listado desde "Key name")


:::::::::::::::::::::::

EJEMPLO DE MACRO nº 1

SI ESTÁ ABIERTO UN PROGRAMA O VENTANA, ACTIVARLO, DE LO CONTRARIO, ABRIRLO.
por ejemplo: usamos un archivo txt con los contactos.


!F3::
IfWinExist Mis contactos: Bloc de notas ; SI ESTÁ ABIERTO "Mis contactos"
WinActivate ; ACTIVARLO, ES DECIR PONERLO VISIBLE
Else ; DE LO CONTRARIO
Run C:\Users\....\Mis contactos.txt ; ABRIRLO DE ESTA DIRECCIÓN
Return


. . . . . . . . . .

EJEMPLO DE MACRO Nº2
Esta macro sirve como ejemplo para trabajar con 3 ventanas a la vez.
Por ejemplo, necesitamos pegar una serie de fotos, en un powerpoint, previamente habiéndolas editado con Paint. Estando ya abierta la primera foto de la serie que se encuentra en determinada carpeta, deberán estar abiertos los tres programas (visor de fotos, paint, powerpoint) para que la macro funcione.
Esto es lo que hará

1 - tomará una foto del visor de imágenes de windows
2 - La pegará en Paint para editarla / recortarla
3 - Luego de copiarla, la pega en PowerPoint
4 - vuelve a empezar para hacer lo mismo con la foto siguiente, y para terminar se debe presionar Esc (con Esc se rompe el bucle cuando se quiere terminar)

Code: Select all

!+e:: 
Repetir: ; ETIQUETA para REPETIR LA ACCIÓN INDEFINIDAMENTE

WinActivate, ahk_class Photo_Lightweight_Viewer ; ACTIVA LA VENTANA DEL VISOR DE FOTOS
Sleep 122 ; ESPERA - TODOS LOS Sleep hacen esto - hay que modificar según se necesite
Send {Right} ; AVANZA A LA FOTO SIGUIENTE (ESTO SIRVE PARA LAS SUCESIVAS REPETICIONES)
    ; NO SIRVE PARA LA PRIMERA FOTO, EN ESTE CASO HABRÍA QUE HACERLO
    ; MANUALMENTE PARA NO TENER QUE EDITAR LA MACRO
Sleep 32
Send {F11} ; MUESTRA PANTALLA COMPLETA
Sleep 2033
Send {PrintScreen} ; COPIA LA IMAGEN
Send {Esc} ; VUELVE A VISTA NORMAL (SIN PANTALLA COMPLETA)
Sleep 23

WinActivate, ahk_exe MSPaintApp  ; ACTIVA PAINT
Sleep 24
SendInput ^v

KeyWait, RCtrl, Down
KeyWait, RCtrl, Up

; AQUÍ IRÍAN TODAS LAS EDICIONES MANUALES INDIVIDUALES
; SI FUERA QUE A TODAS LAS FOTOS SE LAS QUIERE
; EDITAR DEL MISMO MODO, TAMBIÉN SE PODRÍA AUTOMATIZAR
; DE LO CONTRARIO, "keywait" ESPERARÁ HASTA QUE PRESIONEMOS LA TECLA
; QUE ASIGNAMOS (EN ESTE CASO RCtrl) - LUEGO DE PRESIONARLA
; EL PROGRAMA CONTINUARÁ CON EL SCRIPT


Sleep, 125

WinActivate, ahk_exe POWERPNT.EXE ; ACTIVA POWERPOINT
SendInput !ovp ; PEGA LA IMAGEN
Send {Enter} 

Send ^g ; GUARDA EL ARCHIVO ppt
Sleep 543

Goto, Repetir ; SE DIRIGE A LA ETIQUETA "repetir" que está al inicio y vuelve a empezar hasta detenerse nuevamente en "keywait" esperando a que se edite la siguiente foto.


Esc:: Reload ; Vuelve a cargar el script, por lo tanto, desactiva el loop o bucle infinito.

:::::::::: FIN :::::::::::::::

Return to “Tutoriales”