Método IShellLinkA::Resolve (shobjidl_core.h)

Intenta encontrar el destino de un vínculo de Shell, incluso si se ha movido o cambiado el nombre.

Sintaxis

HRESULT Resolve(
  HWND  hwnd,
  DWORD fFlags
);

Parámetros

hwnd

Tipo: HWND

Identificador de la ventana que el Shell usará como elemento primario para un cuadro de diálogo. El shell muestra el cuadro de diálogo si necesita solicitar al usuario más información al resolver un vínculo de Shell.

fFlags

Tipo: DWORD

Marcas de acción. Este parámetro puede ser una combinación de los valores siguientes.

SLR_NO_UI (0x0001)

0x0001. No muestre un cuadro de diálogo si no se puede resolver el vínculo. Cuando se establece SLR_NO_UI , la palabra de orden superior de fFlags se puede establecer en un valor de tiempo de espera que especifique la cantidad máxima de tiempo que se va a dedicar a resolver el vínculo. La función devuelve si el vínculo no se puede resolver durante el tiempo de espera. Si la palabra de orden superior se establece en cero, la duración del tiempo de espera se establecerá en el valor predeterminado de 3000 milisegundos (3 segundos). Para especificar un valor, establezca la palabra alta de fFlags en la duración de tiempo de espera deseada, en milisegundos.

SLR_ANY_MATCH (0x0002)

0x0002. No se usa.

SLR_UPDATE (0x0004)

0x0004. Si el objeto de vínculo ha cambiado, actualice su ruta de acceso y la lista de identificadores. Si se establece SLR_UPDATE , no es necesario llamar a IPersistFile::IsDirty para determinar si el objeto de vínculo ha cambiado.

SLR_NOUPDATE (0x0008)

0x0008. No actualice la información del vínculo.

SLR_NOSEARCH (0x0010)

0x0010. No ejecute la heurística de búsqueda.

SLR_NOTRACK (0x0020)

0x0020. No use el seguimiento de vínculos distribuidos.

SLR_NOLINKINFO (0x0040)

0x0040. Deshabilite el seguimiento de vínculos distribuidos. De forma predeterminada, el seguimiento de vínculos distribuidos realiza un seguimiento de los medios extraíbles en varios dispositivos en función del nombre del volumen. También usa la ruta de acceso UNC para realizar un seguimiento de los sistemas de archivos remotos cuya letra de unidad ha cambiado. Establecer SLR_NOLINKINFO deshabilita ambos tipos de seguimiento.

SLR_INVOKE_MSI (0x0080)

0x0080. Llame a Windows Installer.

SLR_NO_UI_WITH_MSG_PUMP (0x0101)

0x0101. Windows XP y versiones posteriores.

SLR_OFFER_DELETE_WITHOUT_FILE (0x0200)

0x0200. Windows 7 y versiones posteriores. Ofrezca la opción de eliminar el acceso directo cuando este método no pueda resolverlo, incluso si el acceso directo no es un acceso directo a un archivo.

SLR_KNOWNFOLDER (0x0400)

0x0400. Windows 7 y versiones posteriores. Informe como sucio si el destino es una carpeta conocida y se redirigió a la carpeta conocida. Esto solo funciona si la ruta de acceso de destino original era una ruta de acceso del sistema de archivos o una lista de identificadores de la carpeta conocida y no una lista de identificadores de carpeta conocida con alias.

SLR_MACHINE_IN_LOCAL_TARGET (0x0800)

0x0800. Windows 7 y versiones posteriores. Resuelva el nombre del equipo en destinos UNC que apunten a un equipo local. Este valor se usa con SLDF_KEEP_LOCAL_IDLIST_FOR_UNC_TARGET.

SLR_UPDATE_MACHINE_AND_SID (0x1000)

0x1000. Windows 7 y versiones posteriores. Actualice el GUID del equipo y el SID de usuario si es necesario.

Valor devuelto

Tipo: HRESULT

Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

Después de la creación del vínculo, el nombre o la ubicación del destino pueden cambiar. El método IShellLink::Resolve recupera primero la ruta de acceso asociada al vínculo. Si el objeto ya no está ahí o se ha cambiado el nombre, Resolve intentará encontrarlo. Si se ejecuta correctamente y se cumplen las condiciones siguientes, el archivo desde el que se cargó el objeto de vínculo se actualizará para reflejar el nuevo estado del objeto de vínculo.

  • Se establece la marca SLR_UPDATE .
  • Se ha movido o cambiado el nombre del destino, actualizando el estado interno del objeto de vínculo shell para hacer referencia al nuevo destino.
  • El objeto de vínculo shell se cargó desde un archivo a través de IPersistFile.
El cliente también puede llamar al método IPersistFile::IsDirty para determinar si el objeto de vínculo ha cambiado y el archivo debe actualizarse.

La resolución tiene dos enfoques para buscar objetos de destino. La primera es el servicio de seguimiento de vínculos distribuidos. Si el servicio está disponible, puede encontrar un objeto que estaba en un volumen NTFS versión 5.0 y se movió a otra ubicación de ese volumen. También puede encontrar un objeto que se movió a otro volumen NTFS versión 5.0, incluidos los volúmenes de otros equipos. Para suprimir el uso de este servicio, establezca la marca SLR_NOTRACK .

Si el seguimiento de vínculos distribuidos no está disponible o no encuentra el objeto de vínculo, Resolve intenta encontrarlo con heurística de búsqueda. Primero busca en el último directorio conocido del objeto un objeto con un nombre diferente, pero los mismos atributos y hora de creación de archivos. A continuación, busca de forma recursiva subdirectorios en las proximidades del último directorio conocido del objeto. Busca un objeto con el mismo nombre o hora de creación. Por último, Resolve busca un objeto coincidente en el escritorio y en otros volúmenes locales. Para suprimir el uso de la heurística de búsqueda, establezca la marca SLR_NOSEARCH .

Si se produce un error en ambos enfoques, el sistema mostrará un cuadro de diálogo que solicita al usuario una ubicación. Para suprimir el cuadro de diálogo, establezca la marca SLR_NO_UI .

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado shobjidl_core.h
Archivo DLL Shell32.dll (versión 4.0 o posterior)