gravar acciones del teclado por horario con autohotkey

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

tittet11
Posts: 8
Joined: 27 Apr 2021, 03:36

gravar acciones del teclado por horario con autohotkey

Post by tittet11 » 27 Apr 2021, 04:01

hola! como dice el título, me encantaría poder programar la hora de lunes a viernes de varias grabaciones de teclado. por ejemplo. supongamos que el lunes quiero que a las 7 de la mañana se ejecute una grabación de teclado, que me hace entrar a la reunión escolar, y a las 8 de la mañana, quiero que se ejecute la siguiente grabación de teclado y así sucesivamente.
encontré un script en internet que grava las acciones de teclado, mas no las programa, y tampoco no almacena las gravaciones.
les será útil, lo dejaré por aquí con el código entero, por si las dudas, espero puedan ayudarme, por favor. muchas gracias.

Code: Select all

;DoOver.ahk
; Record and playback keyboard and mouse actions.
; Press Ctrl-F12 to start and stop recording.
; Press Ctrl-F5 to playback.
;Skrommel @2005    www.donationcoders.com/skrommel


#SingleInstance,Force
SetBatchLines,-1
AutoTrim,Off
CoordMode,Mouse,Relative

applicationname=DoOver

modifiers=LCTRL,RCTRL,LALT,RALT,LSHIFT,RSHIFT,LWIN,RWIN,LButton,RButton,MButton,XButton1,XButton2
recording=0
playing=0
Gosub,READINI
Gosub,TRAYMENU
SetTimer,CURRENTWIN,500
Return


CURRENTWIN:
WinGet,currentid,ID,A
WinGetClass,class,ahk_id %currentid%
If currentid=
  currentid=%oldcurrentid%
If class=Shell_TrayWnd
  currentid=%oldcurrentid%
If currentid=AutoHotkey
  currentid=%oldcurrentid%
oldcurrentid=%currentid%
Return


MACROREC:
If recording=0
{
  GetKeyState,state,LShift,P
  If state=d
  Loop
  {
    GetKeyState,state,LShift,P
    If state=U
      Break
  }
  GetKeyState,state,LCtrl,P
  If state=d
  Loop
  {
    GetKeyState,state,LCtrl,P
    If state=U
      Break
  }
  GetKeyState,state,LAlt,P
  If state=d
  Loop
  {
    GetKeyState,state,LAlt,P
    If state=U
      Break
  }
  GetKeyState,state,LWin,P
  If state=d
  Loop
  {
    GetKeyState,state,LWin,P
    If state=U
      Break
  }
  recording=1
  ToolTip,Recording... 
  Gosub,RECORD
  ToolTip,Recording finished
  IniWrite,%keys%,DoOver.ini,Settings,macro
  Loop
  {
    GetKeyState,state,LCtrl,P
    If state=U
      Break
  }
  Sleep,1000
  ToolTip,
  recording=0
}
Else
  recording=0

Return


MACROPLAY:
If playing=0
{
  GetKeyState,state,LShift,P
  If state=d
  Loop
  {
    GetKeyState,state,LShift,P
    If state=U
      Break
  }
  GetKeyState,state,LCtrl,P
  If state=d
  Loop
  {
    GetKeyState,state,LCtrl,P
    If state=U
      Break
  }
  GetKeyState,state,LAlt,P
  If state=d
  Loop
  {
    GetKeyState,state,LAlt,P
    If state=U
      Break
  }
  GetKeyState,state,LWin,P
  If state=d
  Loop
  {
    GetKeyState,state,LWin,P
    If state=U
      Break
  }
  playing=1
  ToolTip,Playback...
  IniRead,macro,DoOver.ini,Settings,macro
  If movemouseafter=1
  {
    CoordMode,Mouse,Screen
    MouseGetPos,origx,origy
    CoordMode,Mouse,Relative
  }
  Gosub,PLAYBACK
  If movemouseafter=1
  {
    CoordMode,Mouse,Screen
    MouseMove,%origx%,%origy%,0
    CoordMode,Mouse,Relative
  }
  ToolTip,
  playing=0
}
Return


