AutoHotKey 使用預先輸入的文字執行 cmd,但不執行

AutoHotKey 使用預先輸入的文字執行 cmd,但不執行

現有問答處理正在運行的命令,但我只是希望cmd使用預先輸入的文字打開,因為命令的一部分會隨著每次使用而改變。

完全虛擬的範例,我想cmddel "py" --arg預先鍵入的方式啟動 - 這"是故意的(逃避我見過的一些範例的問題)。然後,我會手動新增main刪除main.py

可行嗎?尋找 以外的其他內容Run cmd.exe,然後“等待”,然後SendInput, 因為cmd不會立即啟動,並且輸入可以轉到其他地方。

答案1

我使用接近你最後一句話的東西(每次啟動命令提示符時,它都會輸入一些內容),除了兩件事,1)使用 WinWaitActive 確保命令提示符打開,2)有時使用循環發送輸入檢查WinActive 以確保它仍然處於活動狀態(即,如果另一個視窗竊取焦點,則停止發送)。

這並不能避免100% 的情況下將文字發送到其他地方,但它在大多數情況下確實有效(在您的範例中,我還可以將命令分為三部分,並在發送每一部分時檢查其間的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 放入配置部分可能類似於:

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

請注意,該腳本在上面顯示的三組文字(WinTitle、WindowType 和 Function)之間的配置部分中使用 [通常不可見] 選項卡

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 將會顯示。

相關內容