VBA命令行对象请求登录,等待用户输入

我编写了一个脚本,通过命令行提示从程序中获取一些信息.

只要您登录到我正在尝试从中提取信息的程序,获取信息就可以正常工作.

这是我连接到该程序的方式:

Set Appl = CreateObject("WScript.Shell").Exec("cmd.exe im connect")

返回(如果您还没有登录):
(请注意:如果我在命令窗口中手动输入命令,这是理论输出)

Connecting to <some server or another>...
Authentication failed for <user: me> on <some server or another>
Enter password for <user: me> on <some server or another> (*****):

这就是我的宏被卡住的地方.

我已经尝试检查返回字符串“输入密码”,但由于调用shell的文件系统对象卡在等待用户输入,我无法真正做任何事情.

所以这一切都行不通:

Set ApplOutput = Appl.StdOut
While Not ApplOutput.AtEndOfStream
    sLine = ApplOutput.ReadLine
    If Left(sLine, 14) = "Enter password" Then
        MsgBox ("ERROR!!" & vbCrLf & "Please login to the Integrity Client") 
    End If
Wend

有没有办法检查命令窗口是否在等待用户输入(如上例所示),如果是这样,请将命令窗口置于前面并要求用户输入密码?
如果可能的话,宏应该在之后顺利运行.

感谢提前任何形式的输入!

编辑:由于我试图运行的命令不常见,请考虑通过宏运行“runas”命令的问题. runas将类似地提示输入密码,例如:

runas /noprofile /user:Administrator cmd

EDIT2:
每次提供凭据的问题如下:
成功输入密码后,请求密码的程序会保存密码以登录服务器.这意味着下次您必须输入它(在最好的情况下)是三个月后标准密码轮换要求您为您的用户帐户设置新密码.因此,每次输入密码真的很烦人,因为每三个月它都不起作用.

最佳答案 如果“shell卡住等待用户输入”,则可能没有简单的解决方案…… VBA不是多线程的,因此如果shell .Exec正在等待用户输入,则不会引发任何错误,并且执行正在进行中.不幸的是,这意味着您不能“破解”该线程并使用FindWindow或其他API调用来操作CMD窗口.

一种方法是将AppWinStyle arguments中的一个传递给Exec语句(另请参见:this vb.net answer),以便最大化CMD窗口,以便无论凭证检查如何,它都将立即对用户可见.这样,如果登录失败,他们将看到它并有机会回复它.

点赞