我试图创建一个程序,打开"命令提示符"并使用" sendKeys"打开一个特定的端口。这是我的代码:
Set Keys = CreateObject("WScript.Shell")
oShell.ShellExecute "cmd.exe","runas", 1
Sleep(0.01)
Keys.sendKeys "{ENTER}"
Sleep(0.01)
Keys.sendKeys "rem Open TCP Port 407 inbound and outbound"
Keys.sendKeys "{ENTER}"
Keys.sendKeys "netsh advfirewall firewall add rule name=""EXAMPLE"" dir=out action=allow protocol=TCP localport=407"
Keys.sendKeys "{ENTER}"
Keys.sendKeys "netsh advfirewall firewall add rule name=""EXAMPLE"" protocol=TCP dir=out localport=407 action=""allow"""
Keys.sendKeys "{ENTER}"
我认为按键不够快。
我不想使用Keys.run "cmd [code]"
,因为防病毒软件可能会认为该程序是病毒。
答案 0 :(得分:0)
还有另一种方法可以做到这一点。不是防病毒软件专家......您可以查看是否适合您。
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.exec("%comspec%")
oExec.StdIn.Write "dir" & vbCrLf
答案 1 :(得分:0)
对于任何想要消除延迟的人: 而不是做
Set Keys = CreateObject("WScript.Shell")
Keys.sendKeys "a"
Keys.sendKeys "{ENTER}"
Keys.sendKeys "b"
Keys.sendKeys "{ENTER}"
Keys.sendKeys "c"
Keys.sendKeys "{ENTER}
DO
Set Keys = CreateObject("WScript.Shell")
Keys.sendKey "a{ENTER}b{ENTER}c{ENTER}"
它很乱,但速度更快。
答案 2 :(得分:0)
您可以使用WShell直接执行命令并从StdOut或StdErr获取输出,而不是使用SendKeys(您通常会对没有命令行支持的程序使用最后的手段)。增加的优点是您可以检查返回状态和输出,以查看命令是成功还是失败。
See my answer here作为示例,但为方便起见,我会将其包含在此处:
Option Explicit
Const WshRunning = 0
Const WshFinished = 1
Const WshFailed = 2
Dim shell : Set shell = CreateObject("WScript.Shell")
Dim exec : Set exec = shell.Exec("ping.exe 127.0.0.1 -n 1 -w 500")
While exec.Status = WshRunning
WScript.Sleep 50
Wend
Dim output
If exec.Status = WshFailed Then
output = exec.StdErr.ReadAll
Else
output = exec.StdOut.ReadAll
End If
WScript.Echo output
或者,您可以将命令编写到预先制作的批处理文件中并执行该命令,而不是连续执行多个WScript shell。