Visual Studio扩展:如何在选项卡链接组中找到前景中的哪个工具窗口?

时间:2014-07-01 06:07:03

标签: c# visual-studio visual-studio-2013 vsx

在Visual Studio中,您可以将工具窗口组合在一起,并通过其选项卡进行标识。例如,您可能有"输出","错误列表"和"查找结果1"工具窗口组合在文档下方的面板中。当你点击"输出"选项卡,它来到前台并抓住焦点。如果单击返回文档窗口,则输出"输出"标签仍位于顶部(在前景中)。

如何以编程方式(在VS扩展中)确定(1)哪个窗口位于同一选项卡组中,以及(2)当给定组中的一个窗口时,哪个窗口位于前台?

这是一个枚举所有窗口的代码示例:

    var dte = (EnvDTE.DTE)GetService(typeof(EnvDTE.DTE));
    var windowOutput = dte.Windows.Item(EnvDTE.Constants.vsWindowKindOutput);
    foreach (EnvDTE.Window w in windowOutput.LinkedWindowFrame.Collection)
    {
        //gives every window, not just those grouped together
    }

1 个答案:

答案 0 :(得分:1)

通过最初遍历所有EnvDTE窗口(Window / Window2),获取相应的IVsWindowFrame并订阅帧通知,您可以找到切换到标签的时间(IVsWindowFrameNotify),以便在标签更改时收到通知。但这仍然无法帮助制表组(&#34;链接框架&#34;),更不用说让窗框监听器保持最新状态(当标签打开/关闭等时)。< / p>

我能想到的唯一可靠的事情是将设置导出到XML(VS这样做是为了保持布局从运行到运行),操纵XML,然后再导入它。我不确定这会有多快,但值得一试。您可以在.vssettings文件中搜索Environment_WindowLayout以查看XML示例。实际上导出/导入此信息很棘手 - 您可以试试EnvDTE.Properties集合,也许IVsUIShellDocumentWindowMgr(example)会派上用场,但也许不会。