我正在 AutoHotKey 中开发一个程序,该程序可以自动将 .FTM (FamiTracker) 文件批量转换为 .WAV。问题是我希望它在每个循环中增加“send {down}”语句的值+1(以选择文件夹中的下一首歌曲)。
编辑我已经更新了代码。增量语句有效,我只需要找到一种方法使整个程序根据需要循环多次以转换文件夹中的所有文件(添加+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,依此类推。
非常感谢
最佳答案
如果您想在循环中再跳过一个文件,您可以使用类似的方法。 您应该添加一个测试来比较最后一个文件名与当前文件名,以在列表末尾退出此循环。
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:然后使用它直接激活这些按钮而不是通过鼠标坐标。
祝你好运!
关于loops - AutoHotKey 循环增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992973/