【源码】执行CMD并返回结果(两种方法) 您所在的位置:网站首页 按键精灵无法运行脚本 【源码】执行CMD并返回结果(两种方法)

【源码】执行CMD并返回结果(两种方法)

2024-06-18 13:38| 来源: 网络整理| 查看: 265

今天编写了两个函数分别为"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 TimeOut0 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 复制代码



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有