PLAYBACK:
id=
Loop
{
  GetKeyState,state,Esc,P
  If state=d
    Break
  StringGetPos,pos1,macro,{MouseClick
  StringGetPos,pos2,macro,{Window
  If pos1=-1
  If pos2=-1
  {
    Send,%macro%
    Break
  }
  If pos2>-1
  If pos2<%pos1%
    Goto,WINDOW

  MOUSE:
  StringGetPos,pos1,macro,{MouseClick
  If pos1=-1
    Goto,WINDOW
  StringGetPos,pos2,macro,},,%pos1%
  StringLeft,playback,macro,%pos1%
  StringTrimLeft,macro,macro,%pos1%
  pos2-=%pos1%
  StringLeft,mouse,macro,%pos2%
  pos2+=1
  StringTrimLeft,macro,macro,%pos2%
  Send,%playback%
  StringSplit,mouse_,mouse,`,
  MouseClick,%mouse_2%,%mouse_3%,%mouse_4%,%mouse_5%,%mouse_6%,%mouse_7%
  Continue

  WINDOW:
  StringGetPos,pos1,macro,{Window
  If pos1=-1
    Continue
  StringGetPos,pos2,macro,},,%pos1%
  StringLeft,playback,macro,%pos1%
  StringTrimLeft,macro,macro,%pos1%
  pos2-=%pos1%
  StringLeft,title,macro,%pos2%
  pos2+=1
  StringTrimLeft,macro,macro,%pos2%
  Send,%playback%
  StringSplit,title_,title,`,
  WinWait,%title_2%,,2
  WinActivate,%title_2%
  WinWaitActive,%title_2%,,2
;  WinWaitNotActive,ahk_id %id%,,2
;  WinGet,id,ID,A
}
Return


RECORD:
SetTimer,MODIFIERS,50
oldid=
keys=
Loop
{
  Input,key,M B C V I L1 T1,{BackSpace}{Space}{WheelDown}{WheelUp}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{F13}{F14}{F15}{F16}{F17}{F18}{F19}{F20}{F21}{F22}{F23}{F24}{ENTER}{ESCAPE}{TAB}{DELETE}{INSERT}{UP}{DOWN}{LEFT}{RIGHT}{HOME}{END}{PGUP}{PGDN}{CapsLock}{ScrollLock}{NumLock}{APPSKEY}{SLEEP}{Numpad0}{Numpad0}{Numpad1}{Numpad2}{Numpad3}{Numpad4}{Numpad5}{Numpad6}{Numpad7}{Numpad8}{Numpad9}{NumpadDot}{NumpadEnter}{NumpadMult}{NumpadDiv}{NumpadAdd}{NumpadSub}{NumpadDel}{NumpadIns}{NumpadClear}{NumpadUp}{NumpadDown}{NumpadLeft}{NumpadRight}{NumpadHome}{NumpadEnd}{NumpadPgUp}{NumpadPgDn}{BROWSER_BACK}{BROWSER_FORWARD}{BROWSER_REFRESH}{BROWSER_STOP}{BROWSER_SEARCH}{BROWSER_FAVORITES}{BROWSER_HOME}{VOLUME_MUTE}{VOLUME_DOWN}{VOLUME_UP}{MEDIA_NEXT}{MEDIA_PREV}{MEDIA_STOP}{MEDIA_PLAY_PAUSE}{LAUNCH_MAIL}{LAUNCH_MEDIA}{LAUNCH_APP1}{LAUNCH_APP2}{PRINTSCREEN}{CTRLBREAK}{PAUSE}
  endkey=%ErrorLevel%
  WinGet,id,ID,A
  If id<>%oldid%
  {
    WinGetTitle,title,ahk_id %id%
    If title<>
    If title<>Program Manager
      keys=%keys%{Window,%title%}
    oldid=%id%
  }
  IfInString,endkey,EndKey:
  {
    StringTrimLeft,key,endkey,7
    key={%key%}
  }
  keys=%keys%%key%
  StringReplace,endrecord,record,},%A_Space%Down}
  IfInString,keys,%endrecord%
  {
    StringLen,length,endrecord
    StringTrimRight,keys,keys,%length%
    recording=0
  }
  If recording=0
  {
    SetTimer,MODIFIERS,Off
    Break
  }
}
Return


