【发布时间】: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 PID和SendKeys。或者您可以在 .bat 和AppActivate "title"中设置标题,然后是SendKeys。 -
嗨 Rojo,感谢您回到我身边。不幸的是,第一个选项不起作用,因为 e.bat 文件需要先运行和加载。此外,我希望能够全天间歇性地向它发送命令。我已经查看了您的其他建议 - 我似乎无法获得正在运行的 bat 文件的 PID。如果我首先使用 Exec 那么它不会加载和运行程序。如何在 bat 中设置标题?
-
我在下面评论了您对
title命令的回答。Exec不会启动窗口,但它确实使您可以使用objName.StdOut.ReadLine()和类似的方法访问命令的输出,您可以使用textareaElement.value或divElement.innerText等在 HTA 中显示这些输出。title可能是不过最简单的解决方案。
标签: batch-file vbscript command hta