是/否关闭

问题描述 投票:1回答:3

我正在玩VBScript,我想制作一个MsgBox,询问用户是否要关闭他们的计算机。

如果用户单击Yes,他们应该首先看到一个MsgBox然后他们的计算机开始关闭。

我正在使用此代码,但它不起作用。

问题是什么?

result = MsgBox ("Shutdown?", vbYesNo, "Yes/No Exm")
Select Case result
    Case vbYes
        MsgBox("shuting down ...")
        Option Explicit
        Dim objShell
        Set objShell = WScript.CreateObject("WScript.Shell")
        objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 0"
    Case vbNo
        MsgBox("Ok")
End Select
vbscript
3个回答
3
投票

因为documented Option Explicit必须出现在脚本中的任何其他语句之前。在脚本中的任何其他位置使用它应该引发指向Option Explicit语句行的“预期语句”错误。如果您没有收到该错误,则代码中有一个未显示的On Error Resume Next

如果将Option Explicit语句移动到脚本的开头,但仍未发生关闭,则需要检查shutdown命令的返回值:

rc = objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 0", 0, True
If rc <> 0 Then MsgBox "shutdown failed with exit code " & rc & "."

MsgBox语句中的括号不应该只引起问题,只要你只传递一个参数到函数,但我仍然会删除它们。


4
投票

我修改了你的代码如下:

Option Explicit

Dim result
result = MsgBox ("Shutdown?", vbYesNo, "Yes/No Exm")
Select Case result
    Case vbYes
        MsgBox("shuting down ...")
        Dim objShell
        Set objShell = WScript.CreateObject("WScript.Shell")
        objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 20"
    Case vbNo
        MsgBox("Ok")
End Select

主要问题是“选项显式”必须位于顶部,因此必须使用“dim”关键字声明“result”变量。我通过命令行执行上面的代码工作正常。

我还添加了20的超时,但您可以轻松地将其更改回原始值0。


2
投票

试试这个:

Set Shell = CreateObject("WScript.Shell")

     Answer = MsgBox("Do You Want To" & vbNewLine & "Shut Down Your Computer?",vbYesNo,"Shutdown:")
     If Answer = vbYes Then
          Shell.run "shutdown.exe -s -t 60"
          Ending = 1
     ElseIf Answer = vbNo Then
          Stopping = MsgBox("Do You Wish To Quit?",vbYesNo,"Quit:")
          If Stopping = vbYes Then
               WScript.Quit 0
          End If
     End If
© www.soinside.com 2019 - 2024. All rights reserved.