MODIFIERS:
Loop,Parse,modifiers,`,
{
  GetKeyState,state,%A_LoopField%,P
  If (state="d" And state%A_Index%="")
  {
    state%A_Index%=d
    IfInString,A_LoopField,Button
    {
      StringReplace,button,A_LoopField,Button,
      WinGet,id,ID,A
      If id<>%oldid%
      {
        WinGetTitle,title,ahk_id %id%
        If title<>
          keys=%keys%{Window,%title%}
        oldid=%id%
      }
      WinGet,idd,ID,A
      MouseGetPos,xd,yd
      CoordMode,Mouse,Screen
      MouseGetPos,sdx,sdy
      CoordMode,Mouse,Relative
      keys=%keys%{MouseClick,%button%,%xd%,%yd%,1,0,D}
    }
    Else
      keys=%keys%{%A_LoopField% Down}
  }
  GetKeyState,state,%A_LoopField%,P
  If (state="u" And state%A_Index%="d") 
  {
    IfInString,A_LoopField,Button
    {
      StringReplace,button,A_LoopField,Button,
      WinGet,idu,ID,A
      MouseGetPos,xu,yu
      CoordMode,Mouse,Screen
      MouseGetPos,sux,suy
      CoordMode,Mouse,Relative
      If(idd<>idu)
      {
        xd:=xd+sux-sdx
        yd:=yd+suy-sdy
        keys=%keys%{MouseClick,%button%,%xd%,%yd%,1,0,U}
      }
      Else
        keys=%keys%{MouseClick,%button%,%xu%,%yu%,1,0,U}
    }
    Else
      keys=%keys%{%A_LoopField% Up}
    state%A_Index%=
  }
}
If keys={LShift Up}
  keys=
If keys={LCtrl Up}
  keys=
If keys={LAlt Up}
  keys=
If keys={LWin Up}
  keys=
StringRight,tooltip,keys,100
ToolTip,%tooltip%
Return


TRAYMENU:
Menu,Tray,NoStandard 
Menu,Tray,DeleteAll 
Menu,Tray,Add,DoOver,TRAYPLAYBACK
Menu,Tray,Add,
Menu,Tray,Add,&Playback,TRAYPLAYBACK
Menu,Tray,Add,&Record,TRAYRECORD
Menu,Tray,Add,
Menu,Tray,Add,&Settings...,SETTINGS
Menu,Tray,Add,R&eload settings,RELOAD
Menu,Tray,Add,
Menu,Tray,Add,&About...,ABOUT
Menu,Tray,Add,E&xit,EXIT
Menu,Tray,Default,DoOVer
Return


TRAYPLAYBACK:
WinActivate,ahk_id %currentid%
WinWaitActive,ahk_id %currentid%,,2
Gosub,MACROPLAY
Return


TRAYRECORD:
WinActivate,ahk_id %currentid%
WinWaitActive,ahk_id %currentid%,,2
Gosub,MACROREC
Return


SETTINGS:
Gosub,READINI
Run,DoOver.ini
Return


RELOAD:
Reload


READINI:
IfNotExist,DoOver.ini
{
ini=;DoOver.ini
ini=%ini%`n;[Settings]
ini=%ini%`n;record={LCtrl}{F12}   `;hotkey to start and stop recording  {LShift}{LCtrl}{LAlt}{LWin}{F1}...123...ABC...
ini=%ini%`n;playback={LCtrl}{F5}  `;hotkey to start playback
ini=%ini%`n;keydelay=10           `;ms to wait after sending a keypress
ini=%ini%`n;windelay=100          `;ms to wait after activating a window
ini=%ini%`n;movemouseafter=1      `;move the mouse to original pos after playback  1=yes 0=no
ini=%ini%`n
ini=%ini%`n[Settings]
ini=%ini%`nrecord={LCtrl}{F12}
ini=%ini%`nplayback={LCtrl}{F5}
ini=%ini%`nkeydelay=10
ini=%ini%`nwindelay=100
ini=%ini%`nmovemouseafter=1
ini=%ini%`nmacro=
FileAppend,%ini%,DoOver.ini
ini=
}
IniRead,record,DoOver.ini,Settings,record
hkrecord=%record%
StringReplace,hkrecord,hkrecord,{LCtrl},^
StringReplace,hkrecord,hkrecord,{RCtrl},^
StringReplace,hkrecord,hkrecord,{LShift},+
StringReplace,hkrecord,hkrecord,{RShift},+
StringReplace,hkrecord,hkrecord,{LAlt},!
StringReplace,hkrecord,hkrecord,{RAlt},!
StringReplace,hkrecord,hkrecord,{LWin},#
StringReplace,hkrecord,hkrecord,{RWin},#
StringReplace,hkrecord,hkrecord,{,
StringReplace,hkrecord,hkrecord,},
Hotkey,%hkrecord%,MACROREC
IniRead,playback,DoOver.ini,Settings,playback
hkplayback=%playback%
StringReplace,hkplayback,hkplayback,{LCtrl},^
StringReplace,hkplayback,hkplayback,{RCtrl},^
StringReplace,hkplayback,hkplayback,{LShift},+
StringReplace,hkplayback,hkplayback,{RShift},+
StringReplace,hkplayback,hkplayback,{LAlt},!
StringReplace,hkplayback,hkplayback,{RAlt},!
StringReplace,hkplayback,hkplayback,{LWin},#
StringReplace,hkplayback,hkplayback,{RWin},#
StringReplace,hkplayback,hkplayback,{,
StringReplace,hkplayback,hkplayback,},
IniRead,keydelay,DoOver.ini,Settings,keydelay
IniRead,windelay,DoOver.ini,Settings,windelay
Hotkey,%hkplayback%,MACROPLAY
SetKeyDelay,%keydelay%
SetWinDelay,%windelay%
IniRead,movemouseafter,DoOver.ini,Settings,movemouseafter
Return


