VSIX扩展 - 关闭似乎没有vsWindowKind常量的窗口

时间:2017-02-12 08:28:58

标签: c# guid vsix visual-studio-2017

在我的Visual Studio扩展中,我可以通过执行以下操作关闭IDE中的窗口:

var dte = (DTE)GetService(typeof(EnvDTE.DTE));
dte.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Close();

(关闭输出窗口)

有些窗户似乎没有" vsWindowKind"常量(所有这些都列在这里:https://msdn.microsoft.com/en-us/library/envdte.constants.aspx) - 如果你知道GUID,你仍然可以关闭它们。例如:

dte.Windows.Item("{131369F2-062D-44A2-8671-91FF31EFB4F4}").Close();

关闭了团队资源管理器窗口(我从另一个SO问题中找到了GUID:How do I run a TFS Work Item Query with Visual Studio Macros

我的问题是,在哪里可以找到IDE窗口GUID的完整列表?

编辑:所以对于VS2015及以下版本,我可以通过执行以下操作找到注册表中的工具窗口列表:

var keyname = @"Software\Microsoft\VisualStudio\14.0_Config\ToolWindows";
using (var key = Registry.CurrentUser.OpenSubKey(keyname))
{
    foreach (var subkey in key.GetSubKeyNames())
    {
        var fullkey = @"HKEY_CURRENT_USER\" + keyname + "\\" + subkey;
        var name = (string)Registry.GetValue(fullkey, "Name", "");
        if (!string.IsNullOrWhiteSpace(name))
        {
                Console.WriteLine($"{subkey} {name}");
        }
    }
}

但是,VS2017没有这样的条目(可能是因为它允许您在同一台PC上安装多个副本)。

无论如何,文件清单仍然缺失!

2 个答案:

答案 0 :(得分:0)

这是你要找的吗? vsWindowType枚举文档。

https://msdn.microsoft.com/en-us/library/envdte.vswindowtype.aspx

答案 1 :(得分:0)

您可以使用 DTE.ActiveWindow.ObjectKind 获取当前窗口GUID。这样您就可以自己构建IDE窗口GUID列表。