微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在屏幕保护程序打开时检测窗口的批处理文件?

如何解决如何在屏幕保护程序打开时检测窗口的批处理文件?

如何编写批处理程序以确定屏幕保护程序是否正在运行、用户是否进入睡眠状态或计算机是否锁定?

在 Ubuntu Linux 的 bash 中,我使用代码/gnome-screensaver-command -q | grep "is active" 来确定屏幕保护程序是否正在运行。

注意:我不是在寻求书籍、工具、软件库的推荐......

除非有更好的方法,否则我正在使用此脚本来查找正在运行的进程。但我必须找到屏幕保护程序的名称

@echo off
set pn=%1
echo looking for %pn%
tasklist /FI "IMAGENAME eq %pn%" 2>NUL | find /I /N "%pn%">NUL
if %ERRORLEVEL%==0 (
    echo Found program running
) else (
    echo NOT FOUND running  
)

解决方法

屏幕保护程序的名称会因运行的屏幕保护程序而异,但应始终以 .scr 结尾。

tasklist | find ".scr" >nul
if %errorlevel% EQU 0 (
    echo Screensaver is running
) else (
    echo Screensaver is not running
)

默认的 Windows 10 屏幕保护程序具有以下进程名称:

3D Text - ssText3d.scr
Blank   - scrnsave.scr
Bubbles - Bubbles.scr
Mystify - Mystify.scr
Photos  - PhotoScreensaver.scr
Ribbons - Ribbons.scr

当计算机被锁定时,进程 LogonUI.exe 运行。

tasklist | find "LogonUI.exe"
if %errorlevel% EQU 0 (
    echo Computer is locked
) else (
    echo Computer is unlocked
)
,
@echo off 

pushd "%__AppDir__%"
title <nul & title ..\%~nx0
setlocal EnableDelayedExpansion
set "_Reg_Key=HKCU\Control Panel\Desktop"

:loop
for /f skip^=2tokens^=2* %%i in (
';2^>^&1 reg.exe query "!_Reg_Key!" /v SCRNSAVE.EXE
')do if /i "%%~xj" == ".scr" (set "_scr_svr=%%~nxj") else (
     echo/[ !date! ^| !time:~0,8! ] Screen Saver: Disable " - - - - -!"
     rem./ With ScreenSaver is disabled no status is need && goto:next
    )

for /f skip^=2tokens^=2* %%i in (
';2^>nul reg query "!_Reg_Key!" /v ScreenSaveActive')do if %%j equ 1 (
      2>nul tasklist.exe/svc /fo list|find.exe/i "!_scr_svr!">nul && (
      echo/[ !date! ^| !time:~0,8! ] Screen Saver: Running "!_scr_svr!"
    ) || (
      echo/[ !date! ^| !time:~0,8! ] Screen Saver: Enabled "!_scr_svr!"
      echo/[ !date! ^| !time:~0,8! ] Screen Saver: Stopped "!_scr_svr!")
    )

:next
2>nul tasklist.exe/svc /fo list|find.exe/i "LogonUI.exe" >nul && (
         echo/[ !date! ^| !time:~0,8! ] Work Station: Locked  "!ComputerName!"
    ) || echo/[ !date! ^| !time:~0,8! ] Work Station: Logged  "!ComputerName!"

<con: set "_scr_svr=" & >nul timeout/t 10 /nobreak & goto :Loop  

1.使用Reg Query查看屏幕保护程序当前是否启用

for /f skip^=2tokens^=2* %%i in (
';2^>nul reg query "!_Reg_Key!" /v ScreenSaveActive')do if %%j equ 1 (

2.如果屏幕保护程序当前启用,请使用额外的Reg Query获取并保存The_Name + .Extension

3. 避免在 | find ".scr" 中使用部分字符串,并使用 find /i "The_Full_File_Name.scr" 表示不区分大小写以及匹配 some_name.scr ≠≠ Some_Name.SCR 和 {{ 1}}

  • Obs.1 在使用 some_name.scr == Some_Name.SCR 的任务列表中,tasklist 存在任何字符串在还包含字符串 |find ".scr"(仅限小写)的名称中,这也将列出屏幕保护程序是否正在运行。

  • Obs.2 如果 screen_saver_long_name.scr 名称(包括扩展名)中的字符长度大于 25,则带有 .str,你永远不会过滤/找到这个文件,因为 tasklist | find ".src"(没有任何 tasklist)在输出中只有 26 个字符的长度(,以.结尾)

  • Obs.:3 对于正在运行某些屏幕保护程序名称(如 /flag)的列表进程,请使用 Security Screensaver NG.scr

4. 使用循环并保持对循环过程中随时可能发生的任何更改的监控,不断查询注册表值。


可能的状态和输出:

  • 屏幕保护程序已启用但未运行,但用户已登录:
tasklist /svc /fo list
  • 屏幕保护程序已启用并正在运行,但工作站已锁定:
[ Sun 12/27/2020 | 23:26:17 ] Screen Saver: Enabled "Fliqlo.scr"
[ Sun 12/27/2020 | 23:26:17 ] Screen Saver: Stopped "Fliqlo.scr"
[ Sun 12/27/2020 | 23:26:17 ] Work Station: Logged  "LAME_SLUG"
  • 启用的屏幕保护程序未运行,但用户已登录:
[ Sun 12/27/2020 | 27:09:07 ] Screen Saver: Enabled "Fliqlo.scr"
[ Sun 12/27/2020 | 27:09:07 ] Screen Saver: Running "Fliqlo.scr"
[ Sun 12/27/2020 | 27:09:07 ] Work Station: Locked  "LAME_SLUG"
  • 屏幕保护程序已启用但未运行,工作站已锁定:
[ Sun 12/27/2020 | 25:26:21 ] Screen Saver: Enabled "Fliqlo.scr"
[ Sun 12/27/2020 | 25:26:21 ] Screen Saver: Running "Fliqlo.scr"
[ Sun 12/27/2020 | 25:26:21 ] Work Station: Logged  "LAME_SLUG"
  • 屏幕保护程序已禁用 [ Sun 12/27/2020 | 25:15:28 ] Screen Saver: Enabled "Fliqlo.scr" [ Sun 12/27/2020 | 25:15:28 ] Screen Saver: Stopped "Fliqlo.scr" [ Sun 12/27/2020 | 25:15:28 ] Work Station: locked "LAME_SLUG",但用户已登录:
not running
  • 屏幕保护程序已禁用 [ Sun 12/27/2020 | 22:51:46 ] Screen Saver: Disable " - - - - -" [ Sun 12/27/2020 | 22:51:46 ] Work Station: Logged "LAME_SLUG",但工作站已锁定:
not running

  • 限制为 10 个循环,10 个间隔/超时,每个 10 秒
[ Sun 12/27/2020 | 22:44:11 ] Screen Saver: Disable " - - - - -"
[ Sun 12/27/2020 | 22:44:11 ] Work Station: Locked  "LAME_SLUG"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?