ABOUT:
Gui,99:Destroy
Gui,99:Margin,20,20
Gui,99:Add,Picture,xm Icon1,%applicationname%.exe
Gui,99:Font,Bold
Gui,99:Add,Text,x+10 yp+10,%applicationname% v1.0
Gui,99:Font
Gui,99:Add,Text,y+10,Record and playback keyboard and mouse actions.
Gui,99:Add,Text,y+10,- Press %record% to start and stop recording.
Gui,99:Add,Text,y+10,- Press %playback% to playback.
Gui,99:Add,Text,y+10,- To edit the last macro or change hotkeys or other settings
Gui,99:Add,Text,y+5 ,like playback speed, choose Settings in the tray menu.
Gui,99:Add,Text,y+10,- Remember to save the settings and restart using Reload.

Gui,99:Add,Picture,xm y+20 Icon5,%applicationname%.exe
Gui,99:Font,Bold
Gui,99:Add,Text,x+10 yp+10,1 Hour Software by Skrommel
Gui,99:Font
Gui,99:Add,Text,y+10,For more tools, information and donations, please visit 
Gui,99:Font,CBlue Underline
Gui,99:Add,Text,y+5 G1HOURSOFTWARE,www.1HourSoftware.com
Gui,99:Font

Gui,99:Add,Picture,xm y+20 Icon7,%applicationname%.exe
Gui,99:Font,Bold
Gui,99:Add,Text,x+10 yp+10,DonationCoder
Gui,99:Font
Gui,99:Add,Text,y+10,Please support the contributors at
Gui,99:Font,CBlue Underline
Gui,99:Add,Text,y+5 GDONATIONCODER,www.DonationCoder.com
Gui,99:Font

Gui,99:Add,Picture,xm y+20 Icon6,%applicationname%.exe
Gui,99:Font,Bold
Gui,99:Add,Text,x+10 yp+10,AutoHotkey
Gui,99:Font
Gui,99:Add,Text,y+10,This tool was made using the powerful
Gui,99:Font,CBlue Underline
Gui,99:Add,Text,y+5 GAUTOHOTKEY,www.AutoHotkey.com
Gui,99:Font

