首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让sendKeys更快

让sendKeys更快
EN

Stack Overflow用户
提问于 2017-07-23 13:37:16
回答 3查看 982关注 0票数 1

我正在尝试创建一个程序,它将打开“命令提示符”,并使用"sendKeys“打开一个特定的端口。下面是我的代码:

代码语言:javascript
复制
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]",因为杀毒软件可能会认为该程序是病毒。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-24 23:10:35

您可以使用WShell直接执行命令并从StdOut或StdErr获得输出,而不是使用SendKeys (对于没有命令行支持的程序,通常是最后的手段)。附加的好处是您可以检查返回状态和输出,以查看您的命令是成功还是失败。

See my answer here作为示例,但为了方便起见,我将其包含在这里:

代码语言:javascript
复制
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 shells。

票数 0
EN

Stack Overflow用户

发布于 2017-07-23 17:57:57

有另一种方法可以做到这一点。不是杀毒软件的专家...您可以检查一下这个是否适合您。

代码语言:javascript
复制
Set oShell = CreateObject("WScript.Shell")

Set oExec = oShell.exec("%comspec%")

oExec.StdIn.Write "dir" & vbCrLf
票数 0
EN

Stack Overflow用户

发布于 2017-07-24 14:11:18

对于任何想要消除延迟的人:而不是做

代码语言:javascript
复制
Set Keys = CreateObject("WScript.Shell")
    Keys.sendKeys "a"
    Keys.sendKeys "{ENTER}"
    Keys.sendKeys "b"
    Keys.sendKeys "{ENTER}"
    Keys.sendKeys "c"
    Keys.sendKeys "{ENTER}

代码语言:javascript
复制
Set Keys = CreateObject("WScript.Shell")
Keys.sendKey "a{ENTER}b{ENTER}c{ENTER}"

这是混乱的,但它的速度更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45261870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档