在 Python 3 中,如何判断 Windows 是否已锁定?

Iva*_*eev 6 python windows python-3.x

如何检查 Windows 操作系统工作站是否被锁定?(例如 Win+L 或在 Ctrl+Alt+Del 之后选择锁定选项。)

我想要类似的东西ctypes.windll.user32.isWorkstationLocked()

mac*_*cok 7

这段代码今天在四台不同的 Windows 7 和 10 机器上对我有用,尝试类似的东西:

import ctypes
import time
user32 = ctypes.windll.User32
time.sleep(5)
#
#print(user32.GetForegroundWindow())
#
if (user32.GetForegroundWindow() % 10 == 0): print('Locked')
# 10553666 - return code for unlocked workstation1
# 0 - return code for locked workstation1
#
# 132782 - return code for unlocked workstation2
# 67370 -  return code for locked workstation2
#
# 3216806 - return code for unlocked workstation3
# 1901390 - return code for locked workstation3
#
# 197944 - return code for unlocked workstation4
# 0 -  return code for locked workstation4
#
else: print('Unlocked')
Run Code Online (Sandbox Code Playgroud)

编辑:另外,这个今天有效:

import subprocess
import time
time.sleep(5)
process_name='LogonUI.exe'
callall='TASKLIST'
outputall=subprocess.check_output(callall)
outputstringall=str(outputall)
if process_name in outputstringall:
    print("Locked.")
else: 
    print("Unlocked.")
Run Code Online (Sandbox Code Playgroud)

  • @Ruben,是的,正是为此。很高兴它对你有用! (2认同)

小智 6

我发现查看 Windows 10 是否被锁定的一个技巧是使用 来查看正在运行的进程psutil。然后您搜索以查看是否LogonUI.exe正在运行。此过程仅在用户锁定会话时运行。

注意:如果您使用“切换用户”,此进程将显示为正在运行,并且此解决方法将不起作用。Windows 实际上会产生多个LogonUI.exe进程,每个登录的锁定用户都有一个进程。仅当一次只有一个人登录时它才有用。

import psutil

for proc in psutil.process_iter():
    if(proc.name() == "LogonUI.exe"):
        print ("Locked")
Run Code Online (Sandbox Code Playgroud)


The*_*lta 5

你可以得到最上面的窗口,当会话被锁定时,函数返回0。

import ctypes
user32 = ctypes.windll.User32

def isLocked():
    return user32.GetForegroundWindow() == 0
Run Code Online (Sandbox Code Playgroud)

  • 在 Windows 10 Pro 中,这对我来说是错误的。锁定时,hwnd 进程 ID 是一个不断变化的数字,标题为“Windows 默认锁定屏幕”。当我按 Enter 键输入密码时,它只是 hwnd == 0。我使用此示例中的几行来获取标题并将其与 0、“”或上面的标题进行比较。http://pixomania.net/programming/python-getting-the-title-of-windows-getting-their-processes-and-their-commandlines-using-ctypes-and-win32/ (4认同)

cdo*_*nts 1

LockWorkStation()文档中:

没有可以调用的函数来确定工作站是否被锁定。

不是Python 的限制,而是系统本身的限制。