背景:
Windows 改键,需要把 左Ctrl键 和 大写锁定Capslock键 映射值互换
网上教程很多,最简单的就是下载软件,也有教程是修改注册表的。
但是注册表修改起来 怕哪天突然想修改回去的话还得扒文档。 所以我们还是用软件来满足我们的需求:
微软官方出了一款很好用的软件:PowerToys,功能比较丰富。
如:窗口置顶、环境变量编辑、Hosts文件编辑......

image.png
本文用到的功能是:键盘管理器
通过设置重新定义键盘上的键。
例如,可以在键盘上将字母 A 交换为字母 B。 当你按下 A 键时,会插入 B
因为日常办公都是通过局域网连接到虚拟桌面,所以基本的开发工作都是在虚拟桌面完成的。
每次离开工位去接水需要锁屏,回来打开电脑屏幕继续工作的时候,发现键盘映射在虚拟桌面失效了,但在本地电脑是正常的。暂时不知道是什么原因,但是当我重启PowerToys后,键盘映射在虚拟桌面又正常了。(PS:重启解决99%的问题)
至今我也不知道锁屏解锁后,键盘映射会失效。。。
所以换个思路解决问题,那就是:每次解锁后,自动关闭PowerToys,然后重新打开PowerToys。
思路有了,把人能听懂的句子换成Windows能够理解的程序:
@echo off
taskkill /f /im "SoftwareName.exe"
start "" "C:\Program Files\PowerToys\PowerToys.exe"
需要执行的程序有了,那触发条件是在:解锁屏幕时
一顿百度,发现可以通过Windows自带的Windows任务计划可以实现。
- 触发器:当解锁工作站时
- 操作:执行bat脚本

image.png
通过以上的配置,就可以满足我的需求了,但是实际测试下来,每次解锁屏幕后都会弹出一个cmd黑窗口。。。
我希望这个可以在后台静默执行,so:
把bat 换成vbs即可
Set objShell = CreateObject("WScript.Shell")
' 尝试结束PowerToys进程
objShell.Run "taskkill /f /im PowerToys.exe", 0, True
WScript.Sleep(3600)
' 启动PowerToys
objShell.Run """C:\Program Files\PowerToys\PowerToys.exe""", 1, False
细心的网友可能发现了哈,我多加了一行。我希望退出程序后,有3600ms的延时。(故意的)