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

本文关键字:选项 窗口 链接 工具 扩展 Studio 何找 Visual | 更新日期: 2023-09-27 18:10:50

在Visual Studio中,您可以将工具窗口分组在一起,并通过它们的选项卡来识别它们。例如,你可能把"输出"、"错误列表"answers"查找结果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
    }

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

您可以通过初始遍历所有EnvDTE窗口(Window/Window2),获得相应的IVsWindowFrame s,并订阅帧通知(IVsWindowFrameNotify)来发现何时切换到选项卡,以便在选项卡更改时获得通知。但是这仍然不能帮助标签组("链接的框架"),更不用说保持你的窗口框架侦听器是最新的(当标签打开/关闭等)。

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