AutoHotKey führt cmd mit voreingestelltem Text aus, ohne auszuführen

AutoHotKey führt cmd mit voreingestelltem Text aus, ohne auszuführen

Vorhandene Fragen und Antwortenlaufende Befehle verarbeiten, aber ich möchte einfach mit voreingestelltem Text öffnen cmd, da sich ein Teil des Befehls bei jeder Verwendung ändert.

cmdVollständiges Dummy-Beispiel, ich würde gerne mit vortypisiertem starten del "py" --arg- das "ist beabsichtigt (bei einigen Beispielen, die ich gesehen habe, gibt es Escape-Probleme). Dann würde ich manuell mainzu delete hinzufügen main.py.

Ist das machbar? Suchen Sie nach etwas anderem als Run cmd.exe, dann „warten“, dann SendInput, da cmdnicht sofort gestartet wird und die Eingabe woanders hingehen kann.

Antwort1

Ich verwende etwas, das Ihrem letzten Satz ähnelt (jedes Mal, wenn eine Eingabeaufforderung gestartet wird, wird etwas eingegeben), mit Ausnahme von zwei Dingen: 1) Verwendung von WinWaitActive, um sicherzustellen, dass die Eingabeaufforderung geöffnet ist, und 2) manchmal Senden der Eingabe in einer Schleife mit einer Prüfung auf WinActive, um sicherzustellen, dass es noch aktiv ist (d. h. Beenden des Sendens, wenn ein anderes Fenster den Fokus stiehlt).

Dadurch lässt sich zwar nicht in 100 % der Fälle verhindern, dass Text woanders hin gesendet wird, aber meistens funktioniert es (in Ihrem Beispiel würde ich den Befehl möglicherweise auch in drei Teile aufteilen und jeden mit einer Prüfung auf WinActive dazwischen senden, wenn es Probleme mit dem Fensterfokus gibt).

Die einzige andere Option neben SendInput besteht darin, den Text per Fenster-ID an das Fenster zu senden, was mir bei verschiedenen Programmen weniger Erfolg beschert hat (siehe ControlSend).

Wenn es jedoch tatsächlich eine programmgesteuerte Möglichkeit gäbe, das zu tun, wonach Sie fragen, wäre das großartig (vielleicht weiß es jemand anderes).


Posten Sie Teil 2 als Antwort auf einen minimalen Codeauszug …

Teil A)

Dieses Framework kann verwendet werden, um eine Funktion nur beim ersten Erscheinen eines Fensters aufzurufen. Option „C“ in den Setup-Parametern. Sie können Ihre eigene abgespeckte Version schreiben, um nur auf ein Fenster zu warten, aber dieses Skript merkt sich, welche Fenster bereits erschienen sind, und wird nicht erneut ausgeführt, wenn sich der Fokus verschiebt und zurückkommt.

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

Das Einfügen von cmd.exe in den Konfigurationsabschnitt könnte etwa so aussehen:

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

Beachten Sie, dass das Skript [normalerweise nicht sichtbare] Registerkarten im Konfigurationsabschnitt zwischen den drei oben gezeigten Textsätzen verwendet: Fenstertitel, Fenstertyp und Funktion

Teil B)

newCmdWindow()Funktion muss definiert werden...

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

    }
}

(Ursprüngliche Verwendung: Diese Funktion springt von jedem beliebigen Eingabeaufforderungsspeicherort zu einem benutzerdefinierten Ordner. Sie können also einen „Standard“-Speicherort festlegen, der immer geöffnet wird. Sie können aber auch zu dem Speicherort zurückkehren, an dem die Eingabeaufforderung ausgeführt wurde, indem Sie den popdBefehl verwenden. Wenn Sie beispielsweise cmd.exe aus einem Explorer-Fenster ausführen und ausdrücklich eine Eingabeaufforderung in diesem Ordner verwenden möchten, wird zum Standardordner navigiert, Sie können jedoch einfach durch Eingeben von zurückkommen popd. Dies unterscheidet sich vom Festlegen eines fest codierten Standardordners, der immer geöffnet wird.)

Sobald das Framework zur Fenstererkennung eingerichtet ist, stellen Sie die Funktion einfach so ein, dass alles gesendet wird, was Sie senden möchten. Die Nachricht wird gesendet, wenn zum ersten Mal eine neue Eingabeaufforderung aktiviert wird.

Antwort2

Ein ... kreierenHotstring

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

Öffnen Sie eine Eingabeaufforderung, geben Sie ein ---, Ihre Eingabeaufforderung wird angezeigt.

verwandte Informationen