Visual Studio 扩展:在打开新代码 window 时跟踪?

Visual Studio Extension: Track when new code window is opened?

我正在尝试编写一个 Visual Studio 扩展来跟踪何时打开新代码 window。我发现 class IVsCodeWindowEvents 似乎为此提供了侦听器方法:

public int OnNewView(IVsTextView pView)

但是,我有一个问题,我不知道如何注册以收听这些事件。

我的 class 看起来像这样:

public sealed class VSTrackerPackage : Package, IVsCodeWindowEvents

在这个 class 中,我实现了 OnNewView 方法,但是如何在我的 Initialize 方法中注册这个侦听器?

是的,您可以通过 DTE and more specifically DTE2.

注册 Visual Studio 活动

第一步是通过 Initialize 方法从您的包中获取访问权限:

public sealed class VSTrackerPackage : Package
{
    DTE2 dte = GetService(typeof (DTE)) as DTE2;
}

此时,我建议附加到 DocumentEvents.DocumentOpened 事件。从那里您可以检查它是否是您感兴趣的文档。如果您需要在那里与之互动,您还可以获得 Window:

_dte.Events.DocumentEvents.DocumentOpened += document =>
        {
            //double check this logic.
            if (document.Language != "C#")
                return;

            //do work


            //or - load window document.ActiveWindow.
        };

如果有帮助,我有一个开源的 Visual Studio 插件(shameluss 插件:pMixins ) that attaches to a number of VS events. Relevant class is on GitHub: https://github.com/ppittle/pMixins/blob/master/CopaceticSoftware.CodeGenerator.StarterKit/Infrastructure/VisualStudioEventProxy.cs。Class 定义从第 243 行开始。