我正在开发一个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),但这并没有把我带到任何地方。
答案 0 :(得分:0)
自动化模型(EnvDTE)不会向您提供该信息,您需要使用一些Visual Studio SDK服务,例如IEnumWindowFrames Interface。对于每个IVsWindowFrame,您可以使用GetFramePos方法或GetProperty方法。例如,您拥有VSFPROPID_MDIContainerID属性来获取组ID,VSFPROPID_IsPinned和VSFPROPID_IsProvisional,以获取它是固定的,临时的等等。