每天让计算机定时开机执行指定程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
每天让计算机定时开机然后执行指定程序
需求分析:每天上班时一些软件是固定的要打开的,如公司邮件、公司内部QQ。但是由于公司各地上班时间几乎相同。公司一些服务器能力有限导致如公司内部QQ在上班高峰时不能登陆。还有每天都需要运行或是查看的文件。于是我们就想到能不能让我们的电脑避开上班高峰提前开机,然后运行指定的程序呢?答案是肯定的。
1.自动开机
电脑的自启动需要BIOS的支持,所幸现在的BIOS几乎都支持定时自启动。
方法是,开机按Del键,进入BIOS设置程序画面。选择“Power Management Se tup”(电源管理设置),将“RTC Alarm Resume”(预设时间启动)一项设置为“Enabled”,下面出现两个设置项,“Date of month”(系统开机日期)和“Time(hh:mm:ss)”(系统开机时间),通过这两项设置开机的日期和时间,日期可以设置为“Event Day”(每天),设置好后,计算机就会根据你设定的时间自动开机了。
2运行指定程序
运行指定程序比较简单,只要将需要运行的程序文件或是快捷方式放在:
开始->所有程序->启动文件夹里面,就可以实现开机自启动。
另外如QQ、公司内部QQ等登录时是需要输入用户名和密码的,就需要将这些程序设置为保存用户名保存密码自动登录(这些设置在它们的登录界面都有)设置好以上项后。程序就可以开机自动登录了。
当然上述情况只是最简单粗略的完成了我们的要求。以上没有考虑如周末不上班就不用开机、若用户设置了密码,开机执行的程序就需要在用户输入密码登陆后才能执行,这样就达不到我们要的避开上班高峰登录公司内部QQ的要求。为此我们还需要做以下改进:
1. 用户登录密码问题
若需要运行的程序没有图形界面,如一些bat文件等,这时就可以把这些文件放进windows的计划任务中执行。
若是有图形界面和用户交互,此时有点复杂。将它们放到windows的计划任务中是可以执行的,可是等用户登录后会发现这些程序是在运行但是没有和用户交互的操作界面的。此时只能采用曲线救国的策略了。我使用方法流程如下:
a. 在电脑关机时将用户密码去掉。
b.在电脑自启动开机后将用户密码加上,并锁定计算机。
c.人机对话确认今天是否上班,若不上班(即没有回答要上班)则在
预定的时间点上自动关机。
下面我们分别来实现上述a,b,c三步操作:
在电脑关机时将用户密码去掉。
操作方法:开始|运行|输入gpedit.msc进入组策略,点击下图1中的属性
图1.在组策略中设置关机时执行的程序
点击属性后,得到如下对话框:
图2. 关机属性
在此对话框里我们可以编辑对本地计算机(即本计算机)的关机脚本,也可以添加在用户关机时要执行的程序,比如我们添加一个要在用户关机时执行的程
序,结果如下:
图3.添加用户关机时执行的脚本
其中C:\WINDOWS\system32\drivers\etc\关机执行.bat 内容为:
net user administrator ""
关机执行.bat建立方法为:用记事本新建文件,在新建文件中填入:
net user administrator ""
然后文件另存为关机执行.bat (选择保存类型应该为所有文件)
以上命令就是将用户密码设置为空,如果你的默认登录用户名不为administrator,请将上面的administrator改为你的默认登录名。
添加用户脚本后关机的属性如下:
添加完成后,点击确定,在用户关机时就会执行用户所指定的程序。
上面我们就完成了关机时自动去掉登录密码的工作,而在电脑自启动开机后将用户密码加上,并锁定计算机。及人机对话确认今天是否上班,若不上班(即没有回答要上班)则在预定的时间点上自动关机。b 、c 两项工作可以在同一个开机启动程序中完成。我编写的VBS脚本文件实现,代码如下:
rem ================== 程序开始============================ Option Explicit
Dim ws,answer
const pass="y"
set ws=createobject("wscript.shell")
ws.run"net user administrator abc"
ws.run"at 9:15:01 shutdown -s"
ws.run"cmd /c rundll32.exe user32.dll,LockWorkStation"
answer=InputBox("今天工作吗?:Y/N","工作查询")
if answer=pass then
ws.run"cmd /c echo y|at /delete" ,0,true
end if
rem ==================程序结束==============================
将上面程序段在记事本中另存为以.vbs结尾的vbs脚本文件。如开机设置密码.vbs
然后将此程序也放入:开始->所有程序->启动文件夹里面OK,大功告成!
重要程序行解释:
const pass="y" `预设一字符常量y 用于对比后面inputbox输入set ws=createobject("wscript.shell") `设置ws为执行windows shell的对象ws.run"net user administrator abc" `设置管理员密码为: abc
ws.run"at 9:15:01 shutdown -s" `设置在上午9点15分1秒系统自动关机
ws.run"cmd /c rundll32.exe user32.dll,LockWorkStation" `开机执行后自动锁屏
answer=InputBox("今天工作吗?:Y/N","工作查询") `人机交互用于确认是否上班
if answer=pass then `若在人机交互中输入y
ws.run"cmd /c echo y|at /delete" ,0,true `撤销所有的计划任务,包括上面的定时关机
end if
后续:第二天上班时,你将来到登陆屏,登陆后,计划需要提前执行的程序已经执行,然后还有一个需要确认你是否上班的对话框如下:
请在对话框中输入y 以确认今天要上班,否则就会在上午9点15分1秒系统自动关机。
程序还有一些bug,比如echo y|at /delete 会删除所有at 命令所加的计划。希望大家来完善此程序。