我編寫了一個腳本,通過命令行提示從程序中獲取一些信息。 只要您登錄到程序中,就可以獲取信息,我試圖從中提取信息。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 /noprofile /user:Administrator cmd
EDIT2: 與提供的憑據每次都是以下問題: 程序請求口令保存後您登錄到服務器的密碼已經成功輸入了一次。這意味着下次必須輸入密碼時(最好的情況下)是三個月後,當標準密碼輪換要求您爲用戶帳戶設置新密碼時。因此,每次都必須輸入密碼真的很煩人,因爲每三個月它就不能工作。
有趣的問題,值得StackOverflowers關注。可悲的是,我沒有一個模仿行爲的命令行程序。 –
如果「外殼卡住等待用戶輸入」,那麼可能不會有簡單的解決方案.... VBA不是多線程的,所以如果外殼「.Exec」正在等待用戶輸入,則沒有錯誤發生,執行正在進行中。您不能「破解」該線程並使用「FindWindow」或其他API調用來操縱CMD窗口等。 –
是否可以簡單地向「Shell.Execute」提供憑據(即假設用戶必須*總是*輸入憑據)以避免這種情況/問題?我想,這就是我將如何處理它。 –