AutoHotKey ejecuta cmd con texto preescrito, sin ejecutar

AutoHotKey ejecuta cmd con texto preescrito, sin ejecutar

Preguntas y respuestas existentesmanejar comandos en ejecución, pero simplemente deseo abrir cmdcon texto preescrito, ya que una parte del comando cambia con cada uso.

Ejemplo completamente ficticio, me gustaría iniciarlo cmdcon del "py" --argpreescritura: "es intencional (escapa de problemas con algunos ejemplos que he visto). Luego, agregaría mainy eliminaría manualmente main.py.

¿Es factible? Busque algo más que Run cmd.exe"esperar" y luego SendInput, ya que cmdno se inicia instantáneamente y la entrada puede ir a otra parte.

Respuesta1

Utilizo algo parecido a su última oración (cada vez que se inicia un símbolo del sistema, escribe algo), excepto por dos cosas, 1) usar WinWaitActive para asegurarse de que el símbolo del sistema esté abierto y 2) a veces enviar la entrada en un bucle con un verifique WinActive para asegurarse de que aún esté activo (es decir, deje de enviar si otra ventana roba el foco).

Esto no evita que se envíe texto a otro lugar el 100% del tiempo, pero funciona la mayor parte del tiempo (en su ejemplo, también podría dividir el comando en tres partes y enviar cada una con una marca de WinActive en el medio, si hay eran problemas de enfoque de ventana).

La única otra opción además de SendInput es enviar el texto a la ventana por ID de ventana, con lo que he tenido menos éxito para varios programas (consulte ControlSend).

Sin embargo, si realmente hubiera una forma programática de hacer lo que estás preguntando, sería genial (tal vez alguien más lo sepa).


Publicar la Parte 2, en respuesta a un extracto mínimo de codificación...

Parte A)

Este marco se puede utilizar para llamar a una función solo la primera vez que aparece una ventana. Opción 'C' en los parámetros de configuración. Puede escribir su propia versión simplificada solo para esperar a que aparezca una ventana, pero este script realizará un seguimiento de qué ventanas ya han aparecido, en lugar de volver a ejecutarlas si el foco cambia y regresa.

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

Poner cmd.exe en la sección de configuración podría ser algo como:

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

Tenga en cuenta que el script utiliza pestañas [normalmente no visibles] en la sección de configuración entre los tres conjuntos de texto que se muestran arriba, WinTitle, WindowType y Function.

Parte B)

newCmdWindow()es necesario definir la función...

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

    }
}

(Uso original: esta función saltará a una carpeta personalizada desde cualquier ubicación del símbolo del sistema, por lo que puede establecer una ubicación 'predeterminada' que siempre se abre, pero también puede volver a la ubicación en la que se ejecutó el símbolo del sistema, al usando el popdcomando. Por ejemplo, si ejecuta cmd.exe desde una ventana del explorador y específicamente desea usar un símbolo del sistema en esa carpeta, navegará a la carpeta predeterminada, pero puede regresar simplemente escribiendo popdEsto es diferente a configurar un . carpeta predeterminada codificada que siempre se abre)

Una vez que tenga implementado el marco de detección de ventanas, simplemente configure la función para enviar lo que quiera enviar, y se enviará la primera vez que se active un nuevo símbolo del sistema.

Respuesta2

Crear uncuerda caliente

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

Abra un mensaje de cmd, escriba ---y aparecerá su cmd.

información relacionada