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

Tente de trouver la cible d’un lien Shell, même s’il a été déplacé ou renommé.

Syntaxe

HRESULT Resolve(
  HWND  hwnd,
  DWORD fFlags
);

Paramètres

hwnd

Type : HWND

Handle de la fenêtre que l’interpréteur de commandes utilisera comme parent pour une boîte de dialogue. L’interpréteur de commandes affiche la boîte de dialogue s’il doit demander à l’utilisateur d’obtenir plus d’informations lors de la résolution d’un lien Shell.

fFlags

Type : DWORD

Indicateurs d’action. Ce paramètre peut être une combinaison des valeurs suivantes.

SLR_NO_UI (0x0001)

0x0001. N’affichez pas de boîte de dialogue si le lien ne peut pas être résolu. Lorsque SLR_NO_UI est défini, le mot d’ordre élevé de fFlags peut être défini sur une valeur de délai d’attente qui spécifie la durée maximale à passer à la résolution du lien. La fonction retourne si le lien ne peut pas être résolu dans la durée du délai d’attente. Si le mot d’ordre élevé est défini sur zéro, la durée du délai d’attente est définie sur la valeur par défaut de 3 000 millisecondes (3 secondes). Pour spécifier une valeur, définissez le mot élevé de fFlags sur la durée de délai d’attente souhaitée, en millisecondes.

SLR_ANY_MATCH (0x0002)

0x0002. Non utilisé.

SLR_UPDATE (0x0004)

0x0004. Si l’objet link a changé, mettez à jour son chemin d’accès et sa liste d’identificateurs. Si SLR_UPDATE est défini, vous n’avez pas besoin d’appeler IPersistFile ::IsDirty pour déterminer si l’objet link a changé.

SLR_NOUPDATE (0x0008)

0x0008. Ne mettez pas à jour les informations de lien.

SLR_NOSEARCH (0x0010)

0x0010. N’exécutez pas l’heuristique de recherche.

SLR_NOTRACK (0x0020)

0x0020. N’utilisez pas le suivi des liens distribués.

SLR_NOLINKINFO (0x0040)

0x0040. Désactivez le suivi des liens distribués. Par défaut, le suivi des liens distribués effectue le suivi des médias amovibles sur plusieurs appareils en fonction du nom du volume. Il utilise également le chemin UNC pour suivre les systèmes de fichiers distants dont la lettre de lecteur a été modifiée. La définition SLR_NOLINKINFO désactive les deux types de suivi.

SLR_INVOKE_MSI (0x0080)

0x0080. Appelez le programme d’installation Windows.

SLR_NO_UI_WITH_MSG_PUMP (0x0101)

0x0101. Windows XP et versions ultérieures.

SLR_OFFER_DELETE_WITHOUT_FILE (0x0200)

0x0200. Windows 7 et versions ultérieures. Proposez l’option de supprimer le raccourci lorsque cette méthode ne parvient pas à le résoudre, même si le raccourci n’est pas un raccourci vers un fichier.

SLR_KNOWNFOLDER (0x0400)

0x0400. Windows 7 et versions ultérieures. Signalez comme sale si la cible est un dossier connu et que le dossier connu a été redirigé. Cela fonctionne uniquement si le chemin d’accès cible d’origine était un chemin d’accès du système de fichiers ou une liste d’ID d’ID de dossier connu et non une liste d’ID de dossier connu avec alias.

SLR_MACHINE_IN_LOCAL_TARGET (0x0800)

0x0800. Windows 7 et versions ultérieures. Résolvez le nom de l’ordinateur dans les cibles UNC qui pointent vers un ordinateur local. Cette valeur est utilisée avec SLDF_KEEP_LOCAL_IDLIST_FOR_UNC_TARGET.

SLR_UPDATE_MACHINE_AND_SID (0x1000)

0x1000. Windows 7 et versions ultérieures. Mettez à jour le GUID de l’ordinateur et le SID utilisateur si nécessaire.

Valeur retournée

Type : HRESULT

Si cette méthode réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

Après la création du lien, le nom ou l’emplacement de la cible peut changer. La méthode IShellLink ::Resolve récupère d’abord le chemin d’accès associé au lien. Si l’objet n’y est plus ou a été renommé, Resolve tente de le trouver. Si cela réussit et que les conditions suivantes sont remplies, le fichier à partir duquel l’objet link a été chargé est mis à jour pour refléter le nouvel état de l’objet link.

  • L’indicateur SLR_UPDATE est défini.
  • La cible a été déplacée ou renommée, ce qui met à jour l’état interne de l’objet de lien Shell pour faire référence à la nouvelle cible.
  • L’objet de lien Shell a été chargé à partir d’un fichier via IPersistFile.
Le client peut également appeler la méthode IPersistFile ::IsDirty pour déterminer si l’objet link a changé et si le fichier doit être mis à jour.

Resolve a deux approches pour rechercher des objets cibles. La première est le service de suivi des liens distribués. Si le service est disponible, il peut trouver un objet qui se trouvait sur un volume NTFS version 5.0 et qui a été déplacé vers un autre emplacement sur ce volume. Il peut également trouver un objet qui a été déplacé vers un autre volume NTFS version 5.0, y compris des volumes sur d’autres ordinateurs. Pour supprimer l’utilisation de ce service, définissez l’indicateur SLR_NOTRACK .

Si le suivi des liens distribués n’est pas disponible ou ne parvient pas à trouver l’objet de lien, résolvez les tentatives de recherche à l’aide de l’heuristique de recherche. Il recherche d’abord dans le dernier répertoire connu de l’objet un objet avec un nom différent, mais les mêmes attributs et la même heure de création de fichier. Ensuite, il recherche de manière récursive les sous-répertoires situés à proximité du dernier répertoire connu de l’objet. Il recherche un objet portant le même nom ou la même heure de création. Enfin, Resolve recherche un objet correspondant sur le bureau et d’autres volumes locaux. Pour supprimer l’utilisation de l’heuristique de recherche, définissez l’indicateur SLR_NOSEARCH .

Si les deux approches échouent, le système affiche une boîte de dialogue invitant l’utilisateur à entrer un emplacement. Pour supprimer la boîte de dialogue, définissez l’indicateur SLR_NO_UI .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête shobjidl_core.h
DLL Shell32.dll (version 4.0 ou ultérieure)