AutoHotKeyは、実行せずに、事前に入力したテキストでcmdを実行します。

AutoHotKeyは、実行せずに、事前に入力したテキストでcmdを実行します。

既存のQ&Acmd実行中のコマンドを処理しますが、コマンドの一部は使用ごとに変わるため、事前に入力したテキストで開くだけにしたいのです。

完全にダミーの例では、事前に入力されたcmdで起動したいと思います。 は意図的なものです (私が見たいくつかの例では、エスケープの問題があります)。次に、 を手動で追加して削除します。del "py" --arg"mainmain.py

それは実行可能でしょうか? 以外のものを探してRun cmd.exe、「待機」し、次に としますSendInputcmdはすぐには起動せず、入力は他の場所に移動できるためです。

答え1

私は、あなたの最後の文に近いもの(コマンド プロンプトが起動するたびに何かを入力する)を使用していますが、2 つの点が異なります。1) WinWaitActive を使用してコマンド プロンプトが開いていることを確認すること、2) WinActive がまだアクティブであることを確認するために、ループで入力を送信することがある(つまり、別のウィンドウがフォーカスを奪う場合は送信を停止する)。

これによって、テキストが他の場所に送信されることが 100% 回避されるわけではありませんが、ほとんどの場合は機能します (この例では、ウィンドウ フォーカスの問題があった場合、コマンドを 3 つの部分に分割し、その間に WinActive のチェックを入れて各部分を送信することもあります)。

SendInput 以外の唯一のオプションは、ウィンドウ ID によってウィンドウにテキストを送信することですが、これはさまざまなプログラムではあまり成功していません (ControlSend を参照してください)。

ただし、あなたが尋ねていることを実際にプログラムで実行する方法があれば、それは素晴らしいことです (おそらく他の誰かが知っているでしょう)。


最小限のコーディング抜粋に対する応答として、パート 2 を投稿します...

パートA)

このフレームワークは、ウィンドウが初めて表示されたときにのみ関数を呼び出すために使用できます。セットアップ パラメータのオプション 'C'。ウィンドウを待つだけの簡略化されたバージョンを独自に作成することもできますが、このスクリプトは、フォーカスが移動して戻ってきた場合に再実行するのではなく、すでに表示されたウィンドウを追跡します。

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

cmd.exe を config セクションに配置すると、次のようになります。

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

スクリプトは、上記の3つのテキストセット、WinTitle、WindowType、Functionの間に、通常は表示されないタブをconfigセクションで使用することに注意してください。

パートB)

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}

cmd プロンプトを開き、と入力すると---、cmd が表示されます。

関連情報