Gui,99:Show,,%applicationname% About
hCurs:=DllCall("LoadCursor","UInt",NULL,"Int",32649,"UInt") ;IDC_HAND
OnMessage(0x200,"WM_MOUSEMOVE") 
Return

1HOURSOFTWARE:
  Run,http www.1hoursoftware.com,,UseErrorLevel   Broken Link for safety
Return

DONATIONCODER:
  Run,http www.donationcoder.com,,UseErrorLevel   Broken Link for safety
Return

AUTOHOTKEY:
  Run,http www.autohotkey.com,,UseErrorLevel   Broken Link for safety
Return

99GuiClose:
  Gui,99:Destroy
  OnMessage(0x200,"")
  DllCall("DestroyCursor","Uint",hCur)
Return

WM_MOUSEMOVE(wParam,lParam)
{
  Global hCurs
  MouseGetPos,,,,ctrl
  If ctrl in Static12,Static16,Static20
    DllCall("SetCursor","UInt",hCurs)
  Return
}
Return


EXIT:
ExitApp

19Daniel93
Posts: 40
Joined: 25 Mar 2021, 12:56
Location: La Habana, Cuba

Re: gravar acciones del teclado por horario con autohotkey

Post by 19Daniel93 » 27 Apr 2021, 15:02

Hola creo que esto te puede servir
Acciones del teclado por horario.ahk
(616 Bytes) Downloaded 70 times
Tema original:
https://www.autohotkey.com/boards/viewtopic.php?f=76&t=62954
Y tal vez este recorder
Titan's Recorder v0.19d.ahk
(22.38 KiB) Downloaded 72 times

tittet11
Posts: 8
Joined: 27 Apr 2021, 03:36

Re: gravar acciones del teclado por horario con autohotkey

Post by tittet11 » 29 Apr 2021, 01:04

hola daniel, el segundo script que has colocado marca el siguiente error:
Error at line 114.Line Text: {}Error: The leftmost character above is illegal in an expression.The program will exit.
Aceptar
sin embargo, el primer script que has colocado me ha gustado, ecepto por una cosa. yo quisiera que las gravaciones se pudieran gravar y guardarlas en un archivo. sería muy complicado definir todo lo que quiero hacer mediante texto. pudieras ayudarme a convertir el archivo de esa manera por favor. o si no puedes tu, alguien mas podría ayudarme con esto, muchas gracias

19Daniel93
Posts: 40
Joined: 25 Mar 2021, 12:56
Location: La Habana, Cuba

Re: gravar acciones del teclado por horario con autohotkey

Post by 19Daniel93 » 30 Apr 2021, 10:03

Hola, a mi me funciona bien, puede ser por la version de AutoHotkey que utilizas.
Yo utilizo la v1.1.33.06
El recorder deberia salir asi:
Titan Recorder MultiIdiomas.jpg
Titan Recorder MultiIdiomas.jpg (27.68 KiB) Viewed 1629 times
Despues de grabar las acciones guarda un archivo con la fecha y la hora en una carpeta que se llama macro
Titan Recorder Guardar.jpg
Titan Recorder Guardar.jpg (39.91 KiB) Viewed 1629 times
Ese archivo lo copiarias en la carpeta donde esta el primer script y escribes lo siguiente
Script.jpg
Script.jpg (116.67 KiB) Viewed 1629 times

tittet11
Posts: 8
Joined: 27 Apr 2021, 03:36

Re: gravar acciones del teclado por horario con autohotkey

Post by tittet11 » 30 Apr 2021, 16:49

gracias Daniel; me gustaría dejar el código que dejaste en la imagen mediante texto, para que sea mas accesible y se pueda copear con facilidad:


a_wday - 1=domingo 2=lunes 3=martes 4=miercoles 5=juebes 6=viernes 7=sabado
a_hour - hora militar(00-23)
a_min - minutos -tambien puedes poner "&& (a_sec==)" de 00 a 59
sleep, 1000;1 segundo -puede verificar una vez por minuto en este caso.
(start:) i (goto,start) puedes cambiarle el nombre o añadir mas(con otro nombre por su puesto) siguiendo el mismo patrón
-los 2 con el mismo nombre

