本文中的代码不一定能适应所有种类的Windows系统

请自行测试后再做出结论,你可以在评论区留言



开端

不知道你曾经是否有遇到和我类似的情况:

想要暂时禁止显示屏熄屏或休眠,但又不想去修改系统配置或是下载相关软件

毕竟只是暂时修改配置,不需要了还需要再改回来
下载其他软件又感觉没有必要,毕竟谁清楚某些软件是否真的干净呢


那么,难道就没有简单的脚本能够解决这个问题吗?

当然是有的,请看以下脚本!

' & color 70 & title AntiSleep & mode con cols=30 lines=6 & cls & cscript.exe /nologo /e:vbscript "%~f0" & exit
Dim LoopNum
Dim TimeNow
LoopNum = 1
set wsc = CreateObject("WScript.Shell")
Do
TimeNow = Time
WScript.Echo " Send successfully_Loop:" & LoopNum
WScript.Echo " " & TimeNow
WScript.Sleep (60*1000)
wsc.SendKeys ("{SCROLLLOCK 2}")
LoopNum = LoopNum + 1
Loop

保存为.bat或.cmd文件

如果你想了解更多,请看:


代码详解

首先是第一行:
' & color 70 & title AntiSleep & mode con cols=30 lines=6 & cls & cscript.exe /nologo /e:vbscript "%~f0" & exit

其中’(单引号),在VBS中的作用是注释,这意味着在作为VBS脚本处理时,整个第一行都将作为注释直接跳过
在批处理中作为命令直接执行单引号没有作用,但批处理并不会因为单引号无法执行就退出,而是会处理’后面使用&符号连接的命令

&在批处理中作为命令连接符,用于顺序执行多个命令,不管前一个命令是否成功执行
这意味着在作为批处理处理中,这条代码的单引号后面的命令都会继续执行

color 70 是将命令行(cmd)窗口的颜色设置为白底黑字
cmd-color
title AntiSleep 是将命令行窗口的标题改为”Antisleep
mode con cols=30 lines=6 是将命令行窗口大小设置为 30 列6 行
cls 用于清空命令行窗口中输出的内容
cscript.exe /nologo /e:vbscript "%~f0" 其中:

cscript.exe 是 Windows 中用于运行 VBScript 脚本的命令行工具

/nologo /e:vbscript 是设置在执行时禁用显示CScript 的标志性标识与指定要执行的脚本类型

"%~f0" 表示当前批处理文件的完整路径名

这意味着告诉cscript使用VBS类型执行自己

exit 代表退出当前执行批处理的CMD.EXE

第一行的作用就是在运行时设置命令行窗口的各项属性
并将自己以VBS类型执行,最后,当执行的VBS(csript.exe)退出后也自行退出

接下来是第二到三行:
Dim LoopNum
Dim TimeNow

从第二行开始的所有命令都将以VBS脚本而不是批处理脚本运行
Dim 在VBS中用于声明变量
其实说白了,这两条代码就是创建了两个变量”LoopNum“与”TimeNow

第四行:
LoopNum = 1

为提前定义好的变量”LoopNum“赋值,值为 1

第五行:
set wsc = CreateObject("WScript.Shell")

其中:

CreateObject("WScript.Shell") 用于创建一个 WshShell 对象

WshShellVBS中的一个内置对象,它提供了许多有用的功能,例如运行程序、操作注册表、创建快捷方式

set wsc = 则是代表设置之后使用wsc(字符串)来代表WshShell

第六行与第十三行:
Do
Loop

Do…Loop 是一种循环结构,用于重复执行一组语句,直到满足特定条件,其中:

Do While…Loop:在条件变为 False 之前重复执行语句

Do Until…Loop:在条件变为 True 之前重复执行语句
而在这里,我们只使用了DoLoop,并没有设置条件,这意味着其中的代码将一直循环

第七行:
TimeNow = Time

为提前定义好的变量”TimeNow“赋值,值为 Time函数
Time 函数用于获取当前系统时间

第八到九行:
WScript.Echo " Send successfully_Loop:" & LoopNum
WScript.Echo " " & TimeNow

类似批处理的echoWScript.Echo输出指定内容
这两条代码输出LoopNum与当前时间(变量TimeNow)

第十行:
WScript.Sleep (60*1000)

让脚本暂停 60*1000 毫秒,也就是一分钟

第十一行:
wsc.SendKeys ("{SCROLLLOCK 2}")

使用SendKeys发送两次滚动锁定键
(Scroll Lock,在HOME上面,笔记本电脑可能没有,但也能发送)

第十二行:
LoopNum = LoopNum + 1

使变量LoopNum的值加 1