IVsExpansionEnumeration 接口

表示代码段列表特定的语言服务。

命名空间:  Microsoft.VisualStudio.TextManager.Interop
程序集:  Microsoft.VisualStudio.TextManager.Interop.8.0(在 Microsoft.VisualStudio.TextManager.Interop.8.0.dll 中)

语法

声明
<GuidAttribute("341E80BE-5B26-4DEE-A111-32A8373D1B51")> _
<InterfaceTypeAttribute()> _
Public Interface IVsExpansionEnumeration
[GuidAttribute("341E80BE-5B26-4DEE-A111-32A8373D1B51")]
[InterfaceTypeAttribute()]
public interface IVsExpansionEnumeration
[GuidAttribute(L"341E80BE-5B26-4DEE-A111-32A8373D1B51")]
[InterfaceTypeAttribute()]
public interface class IVsExpansionEnumeration
[<GuidAttribute("341E80BE-5B26-4DEE-A111-32A8373D1B51")>]
[<InterfaceTypeAttribute()>]
type IVsExpansionEnumeration =  interface end
public interface IVsExpansionEnumeration

IVsExpansionEnumeration 类型公开以下成员。

方法

  名称 说明
公共方法 GetCount 返回此枚举表示对象的数量。
公共方法 Next 返回指定数目的对象枚举中的。
公共方法 Reset 重置枚举到开头。

页首

备注

代码段是使用代码段管理器,可插入代码段。 每个代码段与特定代码的语言。 此接口提供检查信息与特定代码的语言的代码段。

对实现者的说明

此接口由扩展管理器实现,由 IVsExpansionManager 接口表示。 Visual Studio 通常实现扩展管理器。

对调用者的说明

若要获取此接口,调用 IVsExpansionManager 接口的 EnumerateExpansions 方法。 请参见本主题中的示例。

示例

此示例演示检索数组 VsExpansion 结构每个描述指定的语言的代码段的方法。

using System;
using System.Collections;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.TextManager.Interop;
using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;

namespace MyPackage
{
    public class MyReadSnippets
    {
        private IOleServiceProvider serviceProvider;

        public MyReadSnippets(IOleServiceProvider serviceProvider)
        {
            this.serviceProvider = serviceProvider;
        }


        private object GetService(Guid serviceGuid, Guid interfaceGuid)
        {
            IntPtr pUnknown = IntPtr.Zero;
            object unknown = null;
            int hr = this.serviceProvider.QueryService(ref serviceGuid,
                                    ref interfaceGuid,
                                    out pUnknown);
            if (ErrorHandler.Succeeded(hr))
            {
                unknown = Marshal.GetObjectForIUnknown(pUnknown);
            }
            return unknown;
        }


        private void GetSnippets(Guid languageGuid,ref ArrayList expansionsList)
        {
            IVsTextManager textManager;
            textmanager = (IVsTextManager)this.GetService(typeof(SVsTextManager).GUID,
                                                          typeof(IVsTextManager).GUID);
            if (textManager != null)
            {
                IVsTextManager2 textManager2 = (IVsTextManager2)textManager;
                if (textManager2 != null)
                {
                    IVsExpansionManager expansionManager = null;
                    textManager2.GetExpansionManager(out expansionManager);
                    if (expansionManager != null)
                    {
                        // Tell the environment to fetch all of our snippets.
                        IVsExpansionEnumeration expansionEnumerator = null;
                        expansionManager.EnumerateExpansions(languageGuid,
                                                             0,     // return all info
                                                             null,  // return all types
                                                             0,     // return all types
                                                             0,     // do not return NULL type
                                                             0,     // do not return duplicates
                                                             out expansionEnumerator);
                        if (expansionEnumerator != null)
                        {
                            // Cache our expansions in an array of
                            // VSExpansion structures.
                            uint count   = 0;
                            uint fetched = 0;
                            VsExpansion expansionInfo = new VsExpansion();
                            IntPtr[] pExpansionInfo   = new IntPtr[1];
                            // Allocate enough memory for one VSExpansion structure.
                            // This memory is filled in by the Next method.
                            pExpansionInfo[0] = Marshal.AllocCoTaskMem(Marshal.SizeOf(expansionInfo));

                            expansionEnumerator.GetCount(out count);
                            for (uint i = 0; i < count; i++)
                            {
                                expansionEnumerator.Next(1, pExpansionInfo, out fetched);
                                if (fetched > 0)
                                {
                                    // Convert the returned blob of data into a
                                    // structure that can be read in managed code.
                                    expansionInfo = (VsExpansion)
                                                    Marshal.PtrToStructure(pExpansionInfo[0],
                                                                           typeof(VsExpansion));

                                    if (!String.IsNullOrEmpty(expansionInfo.shortcut))
                                    {
                                        expansionsList.Add(expansionInfo);
                                    }
                                }
                            }
                            Marshal.FreeCoTaskMem(pExpansionInfo[0]);
                        }
                    }
                }
            }
        }
    }
}

请参阅

参考

Microsoft.VisualStudio.TextManager.Interop 命名空间