现象
前些年做项目,原来的thinkpad X240不够用了,就用赚的钱换了个华为的14寸的触屏笔记本,开始时一直没啥问题,去年下半年发现,触屏经常不好用,重启就好,但是我个人不喜欢重启电脑。后面发现用华为电脑管家修复问题,有机率修复好,但最近又不行了。
近期发现,当触屏不灵的时候,设备管理器中有一个I2C的设备显示错误,并且,设备管理器中没有触屏这个设备,而我禁用这个有问题的I2C设备,再启用,它就好了,触屏设备也出现了。
分析原因
触屏是通过I2C总线连接到cpu上的,但是当电脑休眠再唤醒后,这个设备不能正常加载,导致触屏失灵。既然可以通过设备管理器来禁用再启用就解决,那是不是可以通过命令行来实现自动化一键完成呢?
解决办法
有了上面的分析,就在豆包上问了几轮。
第一轮,我问在win平台上有没有办法用命令行来禁用设备,它给了三种方法,一种是用sc config,这个是对驱动是以服务形式加载的可以用,而I2C设备不有对应的服务。第二种是用Powershell命令,我想试一下,但是发现我不知道设备的标识符要怎么看,然后就问豆包。第三种是用一个devcon的工具,我没有安装,就暂时不考虑了。
第二轮,怎么在win平台上查看设备的InstanceId ,它给出了方法,我照着方法果然找到了。下面是它给的方法
1 | Get-PnpDevice | Where-Object {$_.FriendlyName -like "*I2C*"} |
找到这个ID后,就测试了下Disable-PnpDevice -InstanceId "设备的InstanceId" -Confirm:$false
命令,果然有效。又试了下Enable-PnpDevice -InstanceId "设备的InstanceId" -Confirm:$false
,也实现了目的。
第三轮,怎么把Disable-PnpDevice -InstanceId "设备的InstanceId" -Confirm:$false
完成后延时5s再enable这个设备,写成一个可以执行的脚本。豆包正确的识别了我的意图,输出了三行powershell的命令,然后我把命令保存为ps1文件,再在powershell的终端界面运行,果然可行。
然后就是想办法让它可以在系统解锁的时候自动执行。
还是用豆包,查到了怎么把写的ps1文件填加到计划任务中去。
在 “程序或脚本” 文本框中输入 “powershell.exe”,在 “添加参数” 文本框中输入要执行的.ps1 脚本的路径及文件名,例如 “-File C:\Scripts\yourscript.ps1”。