【问题标题】:AutoHotKey Loop incrementsAutoHotKey 循环增量
【发布时间】:2013-02-22 19:38:43
【问题描述】:

我正在开发 AutoHotKey 中的一个程序,该程序可以自动将 .FTM (FamiTracker) 文件大量转换为 .WAV 的过程。问题是我希望它在每个循环中增加“send {down}”语句的值+1(以选择文件夹中的下一首歌曲)。

edit我已经更新了代码。增量语句有效,我只需要找到一种方法使整个程序循环根据需要多次转换文件夹中的所有文件(添加 +1 以发送 {down} 每个循环)。 现在的问题是它没有循环整个程序。感谢任何帮助!

以下是启动 FamiTracker 音乐应用程序后程序外观的摘录:

  Sleep, 800 ; I want the program to loop back to here when it reaches the last line
click 20,30 ; clicks "file"
  Sleep, 500
Send {down 2} ; clicks "open"
send {enter}
  Sleep, 1200
click 211,128 ; clicks first filename in folder
  Sleep, 1200
send {enter}
  Sleep, 1000
click 20,30 ; clicks "file"
send {down 6}
send {enter} ; clicks "create wav"
  Sleep, 1000
click 157,57 ; increase playcount to 2
  Sleep, 500
send {enter}
  Sleep, 1000
send {enter}
  Sleep, 2500
send {enter}
click 20,30 ; clicks "file"
  Sleep, 500
Send {down 2} ; clicks "open"
send {enter}
  Sleep, 1200
click 211,128 ; clicks first filename in folder
  Sleep, 1000
Jmp:=1
Loop
{
    Send, {Down %Jmp%}
    Jmp+=1
return
}
sleep, 100
send {enter}
  Sleep, 1000
click 20,30 ; clicks "file"
send {down 6}
send {enter} ; clicks "create wav"
  Sleep, 1000
click 157,57 ; increase playcount to 2
  Sleep, 500
send {enter}
  Sleep, 1000
send {enter}
  Sleep, 2500
send {enter}
  Sleep, 1000 ; final line of code, want it to loop back to line 1 to repeat process till all files in folder are converted

我被困了很长时间,有什么想法吗?我本质上希望光标在程序的每个循环之后移动到下一首歌曲。程序第一次运行时,它会加载歌曲 1,一旦歌曲 1 完成,它会重复该过程,但继续单击歌曲 2,以此类推。

非常感谢

【问题讨论】:

  • 我没有将其写在答案中,而是更新了您的代码。循环花括号需要在代码之外,您可能需要检查是否已到达文件列表的末尾。
  • 刚刚看到我的更新没有被接受......

标签: loops converter autohotkey


【解决方案1】:

如果您想在循环中再跳过一个文件,您可以使用类似的方法。 您应该添加一个测试以将最后一个文件名与当前文件名进行比较,以在列表末尾退出此循环。

Jmp:=1
Loop
{
    Send, {Down %Jmp%}
    Jmp+=1
}
Return

我已更新您的代码以展示如何使用循环。花括号定义了在循环中执行的内容。

InputBox, Jmp , Start, Enter Start number,,,,,,,,1
Loop
{
Sleep, 800
click 20,30 ; clicks "file"
  Sleep, 500
Send {down 2} ; clicks "open"
; Copy the file name somewhere here
; Send, ^c ; Copy highlighted text to ClipBoard
; ClipWait
; If (ClipBoard = PreviousName)
; {
;    Break
;    MsgBox, Next filenumber = %Jmp%
; }
; PreviousName = %ClipBoard%
send {enter}
  Sleep, 1200
click 211,128 ; clicks first filename in folder
  Sleep, 1200
send {enter}
  Sleep, 1000
click 20,30 ; clicks "file"
send {down 6}
send {enter} ; clicks "create wav"
  Sleep, 1000
click 157,57 ; increase playcount to 2
  Sleep, 500
send {enter}
  Sleep, 1000
send {enter}
  Sleep, 2500
send {enter}
click 20,30 ; clicks "file"
  Sleep, 500
Send {down 2} ; clicks "open"
send {enter}
  Sleep, 1200
click 211,128 ; clicks first filename in folder
  Sleep, 1000
Send, {Down %Jmp%}
Jmp+=1
sleep, 100
send {enter}
  Sleep, 1000
click 20,30 ; clicks "file"
send {down 6}
send {enter} ; clicks "create wav"
  Sleep, 1000
click 157,57 ; increase playcount to 2
  Sleep, 500
send {enter}
  Sleep, 1000
send {enter}
  Sleep, 2500
send {enter}
  Sleep, 1000
;    If (Jmp > "1000")
;        Break
}
Return

您的原始代码将一直运行到文件列表的末尾,然后一遍又一遍地对最后一个文件执行相同的操作。因此,我在代码中添加了文件名比较。在文件打开时,您可能有文本形式的文件名,这是您复制到剪贴板并将剪贴板与以前的文件名进行比较的内容。通过添加起始​​编号,您可以在某个文件处重新开始。

我看到您的代码使用了很多鼠标点击。只运行一次没问题,但如果你想可靠地运行,还有其他方法。

整体检查: 检查在此过程中打开的每个窗口,并验证正确的窗口是否打开。在此示例中,我检查标题为“文件打开”的窗口是否确实已打开并处于活动状态(其他进程或程序 [聊天、更新等] 可以接管焦点,您的脚本将执行其中的代码其他程序...)。

SetTitleMatchMode = 2
WinWaitActive, File Open, , 5 ; Wait up to five seconds for the screen
  if ErrorLevel ; Execute this when the window is not activated within 5 seconds
  { 
    SoundBeep 1000 , 1000 ; Warn the user
    Break
  }

如果可能,也尝试使用键盘快捷键或(更高级)使用AutoHotKey Windows Spy 并检查 ClassNN:在“现在在鼠标光标下”部分,然后使用它直接激活这些按钮,而不是通过鼠标坐标。

祝你好运!

【讨论】:

  • 我已经更新了我上面的代码,只是想知道如何在每次向发送 {down} 语句添加 +1 的同时使程序循环(可能大约 100 个文件)。
  • 太棒了!现在可以使用了 :) 非常感谢 Ilbrink 先生!我将检查每一行代码以尝试并完全理解它的作用。感谢所有的建议和帮助:)
【解决方案2】:

尝试使用Window Spy,这样您将获得某个窗口的控件的类名。如果该窗口上有进度条,则更容易收听进程完成的事件。

基本上,使用ControlGet 命令获取转换进度,使用ControlSend 命令在控件上发送事件(例如ControlSend, Button1, {Click}, ahk_class AWindow)。

【讨论】:

    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多