【问题标题】:Check if the Windows screen is locked检查 Windows 屏幕是否被锁定
【发布时间】:2017-02-01 12:19:55
【问题描述】:

有没有办法自动检查当前用户是否锁定了他的电脑? (通常由Win+L 激活)。我看到的一种 hacky 方法是以某种方式捕获所有组合键,但问题是如何知道用户已经返回?

也许有一些标志可以通过 python 或 windows 终端访问?

编辑:我尝试了这里的代码:Detect when computer is unlocked Windows

它会检测屏幕何时被锁定,但不会在解锁时检测到,它会无限期地继续写入“屏幕仍处于锁定状态”。那么可能是什么问题?我有 Python 3.4、64 位 Win7。

EDIT2:实际上result 对我来说始终是0,即使没有任何锁定,所以实际上它没有检测到任何东西。

import ctypes

user32 = ctypes.windll.User32
OpenDesktop = user32.OpenDesktopA
SwitchDesktop = user32.SwitchDesktop
DESKTOP_SWITCHDESKTOP = 0x0100

hDesktop = OpenDesktop ("default", 0, False, DESKTOP_SWITCHDESKTOP)
result = SwitchDesktop (hDesktop)

print(result)

【问题讨论】:

  • 我试过了,只是部分有效。
  • 此代码在 Python 3 中不起作用,因为您将 unicode 传递给(所有但已弃用且绝对要避免)[A]NSI API OpenDesktopA 而不是 [W ]ide-character API OpenDesktopW。它也没有设置restypeargtypes,所以它很容易使Python 崩溃。它不处理错误。它正在泄漏一个手柄。它可能会修改当前输入桌面作为副作用。它使用了ctypes.windll,它容易受到库间冲突的影响,而不是ctypes.WinDLL,因此也没有使用use_last_error=True来保护线程的最后一个错误值。
  • 谢谢,使用 OpenDesktopW 使它工作。
  • 依赖于安全桌面行为的技术,例如这种技术,在 Windows 10 中是不可靠的。当工作站被锁定时,例如通过LockWorkStation,它不会立即设置为安全桌面。您必须单击以切换到安全桌面(我不知道为什么),这是提示您输入凭据的地方。最好直接查询终端服务 API 来检查会话是否被锁定——Windows 7 及更高版本支持的查询。

标签: python windows


【解决方案1】:

打开comp mgmt,打开远程控制台,输入计算机名 连接到远程控制台后,检查安全日志

注意:您可以将基础计算机设置为接收您选择的日志文件,使您能够自动查看用户何时登录/关闭/锁定/解锁

【讨论】:

    猜你喜欢
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多