现象
最近才开始用HP的笔记本(EliteBook),发现有个恼人的现象:
在输入文字的时候,有时需要按下CAPS Lock键,锁定大小写,按下CAPS键后,你会发现你的输入会暂时输入不进去,它会在右下角弹一个提示,说CAPS ON / OFF,提示消失后,你可以继续输入了,但是中断让人十分不爽。
尝试
1、寻找程序设置,期待有设置可以开启或者关闭这个提示,未果。
2、网上搜索,按照帖子里面说的在控制面板里设置系统自带的设置,未果。
3、发现有Remap keycode的方案,把Caps Lock按钮的keycode改掉,但怀疑会导致大小写切换失效,没有进一步尝试。
4、意外发现,这个提示框出现时,会有一个进程出现,HpCaslNotification.exe,改名后,任何提示都没有了,包含屏幕亮度调节提示框、音量调节提示框等。也不太爽,不完美,只想去掉大小写切换时的提示框。
5、尝试分析这个HpCaslNotification.exe程序,看看是不是读取了什么地方设置,再去弹这个提示框,思路还是在停留在设置上面,后来发现这个程序是.NET写的,用上ILSpy,却发现的确是被混淆了,读起代码来比较吃力,也没有找到关键点。
6、偶然来了灵感,去追踪谁打开了HpCaslNotification.exe,发现它的父进程是QLBController.exe,发现也是.NET编写的,并且没有被混淆,大爽。
7、发现了关键代码,对键盘有监听,判断按下的是否是CAPS Lock键,如果是就会弹相应的提示框。
结论
使用Reflector加上Reflexil,在IL里,把QLBController.exe中关键判断Caps Lock的KeyCode 20改成其他的KeyCode(不存在于键盘上的KeyCode),再保存(此程序有签名,我是选择的保持延迟签名状态),把原始程序替换掉。尝试切换大小写,整个世界都安静了,再没有恼人提示中断了。而且其他的提示框也保留下来了。
没有尝试,在保存程序时,对签名的不同处理,会不会对运行程序有所影响。