如何检查Windows操作系统工作站是否已锁定? (例如,在Ctrl + Alt + Del之后选择Win + L或选择锁定选项。)
我想要ctypes.windll.user32.isWorkstationLocked()
。
答案 0 :(得分:3)
您可以将窗口置于顶部,当会话锁定时,该函数返回0。
import ctypes
user32 = ctypes.windll.User32
def isLocked():
return user32.GetForegroundWindow() == 0
答案 1 :(得分:2)
这样的事情可以解决问题:
import time
import ctypes
user32 = ctypes.windll.User32
OpenDesktop = user32.OpenDesktopA
SwitchDesktop = user32.SwitchDesktop
DESKTOP_SWITCHDESKTOP = 0x0100
while 1:
hDesktop = OpenDesktop ("default", 0, False, DESKTOP_SWITCHDESKTOP)
result = SwitchDesktop (hDesktop)
if result:
print "Unlocked"
time.sleep (1.0)
else:
print time.asctime (), "still locked"
time.sleep (2)
答案 2 :(得分:2)
此代码今天在四台不同的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')
编辑:而且,今天该软件可以使用:
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.")
答案 3 :(得分:0)
答案 4 :(得分:0)
在Windows 10 Pro上对我有用的是获取前台窗口:
whnd = win32gui.GetForegroundWindow()
(_, pid) = win32process.GetWindowThreadProcessId(whnd)
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, pid)
filename = win32process.GetModuleFileNameEx(handle, 0)
window_text = win32gui.GetWindowText(whnd)
锁定后,此返回Windows Default Lock Screen
作为窗口标题,返回C:\Windows\SystemApp\Microsoft.LockApp_<randomcharacters>\LockApp.exe
作为文件名。
但是,正如James Koss所述,如果用户输入密码,GetForeGroundWindow将返回0。在其他(非锁定)情况下,当前的ForegroundWindow为0,因此无法依赖。
答案 5 :(得分:0)
我发现一个漏洞,想知道Windows 10是否被锁定,是使用psutil查看正在运行的进程。然后,您搜索以查看LogonUI.exe是否正在运行。仅当用户具有锁定的会话时,此过程才会运行。
注意:如果使用切换用户,则此过程将显示为正在运行,并且此解决方法将不起作用。 Windows实际上产生了多个LogonUI.exe进程,每个登录的锁定用户一个。仅在一次只有一个人登录的情况下有用。
SELECT try(some_array[2]) FROM ...
答案 6 :(得分:0)
基于@Stardidi答案,这对我有效(Windows 10 Pro):
import time
import win32gui
import win32api
import win32con
import win32process
while True:
time.sleep(1)
_, pid = win32process.GetWindowThreadProcessId(win32gui.GetForegroundWindow())
try:
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, pid)
filename = win32process.GetModuleFileNameEx(handle, 0)
except Exception as _e:
filename = "LockApp.exe"
del _e
current_status = "locked" if "LockApp" in filename else "unlocked"
答案 7 :(得分:0)
您好,请检查这4行。
返回屏幕上的应用程序名称。如果窗口被锁定,则返回字符串-Windows默认锁定屏幕。
from win32gui import GetWindowText, GetForegroundWindow
import time
time.sleep(5)
# lock the system or open the application for a check
print(GetWindowText(GetForegroundWindow()))