检查Windows系统是否空闲并运行后台脚本

时间:2015-08-21 05:56:40

标签: c# vbscript system desktop

这可能是一个奇怪的问题。 但我需要这样做。

实际上,我们正在尝试将UI测试作为持续集成目的的一部分来执行。 问题:当测试代理机器空闲一段时间后,桌面会被锁定并且测试开始失败。 我们无法删除阻止系统被锁定的安全功能。这违反了我们公司的政策。

我们的解决方案 我们将检查系统(Windows 8/2008)是否以3分钟左右的固定间隔空闲,如果它是空闲的,那么我们将触发一个vbs脚本来执行点击num键。 再过3分钟后,我们检查系统是否闲置并做出决定。 整个目标是防止系统被锁定。

您可能想知道这是否也是安全违规。当发生安全问题时,他们会看到是否有任何Windows功能被破坏,而不是我们是否在后台运行脚本以保持系统活动。

所以任何人都知道如何通过批处理文件/ C#来检查以实现上述方案。 任何其他工作建议也欢迎。 帮助赞赏。

谢谢, VVP

1 个答案:

答案 0 :(得分:1)

您可以使用vbscript中的sendkeys来尝试此代码,该模板每隔3分钟模拟一次点击NumLock:

Option Explicit
If AppPrevInstance() Then 
    MsgBox "There is an existing proceeding !" & VbCrLF &_
    CommandLineLike(WScript.ScriptName),VbExclamation,"There is an existing proceeding !"    
    WScript.Quit   
Else  
Dim ws : Set ws = CreateObject("WScript.Shell")
Do
    ws.SendKeys "{NUMLOCK}"
    Pause 3 ' To sleep for 3 minutes
Loop
End If
'********************************************************************************************
Sub Pause(min)
    Wscript.Sleep(1000 * 60 * min)
End Sub
'*********************************************************************************************
Function AppPrevInstance()   
    With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")   
        With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _
            " AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")   
            AppPrevInstance = (.Count > 1)   
        End With   
    End With   
End Function    
'*********************************************************************************************
Function CommandLineLike(ProcessPath)   
    ProcessPath = Replace(ProcessPath, "\", "\\")   
    CommandLineLike = "'%" & ProcessPath & "%'"   
End Function
'*********************************************************************************************