SCOPEDATAITEM 结构 (mmc.h)

SCOPEDATAITEM 结构指定要插入到作用域窗格中的项。

语法

typedef struct _SCOPEDATAITEM {
  DWORD      mask;
  LPOLESTR   displayname;
  int        nImage;
  int        nOpenImage;
  UINT       nState;
  int        cChildren;
  LPARAM     lParam;
  HSCOPEITEM relativeID;
  HSCOPEITEM ID;
} SCOPEDATAITEM;

成员

mask

一个 值,该值指定标志数组,这些标志指示结构的哪些成员包含有效数据。 在 IConsoleNameSpace2::GetItem 方法中使用此结构时,它指示要检索的项属性。 此成员可以是以下值之一。

SDI_STR (0x00002)

结构的 displayname 成员有效。 仅当为 displayname 成员指定值时,才支持SDI_STR。 MMC 不存储 displayname 成员的值,并且无法通过调用 IConsoleNamespace2::GetItem 方法检索该值。

SDI_IMAGE (0x00004)

结构的 nImage 成员有效或必须填充。

SDI_OPENIMAGE (0x00008)

结构的 nOpenImage 成员有效或必须填充。

SDI_STATE (0x00010)

结构的 nState 成员有效或必须填充。

SDI_PARAM (0x00020)

结构的 lParam 成员有效或必须填充。

SDI_CHILDREN (0x00040)

结构的 cChildren 成员有效或必须填充。

SDI_PARENT (0x00000000)

仅在将项插入作用域窗格中时使用。 结构的 relativeID 成员是父级的 HSCOPEITEM 。 该项将作为 relativeID 引用的项的最后一个子项插入。

SDI_PREVIOUS (0x10000000)

仅在将项插入作用域窗格中时使用。 结构的 relativeID 成员是上一个同级对象的 HSCOPEITEM

SDI_NEXT (0x20000000)

仅在将项插入作用域窗格中时使用。 结构的 relativeID 成员是下一个同级对象的 HSCOPEITEM

SDI_FIRST (0x08000000)

仅在将项插入作用域窗格中时使用。 结构的 relativeID 成员是父级的 HSCOPEITEM 。 该项作为 relativeID 引用的项的第一个子项插入。

displayname

MMC_CALLBACK 值或指向以 null 结尾的字符串的指针,具体取决于结构的使用方式。

  • 使用 IConsoleNameSpace2::InsertItem 插入项时,此成员必须设置为 MMC_CALLBACK
  • 使用 IConsoleNameSpace2::SetItem 更改管理单元插入的项的名称时,必须将此成员设置为 MMC_CALLBACK
  • 当静态节点的名称 (控制台插入的项) 发生更改时,可以将此成员设置为 MMC_CALLBACK,也可以是指向包含项文本的以 null 结尾的字符串的指针。
请注意,管理单元可以使用 MMC_TEXTCALLBACK 而不是 MMC_CALLBACKMMC_TEXTCALLBACK值是类型正确的 (无需强制转换) 版本的MMC_CALLBACK

MMC 版本 1.2 中引入了MMC_TEXTCALLBACK。

nImage

当项处于未选择状态时,映像列表中的虚拟映像索引。 请注意,虚拟映像索引在内部映射到实际索引。 还可以将此成员指定为回调项: MMC_CALLBACKMMC_IMAGECALLBACKMMC_IMAGECALLBACK是类型正确的 (无需强制转换) 版本的 MMC_CALLBACK

MMC 版本 1.2 中引入了MMC_IMAGECALLBACK。

nOpenImage

当项处于选定状态时,映像列表中的虚拟映像索引。 请注意,虚拟映像索引在内部映射到实际索引。 该项目类似于 Microsoft Windows 资源管理器中的文件夹。 图标用于打开的文件夹。

nState

一个 值,该值指定项的状态掩码。 对于 IConsoleNameSpace2::GetItem,如果项至少展开一次,则此成员返回 MMC_SCOPE_ITEM_STATE_EXPANDEDONCE ;如果项尚未展开,则返回 0 (零) 。

对于 IConsoleNameSpace2::InsertItemIConsoleNameSpace2::SetItem,将忽略此成员。

cChildren

一个 指定枚举项数的 值。

当管理单元插入范围项时,它应将 cChildren 字段设置为 0 (零) ,并设置 SDI_CHILDREN 标志(如果满足以下两个条件):

  • 管理单元没有任何要添加的项下的子项。
  • 管理单元不会为此项动态启用任何命名空间扩展管理单元。
否则,在插入范围项时, cChildren 字段应设置为 1 (一个) ,或者根本不设置。

如果条件在以后更改,管理单元可以使用 IConsoleNameSpace2::SetItem 修改 cChildren 字段。

如果确定子级数需要很长时间,则管理单元应在插入时使用最佳猜测,并在另一个线程上进行实际确定,以便 MMC 用户界面不会被锁定。如有必要,可以使用 IConsoleNameSpace2::SetItem 更正设置。

当 MMC 检测到 cChildren 计数为 0 (零) 的范围项时,它会检查用户或 IRequiredExtensions 接口为该项静态启用的命名空间扩展。 如果未启用任何项,则会从项中删除加号 (+) 。

展开项后,加号的状态由实际存在的子项数决定。

lParam

一个 值,该值指定要与项关联的用户提供的 32 位值。 此项也称为 Cookie,是作为第一个参数传递给 IComponentData::QueryDataObject 的值。

relativeID

控制台提供的唯一项标识符。 项插入到相对于此成员指定的项的位置。 掩码设置确定相对位置。

若要确定 如何解释 relativeID ,请指定以下常量之一作为 掩码 成员。

SDI_PARENT

relativeID 是父级的 HSCOPEITEM 。 该项作为父项的最后一个子项插入。 SDI_PARENT 的值指示它是无操作,因为默认情况下,父项 ID 为 relativeID

SDI_PREVIOUS

relativeID 是上一个同级的 HSCOPEITEM

SDI_NEXT

relativeID 是下一个同级对象的 HSCOPEITEM

SDI_FIRST

SDI_PARENT 相同,只不过该项作为第一个子项插入。

ID

一个 值,该值指定范围项的控制台提供的唯一标识符。 此值用于标识对某些 IConsole2 和 IConsoleNameSpace2 接口方法的调用的范围窗格中的项。

在管理单元使用 IConsoleNameSpace2::InsertItem) 将项成功插入 (范围窗格中后,SCOPEDATAITEM 结构的 ID 成员包含新插入的项的 HSCOPEITEM 句柄。 此句柄是范围项的唯一标识符。

对于静态节点,MMC 将项插入管理单元的范围窗格中。 然后,MMC 将静态节点的 HSCOPEITEM 作为MMCN_EXPAND通知中的参数传递给管理单元。

请注意,管理单元应存储每个插入项的 HSCOPEITEM,并在稍后使用 IConsole2 和 IConsoleNameSpace2 接口的方法操作该项。

注解

将项作为静态节点的同级插入是无效的。 如果管理单元将 relativeID 成员设置为静态节点的 HSCOPEITEM ,设置 SDI_PREVIOUSSDI_NEXT 标志,然后调用 IConsoleNameSpace2::InsertItem,MMC 将返回 E_INVALIDARG

要求

   
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
标头 mmc.h

另请参阅

IComponentData

IComponentData::GetDisplayInfo

IConsoleNameSpace2::GetItem

IConsoleNameSpace2::InsertItem

IConsoleNameSpace2::SetItem