我有一个实用程序 (myprog.exe),需要登录密码才能运行。它有一个用于 ID 和密码的 .ini 文件,但由于某种原因,它不会使用我输入到 ini 文件中的值(我认为它应该自动更新 ini 文件,但事实并非如此),所以我想想出一个解决方法。
如果从 .bat 文件运行
echo <USER ID> | myappp.exe
这正确地将 ID 号传递给程序,并前进到 PW 输入。如果我输入 PW 并按 [Enter],程序将正常工作(图像是从批处理文件运行上述命令的输出)。我要做的所有事情就是将这个 PW 的键盘输入传递给程序。我尝试了几种不同的语法形式来执行第二个 echo 命令,但它们不起作用,或者以某种方式挂起了程序。
我没有编写该实用程序,作者无法提供进一步的帮助。
编辑批处理文件并添加第二个 echo 命令
echo <password> | myappp.exe
以任何语法形式,或尝试在第一个 echo 命令后调用第二个批处理文件
echo <USER ID> | myappp.exe
call 2ndinput.bat
所有的尝试都得到了相同的结果:
答案1
仅当命令提示键盘输入时,管道输入命令才有效。(即使这样也并非总是如此,例如它对“runas”命令不起作用)
不过,您可以使用 vbscript(与 win7 捆绑在一起)及其 sendkeys 函数。(不过请记住,它有点受限,因为它不支持 unicodehttps://stackoverflow.com/questions/3198574/does-or-can-vbscripts-sendkeys-support-unicode)但这个限制不会影响你。注意,C# 的 sendkeys 支持 unicode。
废话
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set objArgs = Wscript.Arguments
dim a, b
arg1 = objArgs(0)
arg2 = objArgs(1)
WshShell.SendKeys "blahprogram " + arg1 + "{Enter}" + arg2 + "{Enter}"
因此如果你运行 blah.vbs abc def
它将运行 C:\>blahprogram abc<ENTER>def<ENTER>
你可以将 sendkeys 行
WshShell.SendKeys "blahprogram" + "{Enter}" + "123" + "{Enter}"
那么它将
C:\>blahprogram<ENTER>123<ENTER>
如果你想跑
C:\>echo.| blahprogram<ENTER>123<ENTER>
您可以使用
WshShell.SendKeys "echo.|blahprogram" + "{Enter}" + "123" + "{Enter}"
所以你的整个程序将是
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set objArgs = Wscript.Arguments
WshShell.SendKeys "echo.|blahprogram" + "{Enter}" + "123" + "{Enter}"