检查Visual Studio 2012中的当前文档是否为代码窗口

时间:2014-01-20 19:10:42

标签: c# visual-studio visual-studio-2012 visual-studio-extensions envdte

我正在寻找一种方法让我的扩展程序检查Visual Studio 2012中当前打开的窗口是否为1,用户可以在其中编写代码(或任何类型的文本)。

要检查当前打开的窗口是否已更改,请使用

  

_DTE.Events.WindowEvents.WindowActivated。

这为我提供了获得焦点的EnvDTE.Window

在调试时查看该窗口的属性,我看EnvDTE.Window.Document.Type,其值为"Text"

但是,如果我停止调试并尝试访问Document.Type property,则它不存在。

如果我在EnvDTE.Window.Document的文档中查找此属性,则说明

  

基础结构。仅限Microsoft内部使用。

所以现在我正在寻找关于如何检查当前活动窗口是否为1,我可以编写代码(或其他任何内容)或其他类型文档(例如解决方案属性)的任何建议。

修改

我还尝试检查活动窗口的Window.TypeWindow.Kind,但他们只是告诉我它是一个文档,没有区分资源文件,图像文件或实际源文件,这是我想要找到的。

Edit²:

我想检查当前文档是否可以编写代码的原因是因为我希望我的扩展程序存储有关其中某些文档的信息,并且我想修改基于右键单击的上下文菜单我存储的信息,如果有的话。

2 个答案:

答案 0 :(得分:0)

这不是一个“真实”的答案,但您可以遵循VS GoTo命令的状态 - 它仅适用于文本编辑器:

bool isCodeWindow = IsCommandAvailable("Edit.GoTo");

private bool IsCommandAvailable(string commandName)
{
    EnvDTE80.Commands2 commands = dte.Commands as EnvDTE80.Commands2;
    if (commands == null)
        return false;

    EnvDTE.Command command = commands.Item(commandName, 0);
    if (command == null)
        return false;

    return command.IsAvailable;
}

答案 1 :(得分:0)

您可以查看该文档是否为' TextDocument'

bool isCodeWindow = dte.CurrentDocument.Object() is EnvDTE.TextDocument;