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 之外的唯一其他选项是通过窗口 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 就会显示出来。

相关内容