关闭 Windows 7 时,如何让应用程序自动启动并短暂运行然后关闭?
我希望应用程序在屏幕上短暂显示,或在扬声器上简短地说出我的自我提醒“拔掉 USB 记忆棒,离开房间前关闭加热器”。之后,Win 7 关闭。
答案1
使用 Windows 计划任务来执行此操作。添加“在用户注销时”的触发器(可能叫法不同,我现在不在英文版 Windows 上)。
如果您想播放声音,您必须先录制它,然后使用录制的声音文件作为命令行参数运行您最喜欢的音乐播放器。大多数播放器在其网站的某个地方都有他们的命令行参数,或者只需谷歌一下。
如果您想显示一条消息,您应该使用 Windows *.bat 文件。
答案2
Karan 是对的:无法保证任务能够全部执行。我在自己的机器上测试了组策略方法,但是由于有 SSD、不错的 CPU 和 12GB 内存,我尝试执行的小型音频播放器甚至没有机会启动!
复杂的解决方案(如果存在的话)意味着挂接到关机过程并以某种方式暂时中止它,以便让您的音频文件有时间加载,然后再继续该过程。
一种不太过分(恰当地说是恰当地杀戮?)的解决方案是编写一个批处理或脚本文件来启动您的音频文件,可能设置一个计时器以对应于音频文件的长度(加上一点用于音频播放器程序加载到内存中),或者以其他方式确定音频过程已完成,然后触发关闭过程。然后您将执行该批处理或脚本文件反而通过通常的方式(例如通过“开始”菜单)执行关机。
幸运的是,我花时间编写了这样一个脚本。将其保存在文本编辑器中,并为其添加“.vbs”扩展名。为其分配一个快捷方式,并将其放在“开始”菜单或桌面上,并使用适当的图标进行设置。(注意:当我命名变量和函数时,我的心情有点古怪,但它确实有效。)
Option Explicit
Dim dudeWeNeedAWindow, beMyWordsYo, whatTheCrapDoWeCallIt, thereOnceWasADefaultNamedOne, imAChooseStuffIsThatAlright, imJustGoingToTellYouRightNowThatWasALowBall, dontMockMeIWasFeatherDustedAsAChild, thisIsWhereThePartyHappensSucka, thisCrapNeedsToShutItselfDown, bringItHonkyIllJustStartAllOverAgain, imSorryButYouNeedToSettleDownAndHibernateRightNow
beMyWordsYo = "How would you like to proceed?" & vbcr & vbcr & _
"1) Shutdown" & vbcr & _
"2) Restart" & vbcr & _
"3) Hibernate"
dontMockMeIWasFeatherDustedAsAChild = "Nonsense! What are you trying to pull?"
thisIsWhereThePartyHappensSucka = """C:\Program Files\MPC-HC\mpc-hc64.exe"" %USERPROFILE%\Music\Vermillion.mp3"
whatTheCrapDoWeCallIt = "Shutdown"
thereOnceWasADefaultNamedOne = "1"
thisCrapNeedsToShutItselfDown = """shutdown.exe"" /s /t 00"
bringItHonkyIllJustStartAllOverAgain = """shutdown.exe"" /r /t 00"
imSorryButYouNeedToSettleDownAndHibernateRightNow = """shutdown.exe"" /h"
Sub ShutdownThisGoober
imAChooseStuffIsThatAlright = InputBox(beMyWordsYo,whatTheCrapDoWeCallIt,thereOnceWasADefaultNamedOne)
Set dudeWeNeedAWindow = WScript.CreateObject("WScript.Shell")
If imAChooseStuffIsThatAlright = "1" Then
dudeWeNeedAWindow.Run(thisIsWhereThePartyHappensSucka)
dudeWeNeedAWindow.Run(thisCrapNeedsToShutItselfDown)
WScript.Quit
ElseIf imAChooseStuffIsThatAlright = "2" Then
dudeWeNeedAWindow.Run(thisIsWhereThePartyHappensSucka)
dudeWeNeedAWindow.Run(bringItHonkyIllJustStartAllOverAgain)
WScript.Quit
ElseIf imAChooseStuffIsThatAlright = "3" Then
dudeWeNeedAWindow.Run(thisIsWhereThePartyHappensSucka)
dudeWeNeedAWindow.Run(imSorryButYouNeedToSettleDownAndHibernateRightNow)
WScript.Quit
ElseIf imAChooseStuffIsThatAlright = "0" Or imAChooseStuffIsThatAlright = "" Then
WScript.Quit
Else
imJustGoingToTellYouRightNowThatWasALowBall = MsgBox(dontMockMeIWasFeatherDustedAsAChild,16)
Set dudeWeNeedAWindow = Nothing
ShutdownThisGoober
End If
Set dudeWeNeedAWindow = Nothing
End Sub
ShutdownThisGoober