1

我正在玩 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
4

3 回答 3

5

我已按以下方式修改了您的代码:

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”关键字声明。当我通过命令行执行上面的代码时,它可以正常工作。

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

于 2013-08-08T08:10:51.273 回答
4

正如所记录的, 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只要您将单个参数传递给函数,语句中的括号就不会引起问题,但我仍然会删除它们。

于 2013-08-08T08:19:53.967 回答
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
于 2014-05-30T21:19:39.353 回答