; Use for debugging issues. Systray icon show current line.
Opt('TrayIconDebug', 1)
; Delay default: 250s
Opt('WinWaitDelay', 400)
; Delay default: 5s
Opt('SendKeyDelay', 100)
; Path of the wav file.
$sInFile = @WorkingDir & '\test.wav'
; Optional permanent change of splash screen setting.
_SplashScreen(True)
; Run Audacity and argument of the wav file.
$iPid = Run('"C:\Program Files (x86)\Audacity\audacity.exe" "' & $sInFile & '"')
; Check if Run Audacity failed.
If @error Then
MsgBox(0x40030, @ScriptName, 'Failed to run Audacity')
Exit 1
EndIf
; Wait for main window to get handle. Title is the filename with no extension.
$hMainWindow = WinWait('[TITLE:test; CLASS:wxWindowNR]', '', 10)
; Check allowed timeout of window.
If Not $hMainWindow Then
MsgBox(0x40030, @ScriptName, 'Audacity window not detected.')
Exit 1
EndIf
; If splash screen setting not 0 then handle the window.
If _SplashScreen() Then
AdlibRegister('_WelcomeWindow')
WinWait('Welcome to Audacity', '', 3)
AdlibUnRegister('_WelcomeWindow')
EndIf
; Send '[' to main window to trigger Left Boundary window.
ControlSend($hMainWindow, '', '', '[')
; Get handle of Left Boundary window.
$hMsgWindow = WinWait('Set Left Selection Boundary', '', 5)
; Check allowed timeout of window.
If Not $hMsgWindow Then
MsgBox(0x40030, @ScriptName, 'Selection Boundary window not detected.')
Exit 1
EndIf
; Activate window, set time and click OK.
If WinActivate($hMsgWindow) Then
ControlSend($hMsgWindow, '', 'wxWindowNR1', '{LEFT 3}1'); 1000
ControlClick($hMsgWindow, '', 'Button2'); OK
EndIf
; Send ']' to main window to trigger Right Boundary window.
ControlSend($hMainWindow, '', '', ']')
; Get handle of Right Boundary window.
$hMsgWindow = WinWait('Set Right Selection Boundary', '', 5)
; Check allowed timeout of window.
If Not $hMsgWindow Then
MsgBox(0x40030, @ScriptName, 'Selection Boundary window not detected.')
Exit 1
EndIf
; Activate window, set time and click OK.
If WinActivate($hMsgWindow) Then
; Audacity shows 1000 and focus is on the 1st non zero digit which is 1.
ControlSend($hMsgWindow, '', 'wxWindowNR1', '2'); 2000
ControlClick($hMsgWindow, '', 'Button2'); OK
EndIf
; More code to do.
Sleep(1000)
MsgBox(0x40040, @ScriptName, 'End of automation.' & @CRLF & @CRLF & _
'You can close Audacity to finish.')
; Wait for Audacity process to close.
ProcessWaitClose($iPid)
Exit
Func _WelcomeWindow()
; Used by AdlibRegister to handle the Welcome window.
; Welcome window hides if closed so need to check if exist and is visible (2).
If WinExists('Welcome to Audacity') Then
If BitAND(WinGetState('Welcome to Audacity'), 2) Then
WinClose('Welcome to Audacity')
Else
AdlibUnRegister('_WelcomeWindow')
EndIf
EndIf
EndFunc
Func _SplashScreen($bDisable = False)
; Write to audacity.cfg to disable splash screen.
Local $sIniFile = @AppDataDir & '\Audacity\audacity.cfg'
If IniRead($sIniFile, 'GUI', 'ShowSplashScreen', '1') = '1' Then
If $bDisable Then
; Return 1 if ini file change is success.
If IniWrite($sIniFile, 'GUI', 'ShowSplashScreen', '0') Then
Return 1
EndIf
Else
; Return 1 if check for splash screen is enabled.
Return 1
EndIf
EndIf
EndFunc
Opt()
используется для замедления ожидания окон и отправки.
Также добавлен Opt('TrayIconDebug', 1)
для отладки, если, если
скрипт считается хорошим, тогда вы можете удалить это Opt()
.
ControlSend()
используется вместо Send()
как ControlSend()
целевые окна и элементы управления на основе заголовка, текста и т. д.
Задержки Opt()
не требуются, хотя были добавлены в
продемонстрировать использование, хотя, возможно, Audacity может бороться
чтобы сохранить скорость, которую AutoIt может автоматизировать.
Если возможно, предложите использовать функции Control*()
для автоматизации.
Хранение дескрипторов окна в переменной может помочь сохранить повторный набор заголовков.
в коде. WinWait()
возвращает дескриптор окна, который является идеальным и
если используется параметр тайм-аута, то 0 означает, что окно не
найдено, чтобы автоматизация могла быть прервана.
Имя класса главного окна само по себе недостаточно, так как
Audacity создает много невидимых окон с одним и тем же именем класса.
Таким образом, название может потребоваться также. Название может быть
используется один, хотя под названием имя файла может не быть уникальным время от времени.
См. Заголовки окон и Расширенный текст для использования.
WinActivate()
используется в окнах Границы, хотя это
может не понадобиться, так как control*()
обычно не нуждаются в активном
окна. Стандартные Msgbox для сравнения могут потребовать
активно принимать сообщения, отправленные им.
ShellExecuteWait()
и RunWait()
не годятся для автоматизации
поскольку они блокируют сценарий от продолжения до выполнения
Процесс завершен.
Поэтому используйте ShellExecute()
или Run()
вместо этого.
Повторное использование RunWait("Audacity")
выглядит как
отчаяние, чтобы исправить поведение, возможно, хотя и с недостатками.
Ожидание появления окон - как управлять потоком, а затем
такие функции, как ControlCommand()
могут определять состояние элементов управления.
ControlClick()
используется на кнопках.
CtrlID Classname Button2
используется, хотя, если скрипт
всегда для английских пользователей, то вы можете использовать текст, который
будет OK
для кнопки OK .
ProcessWaitClose($iPid)
необязательно.
Иногда полезно подождать программу
автоматизирован для выхода до выхода из скрипта.
Вы комментируете ", чтобы диалоговое окно исчезло " в вашем коде
после запуска Audacity. Вы можете изменить настройку на
диалоговое окно или Настройки -> Параметры интерфейса . Совет
отключение, так как это проблема будущего, чтобы продолжать обработку.
Я добавил код, чтобы отключить настройку в
audacity.cfg
файл. Если не предпочитаете отключать с помощью
_SplashScreen(True)
или сделано вручную
AdLibRegister('_WelcomeWindow')
вызов обработает
закрывая окно Обратите внимание, что окно приветствия
не близко, а скорее прячется.
_SplashScreen(True)
изменяет настройку заставки на 0
, чтобы отключить заставку.
_SplashScreen(False)
или _SplashScreen()
не изменяет настройки.
Вызов возвращает 1
, если включена заставка, иначе 0
.