IShellLinkA::Resolve 方法 (shobjidl_core.h)

尝试查找 Shell 链接的目标,即使它已被移动或重命名。

语法

HRESULT Resolve(
  HWND  hwnd,
  DWORD fFlags
);

参数

hwnd

类型:HWND

Shell 将用作对话框的父窗口的句柄。 如果 Shell 在解析 Shell 链接时需要提示用户提供详细信息,则 Shell 会显示对话框。

fFlags

类型:DWORD

操作标志。 此参数可以是以下值的组合。

SLR_NO_UI (0x0001)

0x0001。 如果无法解析链接,则不显示对话框。 设置 SLR_NO_UI 时, fFlags 的高序字可以设置为超时值,该值指定解析链接所花费的最大时间。 如果在超时持续时间内无法解析链接,则函数将返回 。 如果高阶字设置为零,则超时持续时间将设置为默认值 3,000 毫秒 (3 秒) 。 若要指定值,请将 fFlags 的高字设置为所需的超时持续时间(以毫秒为单位)。

SLR_ANY_MATCH (0x0002)

0x0002。 未使用。

SLR_UPDATE (0x0004)

0x0004。 如果链接对象已更改,请更新其路径和标识符列表。 如果设置了 SLR_UPDATE ,则无需调用 IPersistFile::IsDirty 来确定链接对象是否已更改。

SLR_NOUPDATE (0x0008)

0x0008。 不要更新链接信息。

SLR_NOSEARCH (0x0010)

0x0010。 不要执行搜索启发。

SLR_NOTRACK (0x0020)

0x0020。 请勿使用分布式链接跟踪。

SLR_NOLINKINFO (0x0040)

0x0040。 禁用分布式链接跟踪。 默认情况下,分布式链接跟踪基于卷名称跨多个设备跟踪可移动媒体。 它还使用 UNC 路径跟踪其驱动器号已更改的远程文件系统。 设置 SLR_NOLINKINFO 将禁用这两种类型的跟踪。

SLR_INVOKE_MSI (0x0080)

0x0080。 调用 Windows 安装程序。

SLR_NO_UI_WITH_MSG_PUMP (0x0101)

0x0101。 Windows XP 及更高版本

SLR_OFFER_DELETE_WITHOUT_FILE (0x0200)

0x0200。 Windows 7 及更高版本。 在此方法无法解析快捷方式时提供删除快捷方式的选项,即使快捷方式不是文件的快捷方式也是如此。

SLR_KNOWNFOLDER (0x0400)

0x0400。 Windows 7 及更高版本。 如果目标为已知文件夹且已重定向已知文件夹,则报告为脏。 仅当原始目标路径是文件系统路径或 ID 列表,而不是别名的已知文件夹 ID 列表时,这才有效。

SLR_MACHINE_IN_LOCAL_TARGET (0x0800)

0x0800。 Windows 7 及更高版本。 解析 UNC 目标中指向本地计算机的计算机名称。 此值与 SLDF_KEEP_LOCAL_IDLIST_FOR_UNC_TARGET 一起使用。

SLR_UPDATE_MACHINE_AND_SID (0x1000)

0x1000。 Windows 7 及更高版本。 如有必要,请更新计算机 GUID 和用户 SID。

返回值

类型: HRESULT

如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

创建链接后,目标的名称或位置可能会更改。 IShellLink::Resolve 方法首先检索与链接关联的路径。 如果对象不再存在或已重命名, Resolve 将尝试查找它。 如果成功,并且满足以下条件,则会更新从中加载链接对象的文件,以反映链接对象的新状态。

  • 设置 SLR_UPDATE 标志。
  • 已移动或重命名目标,更新 Shell 链接对象的内部状态以引用新目标。
  • Shell 链接对象是通过 IPersistFile 从文件加载的。
客户端还可以调用 IPersistFile::IsDirty 方法,以确定链接对象是否已更改以及文件是否需要更新。

Resolve 有两种方法用于查找目标对象。 第一个是分布式链接跟踪服务。 如果服务可用,它可以在 NTFS 版本 5.0 卷上找到一个对象,该对象已移动到该卷上的另一个位置。 它还可以找到已移动到另一个 NTFS 版本 5.0 卷的对象,包括其他计算机上的卷。 若要禁止使用此服务,请设置 SLR_NOTRACK 标志。

如果分布式链接跟踪不可用或找不到链接对象, Resolve 将尝试使用搜索启发法查找它。 它首先在对象的上一个已知目录中查找具有不同名称但具有相同属性和文件创建时间的对象。 接下来,它以递归方式搜索对象最后一个已知目录附近的子目录。 它查找具有相同名称或创建时间的对象。 最后, Resolve 在桌面和其他本地卷上查找匹配的对象。 若要禁止使用搜索启发法,请设置 SLR_NOSEARCH 标志。

如果两种方法都失败,系统将显示一个对话框,提示用户输入位置。 若要禁止显示对话框,请设置 SLR_NO_UI 标志。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 shobjidl_core.h
DLL Shell32.dll (4.0 或更高版本)