我正在向SendKeys
使用VBScript到Cisco客户端,因为它提示输入用户名和密码。但是,我在解决命令提示时遇到问题。
我在每个AppActivate
命令之前添加了SendKeys
,但正常的计算机使用通常会在这些命令之间的时间内突破焦点。
如何在发送密钥之前确保命令提示符具有焦点?
Dim host, username, password, pathToClient
host = "host"
username = "username"
password = "password"
pathToClient = "C:\Program Files {(}x86{)}\Cisco\Cisco AnyConnect Secure Mobility Client\vpncli.exe"
Set ws = WScript.CreateObject("WScript.Shell")
ws.run("TASKKILL.exe /F /IM vpnui.exe"), 0, false
ws.run("cmd.exe"), 2, false
WScript.Sleep 300
ws.AppActivate("Command Prompt")
ws.SendKeys """" & pathToClient & """ connect " & host & "~"
WScript.Sleep 1000
ws.AppActivate("Command Prompt")
ws.SendKeys(username & "~")
WScript.Sleep 50
ws.AppActivate("Command Prompt")
ws.SendKeys(password & "~")
ws.run("TASKKILL.exe /F /IM cmd.exe"), 0, false
答案 0 :(得分:1)
使用VBScript,你无法做到。 AppActivate
是VBScript中唯一可用于将焦点放在特定应用程序上的方法,并且它不会确保焦点保持在那里。这就是为什么SendKeys
不应该用于自动化的确切原因。尝试使用类似AutoIt的内容。
或者可以设置Auto Connect on Start作为选项,因为您显然使用AnyConnect?
Start-AnyConnect上的自动连接,在启动时,会自动与AnyConnect配置文件指定的安全网关建立VPN连接,或者与客户端连接的最后一个网关建立VPN连接。
答案 1 :(得分:0)
我使用AutoHotKey来解决我的问题。这是我的代码:
host := "my.host.domain"
username := "myUsername"
password := "myPassword"
pathToClient = "C:\...\vpncli.exe"
DetectHiddenWindows, on
Process, Close, vpnui.exe
run, cmd.exe,, Hide
Sleep 100
ControlSend,, %pathToClient% connect %host%{Enter}, ahk_exe cmd.exe
Sleep 1000
ControlSend,, %username%{Enter}, ahk_exe cmd.exe
Sleep 50
ControlSend,, %password%{Enter}, ahk_exe cmd.exe
;Process, Close, cmd.exe