- 主题:有没办法用程序自动解除 屏保?
发现很多python库 或者 nircmd.EXE (nircmd.exe sendkeypress ctrl)都是 模拟键盘或者鼠标操作,能够在当前会话 控制不用进入屏保或者 当前会话发起的屏保能够自动解除,
但是当系统发起的屏保时,这些程序就没法工作了,AI 说是windows系统发起的具有UI隔离,输入通道受限 ,所以没办法 用程序定时 取消屏保。
有没人知道相关的解决方案,除了 直接关闭系统 屏保功能。
同理,锁屏 想程序自动登录 也是不行的。
--------AI 回答-----------
2. 系统自动启动屏保 = 会话状态变更 + UI 隔离
系统设置的屏保由 Windows Session 0 或特殊的 Secure Desktop 启动,具有以下特点:
特性 说明
UI 被隔离 当前用户的输入设备被系统“隔离”,普通应用无法控制
输入通道受限 只有物理输入(如真实键盘鼠标)才能解除
安全机制限制 防止恶意程序自动绕过屏保或锁屏(安全策略)
有时切入锁屏 如果屏保设置了“在恢复时显示登录屏幕”,系统会立即转入锁屏状态(WinLogon 桌面),完全无法被模拟输入唤醒
这时:
nircmd.exe 和 pyautogui 发出的“按键事件”属于用户会话线程内,操作系统会忽略这些事件。
想要解除屏保,只能靠:
实际鼠标/键盘物理输入
驱动层模拟(如 HID 虚拟设备)
--
修改:Algoquant FROM 14.127.33.*
FROM 14.127.33.*
淘宝上一根线解决
【 在 Algoquant 的大作中提到: 】
: 发现很多python库 或者 nircmd.EXE (nircmd.exe sendkeypress ctrl)都是 模拟键盘或者鼠标操作,能够在当前会话 控制不用进入屏保或者 当前会话发起的屏保能够自动解除,
: 但是当系统发起的屏保时,这些程序就没法工作了,AI 说是windows系统发起的具有UI隔离,输入通道受限 ,所以没办法 用程序定时 取消屏保。
: 有没人知道相关的解决方案,除了 直接关闭系统 屏保功能。
: ...................
--
FROM 124.202.180.*
屏保的没试过,锁屏的我倒处理过:
class WinSessionManager:
def __init__(self):
self.last_unlock = 0
self.is_active = None
self.is_locked = None
def update_lock_status(self):
hwnd = win32gui.GetForegroundWindow()
if hwnd == 0:
self.is_locked = True
else:
self.is_locked = False
def get_current_rdp_session(self):
'''
get current rdp session id, *also force an update of lock status*
:return: current rdp session id
'''
self.update_lock_status()
complete = subprocess.run('chcp 437 | query session', capture_output=True, shell=True, encoding='gbk')
cmd_text: str = complete.stdout
logging.debug('get_current_rdp_session():')
logging.debug(cmd_text)
for line in cmd_text.splitlines():
line = line.strip()
if line.startswith('>'):
line_splits = line.split()
rdp_session_id = int(line_splits[2])
if line_splits[3].lower() == 'disc':
self.is_active = False
elif line_splits[3].lower() == 'active':
self.is_active = True
return rdp_session_id
def lock_screen(self):
rdp_session = self.get_current_rdp_session()
if self.is_active:
logging.debug('Calling tsdiscon..')
return_code = subprocess.call(['tsdiscon.exe', str(rdp_session)], shell=True)
logging.debug(f'tsdiscon: return code: {return_code}')
while True:
self.get_current_rdp_session()
if not self.is_active:
break
def unlock_screen(self):
rdp_session = self.get_current_rdp_session()
self.last_unlock = time.time()
if self.is_active and self.is_locked:
# locked from console, disconnect the session first
logging.debug('Locked from console detected, disconnect first.')
self.lock_screen()
if not self.is_active:
logging.debug('Calling tscon..')
return_code = subprocess.call(['tscon.exe', str(rdp_session), '/dest:console'],
shell=True)
logging.debug(f'tscon: return code: {return_code}')
while True:
self.get_current_rdp_session()
if self.is_active:
break
【 在 Algoquant 的大作中提到: 】
: 发现很多python库 或者 nircmd.EXE (nircmd.exe sendkeypress ctrl)都是 模拟键盘或者鼠标操作,能够在当前会话 控制不用进入屏保或者 当前会话发起的屏保能够自动解除,
: 但是当系统发起的屏保时,这些程序就没法工作了,AI 说是windows系统发起的具有UI隔离,输入通道受限 ,所以没办法 用程序定时 取消屏保。
: 有没人知道相关的解决方案,除了 直接关闭系统 屏保功能。
: ...................
--
修改:adamhj FROM 182.96.96.*
FROM 182.96.96.*
淘宝上是放在休眠啥的,防止锁屏啥的,或者自动开关机
我电脑是一直开的,平时没用时进行屏保,但到了 股市开盘前,自动去除屏保,因为用的 程序自动登录软件,需要屏幕是激活状态 。
【 在 capstone 的大作中提到: 】
: 淘宝上一根线解决
:
--
FROM 14.127.40.*
好像远程的可以,本地的不行。远程的电脑只要不关机,息屏幕都没啥关系,都能自动登录,但是本地电脑,想用程序 自动解除屏幕,或者锁屏下自动解锁,搞不定。
唯一解,目前只能 去除屏保,去除自动锁屏,显示器还不能关。耗电、耗屏幕。
或者开启屏保,但 程序里搞个持续间隔模拟键盘动作,程序如果在运行,就能防止屏保和锁屏。
【 在 adamhj 的大作中提到: 】
: 屏保的没试过,锁屏的我倒处理过:
: class WinSessionManager:
: def __init__(self):
: ...................
--
FROM 14.127.40.*
我猜你根本没仔细看我做了什么
【 在 Algoquant 的大作中提到: 】
: 好像远程的可以,本地的不行。远程的电脑只要不关机,息屏幕都没啥关系,都能自动登录,但是本地电脑,想用程序 自动解除屏幕,或者锁屏下自动解锁,搞不定。
: 唯一解,目前只能 去除屏保,去除自动锁屏,显示器还不能关。耗电、耗屏幕。
: 或者开启屏保,但 程序里搞个持续间隔模拟键盘动作,程序如果在运行,就能防止屏保和锁屏。
: ...................
--
FROM 182.96.96.*
非常感谢。试了一下,在管理员权限下 可以。牛逼
【 在 adamhj 的大作中提到: 】
: 我猜你根本没仔细看我做了什么
:
--
FROM 14.127.40.*