Code: Select all

start:
if (a_wday == 4) && (a_hour == 15) && (a_min == 31)
{
run a_scriptdir/macro 2021 04 30 9.58.am.ahk 
copear el archivo del recorder en esta carpeta y poner el nombre aquí
}
else
{
sleep,1000;1 segundo
}
goto,start
[Mod edit: [code][/code] tags added.]

fin del script

tittet11
Posts: 8
Joined: 27 Apr 2021, 03:36

Re: gravar acciones del teclado por horario con autohotkey

Post by tittet11 » 30 Apr 2021, 23:12

hola Daniel y a quien corresponda. estaba usando el script de Titan's Recorder y estoy descubriendo muchas desventajas y errores, por ejemplo, las flechas de arriba abajo o izquierda o derecha, no las detecta en ningún cuadro de diálogo, ni si quiera en el diálogo ejecutar ni en el explorador de archivos.


cabe destacar que todo lo ejecuté con privilegios administrativos en un archivo .exe.
además, las teclas que uno asigna para iniciar la grabación así como detener e iniciar la reproducción, en muchas ocasiones no las detecta. en mi caso, puse que fueran las teclas start=#F1,stop=#F2 y play=#F3.

también, suele pasar en todas las ocasiones, que si gravas realizando una acción con la tecla ctrl, shift o la tecla alt, sucede que al terminar de ejecutar la grabación, estas teclas se quedan pulsadas, y la única manera de destrabarlas es presionando cada tecla de forma individual.
por ejemplo. utilicé la tecla ctrl mas shift mas escape para abrir el administrador de tareas y cuando detube la gravación la tecla shift y ctrl se quedaron presionadas.

la pregunta es, existe alguna solución para esto, alguien puede ayudarme por favor, muchas gracias

19Daniel93
Posts: 40
Joined: 25 Mar 2021, 12:56
Location: La Habana, Cuba

Re: gravar acciones del teclado por horario con autohotkey

Post by 19Daniel93 » 02 May 2021, 17:27

Titan's Recorder v0.19d.ahk
(22.26 KiB) Downloaded 41 times
En este script ya se agrego las flechas de dirección, estuve revisando las versiones anteriores que tengo y no estaban includas ni en (0.18x) ni en la (0.17m) solo la (0.11a) que fue la primera las reconocia

Las teclas de acceso rapido que se utilizan no se detectan, porque la de Start cada vez que se aprieta borra lo que habias grabado y empieza a grabar desde el principio, la de Stop detiene la grabacion y Play la puedes dejar en blanco no es tan necesaria. Yo en mi caso utilizo F10 F11 F12 "solas"

Estube probando y las teclas funcionan bien, lo que pasa es que cuando presionas una tecla hace 2 acciones "tecla abajo" para apretar y "tecla arriba" para soltar, y al parecer no se porque cuando se abre el (Administrador de tareas) mientras esta maximisado el recorder no graba, por eso se aprieta "tecla abajo" pero no "tecla arriba" y se quedan presionadas.
Para arreglar esto ultimo deberias preguntar a alguien con mas experiencia. Yo tambien soy un poco nuevo pero aun asi si puedo ayudar ayudo.

tittet11
Posts: 8
Joined: 27 Apr 2021, 03:36

Re: gravar acciones del teclado por horario con autohotkey

Post by tittet11 » 04 Jun 2021, 21:44

alguien mas que pueda ayudar en corregir el error para evitar que las teclas ctrl, shift, windows o alt se queden precionadas al terminar de grabar , y que ya no se detenga la grabación al abrir el administrador de tareas?
Si no existe solución para esto, existe algún otro script que pueda hacer lo mismo sin presentar estos errores?
de lo contrario entonces tendré que echar de menos a autohotkey, y tristemente, solo me quedará programar una secuencia por horarios con comandos que ejecuten scripts de play static, cosa que no es tan deseable ya que se tiene que descargar y como tal no son ejecutables.

Post Reply

Return to “Pedir Ayuda”