运行命令和cmd中的命令有什么区别?

What's the difference between Run command and commands in cmd?

我有以下脚本:

^!c::
Run stop
Return

Stop 通过环境变量配置为 运行 一个程序。

因此,如果我打开 cmd 并键入“停止”并按回车键,程序会按预期打开,即使我按 winkey + R 它做同样的事情。但是,如果我将脚本与 ctrl+alt+c 一起使用。我没有得到相同的结果。

为什么脚本做了一些不同的事情?

我怎样才能改变我的脚本,使它的行为方式与在 cmd 或 winkey + R 中输入的方式相同?

简单:

run, %comspec% /c stop

或者,如果这不起作用,您可以 启动命令 window 并直接发送

run, %comspec% /k
WinWait, %comspec%
WinActivate
Send stop{Enter}

/c 告诉控制台 window 在执行后关闭,/k 让它保持打开状态

或者您可以使用 COM object 甚至获得输出。

objShell := ComObjCreate("WScript.Shell")
objExec := objShell.Exec(ComSpec " /c stop")

strStdOut := ""
while, !objExec.StdOut.AtEndOfStream
{
    strStdOut := objExec.StdOut.ReadAll()
}

更新: 完全没有 运行 命令:

SetTitleMatchMode, 2

send #r

WinWait, TITLE_OF_THE_RUN_WINDOW
WinActivate

send cmd{Enter}

WinWait, cmd.exe
WinActivate

WinGetTitle, title
Send stop{Enter}

WinWait, %title%,,, stop
WinClose,

TITLE_OF_THE_RUN_WINDOW 用 Win+r 打开的 window 的标题替换它。 windows cmd window 在执行时在其标题中包含命令。所以我们保存命令的标题window,并等待它删除命令("stop")然后关闭它。

更新:Cmd window close 添加到解决方案 4