在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
}
答案 0 :(得分:1)
通过最初遍历所有EnvDTE窗口(Window
/ Window2
),获取相应的IVsWindowFrame
并订阅帧通知,您可以找到切换到标签的时间(IVsWindowFrameNotify
),以便在标签更改时收到通知。但这仍然无法帮助制表组(&#34;链接框架&#34;),更不用说让窗框监听器保持最新状态(当标签打开/关闭等时)。< / p>
我能想到的唯一可靠的事情是将设置导出到XML(VS这样做是为了保持布局从运行到运行),操纵XML,然后再导入它。我不确定这会有多快,但值得一试。您可以在.vssettings文件中搜索Environment_WindowLayout
以查看XML示例。实际上导出/导入此信息很棘手 - 您可以试试EnvDTE.Properties
集合,也许IVsUIShellDocumentWindowMgr(example)会派上用场,但也许不会。