.net - 在 Visual Studio 编辑器中检测事件

标签 .net visual-studio visual-studio-2010 editor vsix

我想知道 Visual Studio 编辑器是否以编程方式 Hook ,以便我可以确定是否有人在编辑器中输入。

谢谢!

最佳答案

在 Visual Studio 中有多种方法可以做到这一点。这里有几个不同的钩子(Hook)可用。

  • IOleCommandTarget : Visual Studio 中的击键最终会以命令的形式出现,并通过这条链
  • 进行路由。
  • KeyProcessor :对于直接 WPF 键盘输入,您可以创建 MEF IKeyProcessorProvider组件并让创建的KeyProcessor处理输入
  • ITextBuffer::Changed :直接监听底层缓冲区的变化来解释输入。

  • 其中每一个都相当复杂,在 SO 问题中为它们添加完整样本是不合理的。但是只要在谷歌中输入他们的名字就可以让你找到正确的方向。

    请注意,尽管 Visual Studio 中的键盘输入是一个非常复杂的过程。它必须处理 Windows 消息、旧式 Visual Studio 命令、WPF、MEF Hook 、翻译加速器等......它非常困惑,试图在任何一个阻塞点处理所有输入都充满了问题。在处理插件时,我已尽力记录 Visual Studio 键盘输入的当前状态,您可以在此处找到它
  • https://github.com/jaredpar/VsVim/blob/master/Src/VsVim/KeyboardInputRouting.txt

  • 但这几乎不是一个完整的理解。

    关于.net - 在 Visual Studio 编辑器中检测事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3958354/

    相关文章:

    visual-studio-2010 - 适当的 MSDN 订阅

    c++ - 我可以告诉VC201 0 auto 增加预编译头分配(同/Zm)而不是获取c3859吗?

    .net - 如何防止用户将数据输入 DataGridViewComboBoxCells?

    .net - 如何使用 PowerShell 获取自定义程序集属性

    visual-studio - 如果多个文件具有相同的名称,Visual Studio 断点会在错误的源文件(或同时多个文件)中中断

    visual-studio - 在 Visual Studio 中向项目添加引用和添加 Nuget 包之间的区别

    c# - 为什么 Ninject.Portable 中没有 IKernel 实现

    c# - 如何在.Net中以中间层结构化方式处理错误或异常

    c++ - 在注释行调用断点

    visual-studio-2010 - 自定义操作不起作用 - Visual Studio 安装项目