背景
有一个这样的业务需求:我们希望监听用户在编写代码时的键盘事件
基本分析
part1
如果把vs看做一个桌面应用程序,那么我们就是希望介入到这个窗体应用的键盘事件处理过程
当然我直观上认为vs不会直接把键盘事件处理接口暴露给我
这一个观点在我验证jaredpar大佬的经验分享1的时候得到了一定验证,我还没有找到窗体键盘处理事件的扩展点
part2
接下来,我尝试寻找其他方式来直接或者间接的方式得到键盘事件,这时候我得到了第一种方案,我通过监听代码文件对应的文档对象的内容变化事件来确认键盘事件,因为我们的编码过程,每一次键盘敲击的主要目的都是修改代码文本。
这部分的内容可以通过 EnDTE.DTE2.events.DocumentEvents 暴露出来的接口来实现
但是上面的方案存在着一定问题,我们的一次键盘事件可能对应着一段输入(参考tab键,copy paste,使用中文输入法输入中文),或者多次键盘事件对应着一次输入(使用中文输入法输入中文和组合键),所以上面的方案存在着缺陷
part3
而后我找到了jaredpar大佬的经验分享1&