平时在办公室办公,经常会遇到这样的场景:去打印文件、起身接个水、和同事讨论几分钟、临时去开个会……很多时候只是离开几分钟,但电脑还亮着,聊天记录、内部文件、系统后台全都会暴露在屏幕上。
复制以下代码,保存为 .bat 文件,在离开时双击运行一下即可达到自动熄屏并锁屏的效果,超级方便!
@echo off
title 锁屏并熄灭屏幕
echo 3 秒后执行...
timeout /t 3 /nobreak >nul
:: 熄灭显示器
powershell -Command "Add-Type '[DllImport(\"user32.dll\")] public static extern int SendMessage(int hWnd,int Msg,int wParam,int lParam);' -Name Win32 -Namespace Native; [Native.Win32]::SendMessage(-1,0x0112,0xF170,2)"
:: 等待 1 秒
timeout /t 1 /nobreak >nul
:: 锁屏
rundll32.exe user32.dll,LockWorkStation
exit
hack0573
(hack0573)
2
测试成功,非常不错!就是有个地方可以优化一下,当锁屏后重新进入系统,黑色的CMD窗口还在,如果能自动退出就完美了。
我的解决思路是:让 CMD 启动后台任务后立刻自我销毁(exit),由后台 PowerShell 依次完成“先锁屏、再熄屏”。这样等你解锁时,CMD 窗口早就关闭了。
将批处理代码修改为以下内容:
@echo off
title 锁屏并熄灭屏幕
echo 3 秒后执行...
timeout /t 3 /nobreak >nul
:: 将锁屏和息屏逻辑丢给后台 PowerShell 处理,CMD 窗口瞬间退出
start "" /b powershell -WindowStyle Hidden -Command "$u=Add-Type '[DllImport(\"user32.dll\")] public static extern int SendMessage(int h,int m,int w,int l); [DllImport(\"user32.dll\")] public static extern bool LockWorkStation();' -Name U -Namespace N -PassThru; $u::LockWorkStation(); Start-Sleep -m 500; $u::SendMessage(-1,0x0112,0xF170,2)"
:: 立即关闭 CMD 窗口
exit
关键优化说明
颠倒顺序:先调用 LockWorkStation() 锁定系统,等待 500ms(让锁屏界面渲染完成),最后再发送 0xF170 熄屏指令,避免屏幕被唤醒。
无痕退出:利用 start “” /b powershell -WindowStyle Hidden 让 PowerShell 在后台隐蔽运行,CMD 窗口发出指令后会在息屏前瞬间关闭,解锁后绝不会留存黑色窗口。