如何使用VBscript防止XP机器的自动锁定功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用VBscript防止XP机器的自动锁定功能相关的知识,希望对你有一定的参考价值。
机器在自动化脚本运行时被锁定,这是因为不同脚本之间存在很长的间隔(由于某些原因,这是必需的)。我想避免这种自动锁定功能。问题是,根据安全策略,我们无法从控制面板禁用此功能。有没有其他方法可以保持系统解锁?
我认为你可以通过定期发送按键来停止锁定,所以我建议你看看WScript.SendKeys。然后把它放在一个睡眠循环中,让它定期发送。
请注意您发送的密钥,这样您就不会影响其他任何密钥。
我这样做了......它快速发送2个SCROLLLOCK键,所以它不会干扰(好吧,不管怎么说都不严重)任何应用程序。它每隔60秒就会这样做....干杯!
set wsc = CreateObject("WScript.Shell")
Do
WScript.Sleep (60*1000)
wsc.SendKeys ("{SCROLLLOCK 2}")
Loop
我用了一对文件......
第一个文件(Keep_Awake__start.vbs)保持唤醒/解锁状态。当您想要返回正常过程时,第二个文件(Keep_Awake__end.vbs)可以方便地终止该过程。
第一个文件......
' Keep_Awake__start.vbs
' Graham Edwards
' Typical stored in Start Menu
'
' Use Keep_Awake__start.vbs to keep the computer from inactivity-based lockouts.
' Use Keep_Awake__end.vbs to remove Keep_Awake__start.vbs
' Largely pulled from st0le response
' Http://stackoverflow.com/questions/4457907/how-to-prevent-auto-locking-feature-of-an-xp-machine-using-vbscript
' --- Define Object
set wsc = CreateObject("WScript.Shell")
' --- Loop every so many minutes and change the scroll lock setting
Do
' Wait for ~2 minutes
WScript.Sleep (2*60*1000)
wsc.SendKeys ("{SCROLLLOCK 2}")
Loop
第二个档案......
' Keep_Awake__end.vbs
' Graham Edwards
' Use Keep_Awake__start.vbs to keep the computer from inactivity-based lockouts.
' Use Keep_Awake__end.vbs to remove Keep_Awake__start.vbs
' Largely pulled from Ansgar Wiechers response
' http://stackoverflow.com/questions/22324899/kill-a-vbscript-from-another-vbscript
' --- Define Object
Set wmi = GetObject("winmgmts://./root/cimv2")
' --- Search and Destroy
qry = "SELECT * FROM Win32_Process WHERE Name='wscript.exe' AND NOT " & _
"CommandLine LIKE '%" & Replace(WScript.ScriptFullName, "", "\") & "%'"
For Each p In wmi.ExecQuery(qry)
p.Terminate
Next
' --- Clean up
Set wmi = Nothing ' Release the Application object
这些文件既可以从常规文本编辑器创建,也可以存储在任何地方(如桌面)。使用.vbs文件扩展名保存文件后,该文件是可执行文件。因此,您只需双击文件图标即可开始或结束(取决于您双击哪个文件)。
您可以将Keep_Awake__start.vbs存储在Windows Startup文件夹中,以便在您登录后立即启动。
最简单的解决方案是打开mp3或视频文件并在Windows媒体播放器中连续播放(使用重复功能并将播放器中的音量静音)。通过这种方式,屏幕保护程序永远不会到来或系统永远不会锁定。
如果这是在运行自动化套件时,则使用自动化套件每隔一段时间做一次鼠标抽搐。我发现效果很好的是如果你有自己的自定义睡眠功能,并且作为睡眠功能的一部分,你会抽搐鼠标。用于脚本之间的长时间间隔。
使用以下VB脚本代码保持机器解锁:
Set objShell = CreateObject("WScript.Shell")
objShell.RegWrite "HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsControl PanelDesktopScreenSaverIsSecure", "0" , "REG_SZ"
Wscript.Echo "Your machine remains unlocked"
干杯!!
我已经尝试了shell脚本并使用任务计划程序安排鼠标移动的模拟 - 但是我发现这是最好的。 +1简洁。它会自动将鼠标移动到移动的像素,因此屏幕不会自动锁定(尽管您可以根据需要配置此选项)
参考:Auto Mouse Mover - http://www.murgee.com/auto-mouse-mover/
Set wshShell =wscript.CreateObject("WScript.Shell")
do
wscript.sleep 55000
wshshell.sendkeys "{SCROLLLOCK}"
loop
我们可以使用此代码来防止窗口再次解锁。
我这样做了
(外部循环=声明变量)
'For 64 bit Excel.
Private Declare PtrSafe Function SetCursorPos Lib "user32" _
(ByVal x As Long, _
ByVal y As Long) As Long
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
'For 32 bit Excel.
Private Declare Function SetCursorPos Lib "user32" _
(ByVal x As Long, _
ByVal y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
' default variable
private mousecounter as integer
(内部程序)
Dim llCoord As POINTAPI
Dim activeXMousePos As Integer
Dim activeYMousePos As Integer
GetCursorPos llCoord
activeXMousePos = llCoord.Xcoord
activeYMousePos = llCoord.Ycoord
(内循环):
If mousecounter <= 2 Then
SetCursorPos activeXMousePos - 1, activeYMousePos - 1
mousecounter = mousecounter + 1
End If
If mousecounter > 2 Then
SetCursorPos activeXMousePos + 2, activeYMousePos + 2
mousecounter = 0
End If
所以 - 基本上这个代码移动鼠标1 px leftup和1 px rightdown lor每个循环间隔。您可以声明任何其他值,但我发现此鼠标移动不会打扰用户。
以上是关于如何使用VBscript防止XP机器的自动锁定功能的主要内容,如果未能解决你的问题,请参考以下文章
如何使用内部 Windows XP 选项在 VBScript 中解压缩文件
如何去除 windows server 2012 r2 自动锁定