- 按键认证大神
- 728264
- 3501
- 18
- 1898 朵
- 27453 个
- 1717 个
- 82980
- 2011-08-04
|
1#
t
T
发表于 2022-11-06 20:18
|
|只看楼主
今天编写了两个函数分别为"ExecuteCmdA"和"ExecuteCmdB",区别如下: A:可设置执行目录、可设置超时退出,不可隐藏命令行窗口,与管道通信读取执行结果。B:可隐藏命令行窗口,不可设置执行目录、不可设置超时退出,将执行结果写入到本地文件后再读取。函数名称: ExecuteCmdA执行CMD并返回结果 参数定义: CommandLine 字符串型:执行的指令CurrentDir 字符串型:设置执行目录,为空则为当前目录TimeOut 整数型:超时时间,单位为毫秒,0为不判断超时,否则命令行若执行超过设定时间则强制退出执行 返回值: 字符串型:返回执行结果,若失败返回错误信息或空。 调用例子: TracePrint ExecuteCmdA("dir", "C:", 10000) '获取C盘目录,设置超时为10000毫秒 函数名称: ExecuteCmdB 执行CMD并返回结果 参数定义: CommandLine 字符串型:执行的指令 IsVisble 整数型:是否显示命令行窗口,为1代表显示,其他数字为隐藏。 返回值: 字符串型:返回执行结果。 调用例子: TracePrint ExecuteCmdB("ping bbs.anjian.com", 0) '测试连接按键论坛,隐藏命令行窗口
源码:
- Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
- TracePrint ExecuteCmdA("dir", "C:", 10000) '获取C盘目录
- TracePrint ExecuteCmdB("ping bbs.anjian.com", 0) '测试连接按键论坛
- Function ExecuteCmdA(CommandLine, CurrentDir, TimeOut)
- Dim WshRunning, WshFinished, WshFailed, Status
- WshRunning = 0
- WshFinished = 1
- WshFailed = 2
- Dim WindowStyle, WaitOnReturn
- WindowStyle = 0
- WaitOnReturn = True
- Dim WSH, WshExec,ReadLine, FirstLine,ReadLines
- Dim PID, RunTime
- Set WSH = CreateObject("WScript.Shell")
- If CurrentDir <> "" Then
- Set WshExec = WSH.Exec("cmd.exe /k cd /d " & CurrentDir)
- FirstLine = 2
- Else
- Set WshExec = WSH.Exec("cmd.exe /k")
- FirstLine = 1
- End If
- PID = WshExec.ProcessID
- WshExec.stdIn.WriteLine CommandLine
- WshExec.stdIn.WriteLine "Exit"
- RunTime = GetTickCount()
- Do
- Status = WshExec.Status
- If Status = 1 Or Status = 2 Then
- Exit Do
- End If
- If Plugin.Sys.GetTime() - RunTime >= TimeOut And TimeOut<>0 Then
- Status = 3
- Exit Do
- End If
- Delay 100
- Loop
- If Status = 1 Then
- ReadLines = ""
- Do
- ReadLine = WshExec.StdOut.ReadLine
- If FirstLine > 0 Then
- FirstLine = FirstLine - 1
- Else
- If InStr(ReadLine, ">Exit") > 0 Then
- Exit Do
- End If
- ReadLines = ReadLines & ReadLine &vbCrLf
- End If
- Loop
- If ReadLines <> "" Then
- ReadLines = Left(ReadLines, Len(ReadLines) - 2)
- End If
- ExecuteCmdA = ReadLines
- ElseIf Status = 2 Then
- ExecuteCmdA = WshExec.StdErr.ReadAll
- ElseIf Status = 3 Then
- WSH.Run "taskkill /pid " & PID & " /F /T", WindowStyle, WaitOnReturn
- ExecuteCmdA = ""
- End If
- Set WshExec = Nothing
- Set WSH = Nothing
- End Function
- Function ExecuteCmdB(CommandLine, IsVisible)
- If IsVisible = 1 Then
- IsVisible = 5
- Else
- IsVisible = 0
- End If
- Dim WaitOnReturn
- WaitOnReturn = True
- Dim WSH
- Set WSH = CreateObject("WScript.Shell")
- WSH.Run "cmd.exe /A /C " & CommandLine&" > C:\temp_text.txt", IsVisible, WaitOnReturn
- ExecuteCmdB = ReadText("C:\temp_text.txt", 0)
- Set WSH = Nothing
- End Function
- Function ReadText(Path, Format)
- //Format:0=ANSI -1=Unicode 2=Default
- Dim IoMode, Create
- IoMode = 1
- Create = False
- Dim fso,f
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set f = fso.OpenTextFile(Path, IoMode, Create, Format)
- If fso.FileExists(Path) <> True Then
- ReadText = ""
- Else
- ReadText = f.ReadAll()
- f.Close
- End If
- Set f = nothing
- Set fso = nothing
- End Function
复制代码
|