确定Visual Studio中打开选项卡的顺序(使用EnvDTE扩展)

时间:2016-01-14 15:50:13

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

我正在开发一个Visual Studio扩展,我需要按照它们在屏幕上显示的确切顺序获取当前打开的文档(选项卡)列表。

例如,this应返回:Program.cs,Class1.cs,Class2.cs,Class3.cs

EnvDTE.Documents属性确实为我提供了一个列表,但不是按照我需要的顺序:

public List<Window> GetOpenTabsOrdered(DTE2 vsInstance)
{
   var openDocuments = vsInstance.Documents.Cast<Document>();
   return openDocuments.Select(x => x.ActiveWindow).ToList(); //wrong order
}

Window.Left属性(MSDN:获取或设置对象的内部左边缘与其容器的左边缘之间的距离)在确定正确的顺序方面也不是特别有用。

我尝试订阅不同的活动(例如DTE2.Events.WindowEvents.WindowMoved),但这并没有把我带到任何地方。

1 个答案:

答案 0 :(得分:0)

自动化模型(EnvDTE)不会向您提供该信息,您需要使用一些Visual Studio SDK服务,例如IEnumWindowFrames Interface。对于每个IVsWindowFrame,您可以使用GetFramePos方法或GetProperty方法。例如,您拥有VSFPROPID_MDIContainerID属性来获取组ID,VSFPROPID_IsPinned和VSFPROPID_IsProvisional,以获取它是固定的,临时的等等。