让sendKeys更快

时间:2017-07-23 05:37:16

标签: vbscript sendkeys wsh

我试图创建一个程序,打开"命令提示符"并使用" 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]",因为防病毒软件可能会认为该程序是病毒。

3 个答案:

答案 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。