Невозможно сохранить файл в указанном месте с помощью Autoit

Выполните следующие шаги, чтобы сохранить файл в нужном месте:

Шаг 1: Открывается окно "Сохранить как" (с расположением загрузок по умолчанию, с именем файла как DOC)

Шаг 2: введите имя файла как "D:\temp\sample.pdf" (которое вводится в панели редактирования)

Шаг 3: нажмите кнопку сохранения (кнопка нажата, файл загружен в папку по умолчанию, а не в папку "D:\temp")

Я создал.exe с приведенным ниже сценарием.au3

WinWait("[CLASS:#32770]","",10)
Sleep(2000)
ControlSetText("Save As", "", "Edit1", $CmdLine[1])
Sleep(5000)
ControlClick("Save As", "", "Button1");
Sleep(5000)

При нажатии кнопки "Сохранить" он сохраняется в расположении по умолчанию, а не в указанном месте.

Ниже приведен код, выполняющий скрипт.

IO.popen('autoit_script.exe D:\temp') #Ruby Code

Есть ли способ разобраться?

1 ответ

Решение

Это зависит от программного обеспечения, которое вы пытаетесь автоматизировать, но обычно это происходит из-за того, что программное обеспечение не распознает изменения в поле пути сохранения файла. Проблема в том, как работает ControlSetText. Попробуйте использовать ControlSend с некоторой проверкой ошибок, чтобы убедиться, что путь к файлу, который вы пытаетесь установить, будет введен правильно. Иногда вам нужно поиграть с несколькими различными вариантами, чтобы увидеть, что работает с программным обеспечением, которое вы автоматизируете. Вот два примера, которые вы можете попробовать:

Пример первый:

WinWait("[CLASS:#32770]", "", 10)

If Not @error Then ;make sure the window was found

     $hWin = WinGetHandle("[CLASS:#32770]") ;get window handle

     ControlSetText($hWin, "", "Edit1", $CmdLine[1]) ;set text
     ControlFocus($hWin, "", "Edit1") ;just to make sure we have focus
     ControlSend($hWin, "", "Edit1", "{ENTER}")) ;should work like click button 1 but you will have to check

    ;better then a sleep
    $hTimer = TimerInit() ; Begin the timer and store the handle in a variable.
    Do
    Until WinExists($hWin) = 0 Or TimerDiff($hTimer) >= 10000
EndIf

Пример два:

WinWait("[CLASS:#32770]", "", 10)

If Not @error Then ;make sure the window was found

    $hWin = WinGetHandle("[CLASS:#32770]") ;get window handle

    While 1
        ControlSetText($hWin, "", "Edit1", "") ;just makes sure there is no text in the control text
        ControlFocus($hWin, "", "Edit1") ;just to make sure we have focus
        ControlSend($hWin, "", "Edit1", $CmdLine[1])) ;set text using ControlSend

        If ControlGetText($hWin, "", "Edit1") = $CmdLine[1] Then ExitLoop ;makes sure that the control got ALL of the text before exiting loop
    WEnd

    ControlClick($hWin, "", "Button1");

    ;better then a sleep
    $hTimer = TimerInit() ; Begin the timer and store the handle in a variable.
    Do
    Until WinExists($hWin) = 0 Or TimerDiff($hTimer) >= 10000
EndIf
Другие вопросы по тегам