Windows无缝息屏锁屏

在Windows图形界面中,原有的息屏方式不能按需随时息屏,等待时间长。为此,可通过新建bat文件实现息屏功能,复制内容时建议用sublime编辑器。因执行脚本会弹出cmd黑框,又新增vbs文件添加后台执行策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows无缝息屏锁屏

背景

windows图形界面中需要在电源计划中设置息屏时间来达到息屏的效果,但这个不能够按照自己心意随时息屏,之前都是windows+L锁屏,但息屏却还需要等待至少1分钟时间,鉴于此我就想着直接弄一个桌面脚本直接息屏,他只要是存在的功能就一定有执行的命令对应。

息屏功能实现

新建bat文件,然后添加如下内容
注意
复制时右键编辑时记事本打开会有问题,建议使用sublime编辑器复制保存

@echo off

::0秒延时  (11-1 = 10秒   。127.1是本地地址127.0.0.1的简写。 >nul:将ping到的信息 写入一个空“文件”里    >是重定向符号  nul是空设备的意思  把提示输入到空设备就不显示了 有兴趣的可以去掉这个看看效果)
::ping   -n   1   127.1   >nul
 
::息屏
powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)
 
::锁屏
rundll32 user32.dll,LockWorkStation

后台执行

由于上面的脚本在执行时会弹出cmd黑框,就显得不是那么的舒服,于是添加了后台执行的策略。

新增一个vbs文件,然后添加如下内容

createobject("wscript.shell").run "自动息屏.bat",0
在嵌入式系统中,自动功能通常用于节省电能和延长设备的使用寿命。使用Keil开发工具可以方便地实现这一功能。以下是一个简单的示例,演示如何在Keil中实现自动功能。 假设我们使用的是基于ARM Cortex-M的微控制器,并且使用Keil进行开发。我们将使用定时器来检测用户的操作时间,如果在一段时间内没有检测到用户操作,则自动关闭幕。 1. **初始化定时器**:设置一个定时器来计时用户操作的时间。 2. **检测用户操作**:在用户进行操作时,重置定时器。 3. **处理逻辑**:当定时器达到预设时间后,触发操作。 以下是一个简单的代码示例: ```c #include "stm32f10x.h" // 根据实际使用的微控制器型号包含相应的头文件 #define SCREEN_OFF_TIME 30000 // 时间,单位为毫秒 volatile uint32_t userActivityTime = 0; void Timer_Init(void) { // 初始化定时器 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseStructure.TIM_Period = 999; TIM_TimeBaseStructure.TIM_Prescaler = 7199; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM2, ENABLE); } void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); userActivityTime += 1000; // 定时器中断每1秒触发一次 if (userActivityTime >= SCREEN_OFF_TIME) { Screen_Off(); // 调用函数 TIM_Cmd(TIM2, DISABLE); // 关闭定时器 } } } void Screen_Off(void) { // 实现逻辑,例如关闭背光 // 此处仅为示例,实际实现根据具体硬件而定 GPIO_SetBits(GPIOA, GPIO_Pin_0); } int main(void) { // 初始化系统时钟 SystemInit(); // 初始化幕 Screen_Init(); // 初始化定时器 Timer_Init(); while (1) { // 检测用户操作 if (User_Activity_Detected()) { userActivityTime = 0; // 重置计时 Screen_On(); // 打开幕 TIM_Cmd(TIM2, ENABLE); // 重新启动定时器 } } } void Screen_Init(void) { // 初始化幕,例如初始化背光 // 此处仅为示例,实际实现根据具体硬件而定 GPIO_ResetBits(GPIOA, GPIO_Pin_0); } uint8_t User_Activity_Detected(void) { // 检测用户操作,例如按键按下 // 此处仅为示例,实际实现根据具体硬件而定 return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1); } ``` 在这个示例中,我们使用定时器TIM2来计时用户操作的时间。每当检测到用户操作时,重置计时器并重新启动定时器。如果在预设的时间内没有检测到用户操作,则调用函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值