如何使用VBscript检查计算机是否已被锁定?我想在计算机锁定后停止运行应用程序,并在解锁时再次运行
答案 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.exe
到lockapp.exe
计数的计数
原因 - 这些必须结合在一起,我假设你只能获得1个logonui进程但是有多个lockapp进程;错误的假设。