【问题标题】:Loop a function?循环一个函数?
【发布时间】:2015-03-05 07:28:58
【问题描述】:

是否可以循环一个函数直到 item = TRUE?

我正在尝试 ping 一个服务器... 一旦建立连接,或 Ping = TRUE,则程序将执行。 如果未建立连接,则 ping 将重复,直到它为 TRUE。

到目前为止,我的代码如下。 如果为 TRUE,MyProgram 将打开。 如果为 False,将再次调用该函数。但这并没有发生……实际上什么也没发生,它只是退出了。

非常感谢任何帮助。 如果有人知道完成此任务的更有效方法,请告诉我。 谢谢!

     Function Ping
        Dim oPing, oRetStatus, bReturn
        Set oPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address='" & "strHost" & "'")

        For Each oRetStatus In oPing
            If IsNull(oRetStatus.StatusCode) Or oRetStatus.StatusCode <> 0 Then
                bReturn = False
            Else
                bReturn = True
            End If
            Set oRetStatus = Nothing
        Next
        Set oPing = Nothing

    Ping = bReturn
    End Function

If Ping Then
    Call MyProgram
Else
    Call PingSub
End If

Sub MyProgram
    Dim objShell
        Set objShell = WScript.CreateObject( "WScript.Shell" )
        objShell.Run("\\Path\To\My\Program.exe")
        Set objShell = Nothing
End Sub

Sub PingSub
    Call Ping
End Sub

【问题讨论】:

    标签: function loops vbscript call


    【解决方案1】:

    试试这样:

    Option Explicit
    Dim MyLoop,strComputer,objPing,objStatus
    MyLoop = True
    While MyLoop = True
        strComputer = "smtp.gmail.com"
        Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}!\\").ExecQuery _
        ("select * from Win32_PingStatus where address = '" & strComputer & "'")
        For Each objStatus in objPing
            If objStatus.Statuscode = 0 Then
                MyLoop = False
                Call MyProgram()
                wscript.quit
            End If
        Next
        Pause(10) 'To sleep for 10 secondes
    Wend
    '**********************************************************************************************
     Sub Pause(NSeconds)
        Wscript.Sleep(NSeconds*1000)
     End Sub
    '**********************************************************************************************
    Sub MyProgram()
    Dim objShell
    Set objShell = CreateObject( "WScript.Shell" )
    objShell.Run("calc.exe")
    Set objShell = Nothing
    End Sub
    '**********************************************************************************************
    

    【讨论】:

    • 不错!很棒的方法 Hackoo!明天我会测试并发布我的结果。谢谢!
    • BRAVO Hackoo!完美运行!我很高兴,我让总统亲自为你的出色工作鼓掌:[media.giphy.com/media/10spcFioEOY7zG/giphy.gif]Lol。再次感谢!
    【解决方案2】:

    这将是一个递归函数。

    https://msdn.microsoft.com/en-us/library/81tad23s.aspx我假设你正在使用 VBA

    这是一个来自 MS 的例子

    【讨论】:

      猜你喜欢
      • 2019-12-23
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 2021-01-18
      相关资源
      最近更新 更多