Метод IShellLinkA::Resolve (shobjidl_core.h)

Пытается найти целевой объект ссылки оболочки, даже если она была перемещена или переименована.

Синтаксис

HRESULT Resolve(
  HWND  hwnd,
  DWORD fFlags
);

Параметры

hwnd

Тип: HWND

Дескриптор окна, которое оболочка будет использовать в качестве родительского для диалогового окна. В оболочке отображается диалоговое окно, если при разрешении ссылки оболочки требуется запрашивать у пользователя дополнительные сведения.

fFlags

Тип: DWORD

Флаги действий. Этот параметр может быть сочетанием следующих значений.

SLR_NO_UI (0x0001)

0x0001. Не отображайте диалоговое окно, если не удается разрешить ссылку. Если задано SLR_NO_UI , для слова fFlags высокого порядка можно задать значение времени ожидания, указывающее максимальное время, затраченное на разрешение связи. Функция возвращает значение , если связь не может быть разрешена в течение времени ожидания. Если для слова высокого порядка задано нулевое значение, время ожидания будет иметь значение по умолчанию 3000 миллисекунд (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 и более поздние версии. Сообщите как грязное, является ли целевой папкой известная папка, а известная папка была перенаправлена. Это работает только в том случае, если исходный целевой путь был путем к файловой системе или списком идентификаторов, а не списком идентификаторов известных папок с псевдонимом.

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 компьютера и идентификатор безопасности пользователя.

Возвращаемое значение

Тип: HRESULT

Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

После создания ссылки имя или расположение целевого объекта может измениться. Метод IShellLink::Resolve сначала извлекает путь, связанный со ссылкой. Если объект больше не существует или был переименован, resolve попытается найти его. В случае успешного выполнения и выполнения следующих условий файл, из которых был загружен объект ссылки, будет обновлен с учетом нового состояния объекта ссылки.

  • Установлен флаг SLR_UPDATE .
  • Целевой объект был перемещен или переименован, что позволяет обновить внутреннее состояние объекта ссылки оболочки для ссылки на новый целевой объект.
  • Объект ссылки оболочки был загружен из файла через IPersistFile.
Клиент также может вызвать метод IPersistFile::IsDirty , чтобы определить, изменился ли объект ссылки и требуется ли обновить файл.

Решение Resolve имеет два подхода к поиску целевых объектов. Во-первых, служба отслеживания распределенных ссылок. Если служба доступна, она может найти объект, который находился на томе NTFS версии 5.0 и был перемещен в другое расположение на этом томе. Он также может найти объект, который был перемещен на другой том NTFS версии 5.0, включая тома на других компьютерах. Чтобы отключить использование этой службы, установите флаг SLR_NOTRACK .

Если распределенное отслеживание ссылок недоступно или не удается найти объект ссылки, то разрешение пытается найти его с помощью эвристики поиска. Сначала он ищет в последнем известном каталоге объекта объект с другим именем, но теми же атрибутами и временем создания файла. Затем он рекурсивно выполняет поиск подкаталогов в непосредственной близости от последнего известного каталога объекта. Он ищет объект с тем же именем или временем создания. Наконец, Resolve ищет соответствующий объект на рабочем столе и других локальных томах. Чтобы запретить использование эвристики поиска, установите флаг SLR_NOSEARCH .

Если оба подхода завершаются ошибкой, система отобразит диалоговое окно с запросом у пользователя ввести расположение. Чтобы отключить диалоговое окно, установите флаг SLR_NO_UI .

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header shobjidl_core.h
DLL Shell32.dll (версия 4.0 или более поздняя)