AutoHotKey запускает cmd с предварительно введенным текстом, без выполнения

AutoHotKey запускает cmd с предварительно введенным текстом, без выполнения

Существующие вопросы и ответыобрабатывать запущенные команды, но я просто хочу открыть cmdс предварительно набранным текстом, поскольку часть команды меняется при каждом использовании.

Полностью фиктивный пример, я бы хотел запустить cmdс del "py" --argпредустановленным - это "сделано намеренно (проблемы экранирования в некоторых примерах, которые я видел). Затем я бы вручную добавил mainудалить main.py.

Это выполнимо? Ищете что-то другое, чем Run cmd.exe, затем «подождите», затем SendInput, так как cmdне запускается мгновенно, и ввод может быть направлен в другое место.

решение1

Я использую что-то близкое к вашему последнему предложению (каждый раз, когда запускается командная строка, она что-то вводит), за исключением двух моментов: 1) использование WinWaitActive для проверки того, открыта ли командная строка, и 2) иногда отправка ввода в цикле с проверкой WinActive, чтобы убедиться, что она все еще активна (т. е. остановка отправки, если другое окно перехватывает фокус).

Это не исключает отправку текста в другое место в 100% случаев, но в большинстве случаев работает (в вашем примере я мог бы также разделить команду на три части и отправлять каждую с проверкой WinActive между ними, если возникли проблемы с фокусом окна).

Единственным другим вариантом, помимо SendInput, является отправка текста в окно по идентификатору окна, что не всегда удавалось мне в различных программах (см. ControlSend).

Но если бы действительно существовал программный способ сделать то, о чем вы спрашиваете, это было бы здорово (возможно, кто-то другой знает).


Опубликуйте Часть 2, в ответ на минимальный фрагмент кода...

Часть А)

Этот фреймворк можно использовать для вызова функции только в первый раз, когда появляется окно. Опция «C» в параметрах настройки. Вы можете написать собственную урезанную версию, чтобы просто ждать окна, но этот скрипт будет отслеживать, какие окна уже появились, а не выполняться повторно, если фокус смещается и возвращается обратно.

https://www.autohotkey.com/board/topic/84397-winwait-framework-do-something-to-a-window-when-it-appears/

Помещение cmd.exe в раздел конфигурации может выглядеть примерно так:

ahk_class ConsoleWindowClass ahk_exe i)cmd.exe              C       newCmdWindow(`%WA_ID`%)

Обратите внимание, что скрипт использует [обычно невидимые] вкладки в разделе конфигурации между тремя наборами текста, показанными выше: WinTitle, WindowType и Function.

Часть Б)

newCmdWindow()необходимо определить функцию...

newCmdWindow(myID)
{

    strToSend:="REM :: USE " q("POPD") " TO JUMP BACK HERE..." "{Enter}" "pushd C:\Users\xxxx\Desktop" "{Enter}"        ; Init

    ;------------------------------------------------------
    ; Minimize collateral damage if window changes
    ;------------------------------------------------------
    Loop, Parse, % strToSend, %A_Space%    ; Parse on spaces
    {
        Sleep, 10 ; give window time to stabilize / make sure windows title isn't changing / minimize colateral damage if window changes
        If WinActive("ahk_id" myID)
            SendInput % (A_Index > 1) ? A_Space A_LoopField : A_LoopField

    }
}

(Первоначальное использование: эта функция перейдет в пользовательскую папку из любого расположения командной строки, поэтому вы можете задать расположение «по умолчанию», которое всегда открывается, но вы также можете вернуться в то место, где была запущена командная строка, с помощью команды popd. Например, если вы запускаете cmd.exe из окна проводника и хотите использовать командную строку именно в этой папке, она перейдет в папку по умолчанию, но вы можете вернуться, просто введя popd. Это отличается от настройки жестко заданной папки по умолчанию, которая всегда открывается.)

Как только вы настроите фреймворк обнаружения окон, просто настройте функцию на отправку всего, что вы хотите отправить, и это будет отправлено при первой активации любой новой командной строки.

решение2

СоздатьГорячая строка

#IfWinActive Command Prompt ahk_exe cmd.exe
:*:---::del "py" --arg{space}

Откройте командную строку, введите ---, и ваша командная строка отобразится.

Связанный контент