Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

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

Moderator: Flipeador

Altober
Posts: 6
Joined: 22 Mar 2018, 16:37

Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

22 Mar 2018, 16:58

Hola a todos. Muy buenas tardes.
MI nombre es Alberto (por eso mi nick :lol: ), tengo 50 años y me gusta mucho Autohotkey, aunque me está costando dar mis primeros pasos con este completo lenguaje de programación.

Les cuento... Soy un gran coleccionista de películas, y después de descargarlas las "limpio" (como los pescados).
Descargo en formato MKV, y en su interior vienen con mucha publicidad de la página que se descarga, y no me gusta ver esas publicidades en mi TV cuando veo las películas.
Para ese trabajo me valgo del programa MKVToolnix.
El tema es que la tarea y los textos a escribir son tediosos y repititivos, y repititivos :lol:
Ahí es donde nace la idea de hacerlo con Autohotkey.
Necesito un "programita" que se componga básicamente de 3 módulos (guis?) el primero es para el video (casi siempre será H264), el segundo es para el audio (ahí puede haber mucha variedad, aunque casi siempre será inglés y español, y finalmente subtítulos, que casi siempre será Español e Inglés.
Pensé en un gui que me interrogue acerca de cada ítem, y yo ponga un "check" (palomitas, tildes, según país de cada uno) y al aceptar AHK haga el trabajo tedioso.
Pero me estoy volviendo loco con los gosubs, y con que no puedo ir concretamente a la subrutina deseada.
En fin, pongo el código que fui haciendo (aclaro que no está finalizado), a ver si alguien me puede ayudar, cosa que agradecería muchísimo, y así de paso aprendo.

Code: Select all

; =============== variables /===============
videoAVC := "H264_Video"
videoEVC := "H265_Video"
audioAC3Eng := "AC3_English"
audioEAC3Eng := "E-AC3_English"
audioAC3Spa := "AC3_Spanish"
audioEAC3Spa := "E-AC3_Spanish"
audioAC3Fre := "AC3_French"
audioEAC3Fre := "E-AC3_French"
audioAC3Jap := "AC3_Japanese"
audioEAC3Jap := "E-AC3_Japanese"
audioAC3Ita := "AC3_Italian"
audioEAC3Ita := "E-AC3_Italian"
audioAACEng := "AAC_English"
audioAACSpa := "AAC_Spanish"
audioAACFre := "AAC_French"
audioAACJap := "AAC_Japanese"
audioAACIta := "AAC_Italian"
subSpa := "SRT_Spanish"
subEng := "SRT_English"
subIta := "SRT_Italian"
; ===============/ variables ===============
     IfWinExist, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit
     WinActivate, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit

Gui, +AlwaysOnTop
Gui, Add, Tab, w250 h300 x10 y10, Video|Audio|Subtítulos
Gui, Add, Text, W150 H30, Tipo de Video
Gui, Add, Checkbox, vH264 , H264
Gui, Add, Checkbox, vH265 , H265
Gui, Add, Text, W150 H20, 
Gui, Add, Text, W150 H20, 
Gui, Add, Text, W150 H20, 
Gui, Add, Text, W150 H20, 
Gui, Add, Text, W150 H24, 
Gui, Add, Button, w70 h22 default, Ok
Gui, Add, Button, xp+80 yp w70 h22, Cancel
Gui, Tab, 2
Gui, Add, Text, W150 H30, Tipo de Audio
Gui, Add, Checkbox, vAC3Eng , AC3 English
Gui, Add, Checkbox, vEAC3Eng , E-AC3 English
Gui, Add, Checkbox, vAC3Spa , AC3 Spanish
Gui, Add, Checkbox, vEAC3Spa , E-AC3 Spanish
Gui, Add, Checkbox, vAC3Fre , AC3 French
Gui, Add, Checkbox, vAC3Ita , AC3 Ita
Gui, Add, Checkbox, vAC3Jap , AC3 Japanese
Gui, Add, Checkbox, vAACEng , AAC English
Gui, Add, Checkbox, vAACSpa , AAC Spanish
Gui, Add, Text, W150 H27, 
Gui, Add, Button, w70 h22 default, Oka
Gui, Add, Button, xp+80 yp w70 h22, Cancela
Gui, Tab, 3
Gui, Add, Text, W150 H30, Tipo de Subtítulos
Gui, Add, Checkbox, vSRTEsp , SRT Spanish
Gui, Add, Checkbox, vSRTEng , SRT English
Gui, Add, Checkbox, vSRTIta , SRT Italian
Gui, Add, Text, W150 H20, 
Gui, Add, Text, W150 H20, 
Gui, Add, Text, W150 H20, 
Gui, Add, Text, W150 H20, 
Gui, Add, Text, W150 H5, 
Gui, Add, Button, w70 h22 default, Ok
Gui, Add, Button, xp+80 yp w70 h22, Cancel

Gui, Show,,MKV Toolnix Helper,
return


buttonOk:
Gui, submit, nohide
  {
    If (vH64=1)
	gosub H264
	}
	{
		If (H265=1) 
		gosub H265
	}
	
buttonCancel:
GuiEscape:
GuiClose:

H264:
    IfWinExist, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit
    WinActivate, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit
    Send, {Tab down}{Tab up}{Tab down}{Tab up}{Tab down}{Tab up}
    SetKeyDelay, 100
    send, %videoAVC%
    Send, {Tab down}{Tab up}{Home down}{Home up}{e down}{e up}
    SetKeyDelay, 100
    Send, {Tab down}{Tab up}{Home down}{Home up}{s down}{s up}
    SetKeyDelay, 100
    Send, {Tab down}{Tab up}{Home down}{Home up}{n down}{n up}
    Reload
    return

H265:
    IfWinExist, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit
    WinActivate, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit
    Send, {Tab down}{Tab up}{Tab down}{Tab up}{Tab down}{Tab up}
    SetKeyDelay, 100
    send, %videoEVC%
    Send, {Tab down}{Tab up}{Home down}{Home up}{e down}{e up}
    SetKeyDelay, 100
    Send, {Tab down}{Tab up}{Home down}{Home up}{s down}{s up}
    SetKeyDelay, 100
    Send, {Tab down}{Tab up}{Home down}{Home up}{n down}{n up}
    Reload
    return

buttonOka:
Gui, submit, nohide
	{
	  If (vAC3Eng=1)
	gosub AC3English
	}
	{
	  If (vEAC3Eng=1)
	gosub EAC3English
	}
	
	
AC3English:
    IfWinExist, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit
    WinActivate, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit
    Send, {Tab down}{Tab up}{Tab down}{Tab up}{Tab down}{Tab up}
    SetKeyDelay, 100
    send, %audioAC3Eng%
    Send, {Tab down}{Tab up}{Home down}{Home up}{e down}{e up}
    SetKeyDelay, 100
    Send, {Tab down}{Tab up}{Home down}{Home up}{s down}{s up}
    SetKeyDelay, 100
    Send, {Tab down}{Tab up}{Home down}{Home up}{n down}{n up}
    Reload
    return
    
EAC3English:
    IfWinExist, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit
    WinActivate, MKVToolNix GUI v21.0.0 ('Tardigrades Will Inherit The Earth') 64-bit
    Send, {Tab down}{Tab up}{Tab down}{Tab up}{Tab down}{Tab up}
    SetKeyDelay, 100
    send, %audioEAC3Eng%
    Send, {Tab down}{Tab up}{Home down}{Home up}{e down}{e up}
    SetKeyDelay, 100
    Send, {Tab down}{Tab up}{Home down}{Home up}{s down}{s up}
    SetKeyDelay, 100
    Send, {Tab down}{Tab up}{Home down}{Home up}{n down}{n up}
    Reload
    return
    
    
    
    ^ñ:: reload
Bueno, espero se entienda la consulta, he tratado de hacerla lo más completa y prolija posible (por suerte algo conozco acerca de bbcode por algunos foros en los que he participado.
Desde ya, muchísimas gracias!

Edit:
Código actualizado: Actualmente funciona Perfectamente la Pestaña Video, pero en la pestaña Audio funciona correctamente la primera opción, cuando se tilda la segunda, el programa lanza la primera opción :thumbdown:

Edit2:
Creí que el foro en español sería el lugar más apropiado para pedir ayuda con mi script, no pensé que estaba abandonado.
No pretendo hacer una consulta y obtener una respuesta a los 3 minutos, pero ya han pasado casi 24 horas y absolutamente nadie ha podido contestar.
El problema es que si hago la misma consulta en el foro en inglés, seguramente estaré violando alguna regla, así que no me queda otra que esperar. :thumbdown:
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

23 Mar 2018, 22:18

Hola,
Creí que el foro en español sería el lugar más apropiado para pedir ayuda con mi script, no pensé que estaba abandonado.
La verdad no hay muchos usuarios activos que respondan en el foro en español, obviamente el foro en inglés es el principal y más activo, pero qué, como tu bien dijiste No pretendo hacer una consulta y obtener una respuesta a los 3 minutos no quiere decir que este abandonado; a veces se está muy ocupado, o puede no llamar mucho la atención ciertos temas.

La información que proporcionas, acerca de los pasos que das en el programa exactamente, no están del todo claro, y se hace difícil responderte, ya que no expones una duda sobre el funcionamiento de algo en concreto. Unas imágenes sobre la interfaz editada con los pasos a seguir sería lo más apropiado.
Bueno, espero se entienda la consulta, he tratado de hacerla lo más completa y prolija posible (por suerte algo conozco acerca de bbcode por algunos foros en los que he participado.
Pues esto también seria bueno que lo apliques al código que escribas, te recomiendo que leas Código espagueti y lo evites, es normal cuando uno recién empieza... las funciones no muerden ;)
Código actualizado: Actualmente funciona Perfectamente la Pestaña Video, pero en la pestaña Audio funciona correctamente la primera opción, cuando se tilda la segunda, el programa lanza la primera opción
Bueno, parece que tu problema son los tiempos (retrasos, a veces necesarios entre cada comando) y el uso de Send para interactuar con los controles de la ventana, puede que te sirva el uso de los comandos para controles. Eso lo vas a tener que ver tú, e ir intentando con Sleeps y SendInput hasta que tu código Interactúe bien con la ventana de MKVToolnix.
Con respecto a lo último cuando se tilda la segunda, el programa lanza la primera opción, no está del todo claro, como te dije, una imagen sería muy útil.

PD: el IfWinExist es innecesario. Se supone la ventana existe. Además, en caso de que sea necesario comprobar, deberías agregar {} así afecta a todo el código entre ellos y no solo al WinActivate.
El problema es que si hago la misma consulta en el foro en inglés, seguramente estaré violando alguna regla, así que no me queda otra que esperar.
Lamentablemente no hay un tema dedicado explícitamente a las reglas. Parece que "no te has aguantado".
Altober
Posts: 6
Joined: 22 Mar 2018, 16:37

Re: Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

23 Mar 2018, 23:45

Gracias por la respuesta.
Especificamente mi duda con el código es la siguiente.
Cada opción que yo tildo (check) en el chekbox, es una atajo de teclado distinto que el script lanza sobre MKVToolnix.
El gui lo dividí en tres pestañas, Video, Audio y Subtítulos.
La pestaña video tiene dos items para tildar, y funciona correctamente.
La pestaña audio tiene varios items para tildar...
Concretamente, el primer item es AC3_English, cuando lo.tildo, se activa correctamente sobre MKVToolnix, el segundo item es E-AC3English, y ahí tengo el problema, cuando tildo únicamente esta segunda opción, el script activa la primera opción.
Esto no lo pude solucionar.
No entiendo porque le digo que vaya a una subrutina y va a la otra.
En fin....

Si bien no tengo claro como solucionar concretamente este error que me está frenando, voy a leer los "deberes" que me dejaste.
Busqué y leí mucho, baje como 30 ahk de ejemplos para analizar los códigos de cada uno
Y busqué muchísimas variantes para mi script, lamentablemente ninguna funcionó.
Gracias de nuevo!
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

24 Mar 2018, 06:55

Debes quitar el prefijo v en tus variables, por ejemplo vAC3Eng --> AC3Eng. Puedes añadir un MsgBox para comprobar el contenido de las variables (a esto se le denomina debugging).
El prefijo v es para cuando creas los controles, para indicarle a AHK el nombre de la variable asociada al control. Lee aquí.
Altober
Posts: 6
Joined: 22 Mar 2018, 16:37

Re: Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

24 Mar 2018, 07:26

Muchas Gracias Flipeador! A trabajar entonces... Después edito y te cuento mis progresos (espero no sean mis "fracasos")
Altober
Posts: 6
Joined: 22 Mar 2018, 16:37

Re: Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

25 Mar 2018, 08:43

Pues no, sacando la v de las variables el script se vuelve completamente obsoleto. Me pone Invalid option sañalándome justamente AC3Eng.

De hecho algunas de las tantas ideas para mi script las saqué de las ayudas de AHK, y ví que allí si tienen la v y eso fue lo que traté de imitar.

Code: Select all

; WORKS ON FILES AND FOLDERS
; activates XYplorer window, copies selected item(s) to clipboard, performs chosen rename option and renames item(s)

#SingleInstance force
SendMode Input

 IfWinExist, XYplorer
 WinActivate, XYplorer

Gui, Add, Text, h-1 section , Select Rename Option
Gui, Add, Checkbox, vRemoveStart , Remove first 5 characters
Gui, Add, Checkbox, vAddDateStart , Prepend today's date
Gui, Add, Checkbox, vAddDateEnd , Append today's date
Gui, Add, Button, w70 h22 default, Rename
Gui, Add, Button, xp+80 yp w70 h22 , Cancel
Gui, show,,DeRenamer
return

buttonRename:
Gui, submit, nohide
clipboard =   
 WinActivate, XYplorer
 Send, ^c 
 ClipWait
Loop, Parse, clipboard, `n, `r
  {
   SplitPath, A_LoopField, Name, Path, Ext, BaseName, Drive
		If (RemoveStart=1)
	gosub RemoveStart
		If (AddDateStart=1) 
	gosub AddDateStart
		If (AddDateEnd=1) 
	gosub AddDateEnd
  }
return

buttonCancel:
GuiEscape:
GuiClose:
exitapp

RemoveStart:
newname := SubStr(Name, 6)
gosub Rename
return

AddDateStart:
FormatTime, dateStamp, YYYYMMDDHH24MISS, yyyy-MM-dd
newname = %datestamp%-%BaseName%.%Ext%
gosub Rename
return

AddDateEnd:
FormatTime, dateStamp, YYYYMMDDHH24MISS, yyyy-MM-dd
newname = %BaseName%-%datestamp%.%Ext%
gosub Rename
return

Rename:
FileMoveDir, %A_LoopField%, %Path%\%newname% , R
return

El problema es que este script tiene gosubs a una sola subrutina, y yo tengo más de una subrutina, claramente la falla se produce en la parte donde no puedo cerrar los if/gosub con un
buttonCancel:
GuiEscape:
GuiClose:


Ya que solo lo puedo hacer una vez, debido a que si lo vuelvo a hacer me sale error por etiquetas repetidas.

En fin, sigo golpeándome la cabeza contra la pared
Gracias.
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

25 Mar 2018, 12:31

¿Has leído el enlace que te puse?, porque no me has entendido lo de la v.
Cuando creas un control, por ejemplo Gui, Add, Checkbox, vH264 , H264 si va la v, pero luego por ejemplo en If (vH64=1) la tienes que quitar... es solo un prefijo y no forma parte de la variable.
Altober
Posts: 6
Joined: 22 Mar 2018, 16:37

Re: Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

25 Mar 2018, 17:51

Perdón, no había entendido.
Si leí absolutamente todos los enlaces que me pusiste, y como 150 más también.
Por cierto, muchas gracias! El script ahora está funcionando.
Además mi poder de observación evidentemente es muy pobre, en el código que puse de ejemplo yo mismo te estoy mostrando mi error, ya que el autor de esos scripts quitaba la v de los if
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

26 Mar 2018, 05:09

Pues que bueno que lo hayas podido solucionar, si tienes alguna otra duda, no dudes en preguntar :) .
Estuve leyendo tu tema en ingles (es ingles, ¿no? :lol:), más concretamente:
Altober wrote:Inicially I made this ask in spanish forum, but unfortunately after 24hs no one answer in my ask.
y... :headwall: haces quedar al foro en español más abandonado de lo normal :lolno:.

Saludos! :wave:
Spoiler
;)
Altober
Posts: 6
Joined: 22 Mar 2018, 16:37

Re: Ayuda Para Lanzador de Keystrokes (Atajos de Teclas)

26 Mar 2018, 10:05

Muchas Gracias de nuevo! El script ya fue terminado, y me está siendo de muchísima utilidad con mis películas.
Por cierto, seguramente estás teniendo "visiones forísticas" (es un mal que ataca a la gente que se pasa más de dos años en foros), ya que el tema que citas en un supuesto inglés, no veo que exista ehh. :lol: :lol:
Saludos y Gracias de nuevo!

Ooops, parece que no eran "visiones forísticas" entonces. Al final los moderadores tienen demasiadas herramientas! :lol:

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 22 guests