使用VBscript检查计算机是否已锁定

时间:2014-08-30 08:01:22

标签: vbscript

如何使用VBscript检查计算机是否已被锁定?我想在计算机锁定后停止运行应用程序,并在解锁时再次运行

2 个答案:

答案 0 :(得分:1)

您可以尝试检查是否存在logonui.exe进程。如果找到,计算机将被锁定或未登录。

Function IsLocked(strComputer)

    With GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
        IsLocked = .ExecQuery("select * from Win32_Process where Name='logonui.exe'").Count > 0
    End With

End Function

要测试本地计算机,请传递PC名称或句点。例如:

If IsLocked(".") Then MsgBox "Local computer is locked."

答案 1 :(得分:0)

登录多个用户的工作解决方案!
不适用于远程用户......解决方案WIP

dim islocked

do
    call checklock
loop while  islocked = 0


'=================================
'Functions
'=================================

function checklock
    Dim computer : computer = "."

    If WScript.Arguments.Count = 1 Then
        computer = WScript.Arguments(0)
    End If

    If locked(computer) Then
        msgbox "debugging: locked"  
    Else
        msgbox "debugging: not locked"
        wscript.sleep 3000 'for debugging - allow time to enter lock screen
    End If      
end function


Function locked(computer)
    Dim wmi : Set wmi = GetObject("winmgmts://" & computer & "/root/cimv2")
    Dim lockapp_count : lockapp_count = wmi.ExecQuery ("SELECT * FROM Win32_Process WHERE Name = 'lockapp.exe'").Count
    Dim explorer_count : explorer_count = wmi.ExecQuery ("SELECT * FROM Win32_Process WHERE Name = 'explorer.exe'").Count
    locked = (lockapp_count >= explorer_count)
End Function

其他细节背景:
解决方案问题(在多个用户的机器上) 我正在使用它一段时间,直到我将另一个用户添加到机器上。现在,当OTHER用户锁定了他们的屏幕时,即使我的屏幕处于活动状态,未锁定,VBS也表示它被锁定,b / c logonUI.exe正在运行 - 因此它会引发误报。它也很棘手b / c该过程由系统而不是用户运行,因此您无法进行交叉检查。但我确实想知道,如果你可以计算lockapp.exe进程的数量并与logonui.exe进程的数量进行比较。但是 - 我不知道他们是否一对一。

WIP解决方案 - 发现这可行 - yay - 解决方案和代码移到我的评论的顶部。 计算活动用户数并将计数与logonui.exe进程数进行比较。为此,我尝试计算找到explorer.exe的次数,然后与logonui.exe个实例的数量进行比较。

解决方案1失败:
比较logonui.exelockapp.exe计数的计数 原因 - 这些必须结合在一起,我假设你只能获得1个logonui进程但是有多个lockapp进程;错误的假设。