【问题标题】:VBSript Shutdown Message ConfusionVBScript 关闭消息混淆
【发布时间】:2015-11-22 13:53:21
【问题描述】:

我目前正在学习如何在 Visual Basic 中编写命令,并决定制作一个简单的关机消息。该代码运行良好:当用户单击“是”时它会关闭,而“否”、“取消”和“X”按钮会关闭消息。 但是,我决定尝试制作一个恶作剧消息,计算机将关闭任何选择的选项。我运行了脚本,但是当我单击“X”图标时(我没想到要关闭 my 计算机!),我的计算机还是关闭了 :( 有没有办法阻止这种情况的发生,或者更好的是,有没有办法让“X”图标变灰,这样用户就无法关闭消息? 代码如下:

Option Explicit
Dim result
result = MsgBox ("Do you want to shutdown?", 3+48,"Warning")
Dim objShell
Select Case result
    Case vbYes
        MsgBox("shuting down ...")
        Set objShell = WScript.CreateObject("WScript.Shell")
        objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 20"
    Case vbNo
        MsgBox("shuting down ...")
        Set objShell = WScript.CreateObject("WScript.Shell")
        objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 20"
    Case vbCancel
        MsgBox("shuting down ...")
        Set objShell = WScript.CreateObject("WScript.Shell")
        objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 20"
End Select

提前干杯! :D

【问题讨论】:

    标签: windows vba vbscript


    【解决方案1】:

    -r : 重启

    -s : 用于关机

    此 Vbscript 可以在您的桌面上创建一个快捷方式,询问您是否要关闭计算机。

    Option Explicit
    Dim MyScriptPath 
    MyScriptPath = WScript.ScriptFullName
    Call Shortcut(MyScriptPath,"Shutdown the computer")
    Call AskQuestion()
    '**********************************************************************************************
    Sub Shortcut(PathApplication,Name)
        Dim objShell,DesktopPath,objShortCut,MyTab
        Set objShell = CreateObject("WScript.Shell")
        MyTab = Split(PathApplication,"\")
        If Name = "" Then
            Name = MyTab(UBound(MyTab))
        End if
        DesktopPath = objShell.SpecialFolders("Desktop")
        Set objShortCut = objShell.CreateShortcut(DesktopPath & "\" & Name & ".lnk")
        objShortCut.TargetPath = Dblquote(PathApplication)
        ObjShortCut.IconLocation = "%SystemRoot%\system32\SHELL32.dll,-28"
        objShortCut.Save
    End Sub
    '**********************************************************************************************
    Sub AskQuestion()
        Dim Question,Msg,Title
        Title = "Shutdown the computer"
        Msg = "Are you sure to shutdown the computer now ?"& Vbcr &_
        "If yes, then click [YES] button "& Vbcr &_
        "If not, then click [NO] button"
        Question = MsgBox (Msg,VbYesNo+VbQuestion,Title)
        If Question = VbYes then
            Call Run_Shutdown(30)
        else
            WScript.Quit()
        End if
    End Sub
    '**********************************************************************************************
    Function DblQuote(Str)
        DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '**********************************************************************************************
    Sub Run_Shutdown(N)
        Dim ws,Command,Execution
        Set ws = CreateObject("wscript.Shell")
        Command = "Cmd /c Shutdown -s -t "& N &" -c "& DblQuote("Save your work because your PC will shut down in "& N &" seconds")
        Execution = ws.run(Command,0,True)
    End sub
    '**********************************************************************************************
    

    【讨论】:

    • 感谢您的所有回复!现在问题解决了:)
    【解决方案2】:

    好的,是否有理由尝试删除/禁用 X?我问是因为虽然可以做到,但会有点困难。

    1. 并非 msgbox 上的所有按钮组合都启用 X。尝试 vbAbortRetryIgnore 并尝试 vbYesNo。
    2. 如果提供了取消按钮(除 vbOkOnly 之外的所有其他组合),则启用 X
    3. 如果只显示一个按钮,则启用 X

    一旦您意识到这些事情,这确实使禁用按钮几乎毫无意义。以下是显示上述场景时用户点击 X 与点击按钮时会发生的情况

    1. 不适用。 X 按钮未启用
    2. MsgBox 返回 vbCancel
    3. MsgBox 返回唯一按钮的值 顺便说一句,它不仅仅是点击 X。当 X 被启用时,ESC 将触发相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 2013-09-24
      • 2010-09-05
      • 2010-11-08
      • 1970-01-01
      • 2013-02-19
      • 2012-08-22
      相关资源
      最近更新 更多