【问题标题】:Send command to an already opened .bat window from HTA/VBScript从 HTA/VBScript 向已打开的 .bat 窗口发送命令
【发布时间】:2017-05-03 09:04:09
【问题描述】:

在 HTA 或任何真正的编码方面,我还是个新手。 我可以很好地处理 Excel VBA,所以了解 VBScript 没问题。

我目前有一个通过 .bat 文件运行的程序(我没有构建这个程序,也不知道它是如何编写的 :)) 我目前启动 .bat 文件,然后如果我想让程序执行任何操作,我会在窗口中解析一个书面命令。

我正在尝试构建一个 HTA 以便能够为我执行此操作。我已经能够编写一个脚本来启动 .bat 文件,但我无法让它向已经打开的 cmd/bat 窗口发送命令。
我已经搜索了几天,发送命令的唯一解决方案是再次调用打开 .bat 文件,这对我不起作用,因为我需要它位于程序正在运行的当前打开的窗口中。

这是我目前所拥有的:

<head>
<title>HTA Test</title>
<HTA:APPLICATION 
     APPLICATIONNAME="HTA Test"
     SCROLL="yes"
     SINGLEINSTANCE="yes"
>
</head>

<script language="VBScript">
Sub Launch

Dim objShell :Set objShell = CreateObject("WScript.Shell") 
objShell.Run "cmd.exe /k Program_X.bat"
Set objShell=Nothing

End Sub

Sub Sendxxx
*******CODE NEEDED HERE TO SEND COMMAND "xxx" & enter TO Prgram_X**************
End Sub
</script>

<body>
<input type="button" value="Launch" name="launch"  onClick="Launch"><p> 

<input type="button" value="Sendxxx" name="Sendxxx"  onClick="Sendxxx"><p> 

</body>

如果在 HTA 的正文中也有可能,在 .bat 窗口中显示的最后一行将是一个奖励!

【问题讨论】:

  • 有没有机会用objShell.Run "cmd /c echo xxx | Program_X.bat" 替换您当前的objShell.Run 行可以解决您的问题?只要在“发送命令 xxx”提示符使用标准输入之前您的 .bat 脚本中没有任何内容,我认为它应该可以工作并为用户减少一步。否则,我认为您可能需要使用 Exec 而不是 Run 来获取 cmd 进程的 PID,然后是 AppActivate PIDSendKeys。或者您可以在 .bat 和 AppActivate "title" 中设置标题,然后是 SendKeys
  • 嗨 Rojo,感谢您回到我身边。不幸的是,第一个选项不起作用,因为 e.bat 文件需要先运行和加载。此外,我希望能够全天间歇性地向它发送命令。我已经查看了您的其他建议 - 我似乎无法获得正在运行的 bat 文件的 PID。如果我首先使用 Exec 那么它不会加载和运行程序。如何在 bat 中设置标题?
  • 我在下面评论了您对title 命令的回答。 Exec 不会启动窗口,但它确实使您可以使用 objName.StdOut.ReadLine() 和类似的方法访问命令的输出,您可以使用 textareaElement.valuedivElement.innerText 等在 HTA 中显示这些输出。title 可能是不过最简单的解决方案。

标签: batch-file vbscript command hta


【解决方案1】:

啊,我知道了 - 实际上这是一个简单的解决方案,感谢 Rojo 的建议。当我运行 bat 文件时,窗口名为 Administrator: = 所以我就这么做了:

Sub Sendxxx

Dim objShell: Set objShell = CreateObject("WScript.Shell")
objShell.AppActivate ("Administrator: =")
objShell.SendKeys ("xxx") & vbCr

End Sub

&这似乎奏效了

编辑: 它实际上不起作用,因为当我在另一台计算机上运行 .bat 文件时,即使它已启动并运行 cmd 窗口,它也没有名称并且无法在任务管理器中找到,所以我无法激活它。有任何想法的人吗?我在这里问了这个具体问题: [https://stackoverflow.com/questions/43780640/bat-cmd-window-doesnt-show-up-in-task-manager-has-no-name][1]

【讨论】:

  • 在 .bat 脚本中,使用 title 命令。 More info.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 2012-01-27
  • 1970-01-01
  • 2017-06-17
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多