如何检查工作站是否已锁定?

时间:2009-01-12 08:48:56

标签: vbscript

任何人都可以帮助使用代码段检查工作站是否已锁定?我试着获取document.title,这样当工作站被锁定时,它会返回document.title的空白。这不起作用。

我在vbscript中编码wscript,它驻留在HTML中。

任何有关Javascript的帮助也很好。

4 个答案:

答案 0 :(得分:2)

通常,您应该使用wmi查询来查看事件日志的安全日志。 但是,XP没有锁定事件ID(vista / win7 / 2008确实同时具有锁定和解锁事件ID)。

XP DOES有一个解锁事件,但事件。大多数人都没有意识到解锁事件会在登录/注销事件中发生事件(事件ID 528/538,几乎在同一时间发生)。登录类型将是EventType 7,这就是你告诉别人解锁工作站的方式。登录类型7(无论是登录还是注销)都是解锁事件。

对于Vista / Win7 / 2008,新的工作站锁定事件ID为4800,确定解锁事件的更新方式是事件ID 4801.但是,Vista后操作系统中的源日志不是安全日志,而是Microsoft- Windows-Security-Auditing日志。

如果你有Win7,那么你应该写一个wmi查询。 XP,我看不到一个好的方法,除非你想尝试空闲时间。

答案 1 :(得分:1)

一个有效的指标(在Windows 7 SP1上只有一个用户而没有远程桌面)是检查是否存在LogonUI.exe进程,只有当工作站被锁定时才会出现。请参阅以下islocked.vbs,它也可以传递远程计算机名称。

' Source:
'   http://community.spiceworks.com/scripts/show/1965-detect-screen-lock-status
Dim computer : computer = "."
If WScript.Arguments.Count = 1 Then
    computer = WScript.Arguments(0)
End If

Function IsWorkstationLocked( computer )
    Dim wmi : Set wmi = GetObject("winmgmts://" & computer & "/root/cimv2")
    Dim logonScreenCount : logonScreenCount = wmi.ExecQuery ("SELECT * FROM Win32_Process WHERE Name = 'LogonUI.exe'").Count

    IsWorkstationLocked = (logonScreenCount > 0)
End Function

If IsWorkstationLocked(computer) Then
    WScript.Quit(0)
Else
    WScript.Quit(1)
End If

答案 2 :(得分:0)

不确定您是否可以通过脚本查看。大多数功能将按预期运行。一件不起作用的是发送密钥(模拟按键或鼠标移动),但你不能通过html上的脚本来完成。
也许您可以检查自用户上次活动以来的空闲时间?

答案 3 :(得分:0)

如果有屏幕保护程序,您可能会看到像'logon.scr'这样的过程。如果您没有运行屏幕保护程序,那将无效。使用this代码时,.Net很容易。

您可以将其创建为COM对象并从VBScript中调用它。