IShellLinkW::Resolve メソッド (shobjidl_core.h)

シェル リンクが移動または名前変更された場合でも、シェル リンクのターゲットの検索を試みます。

構文

HRESULT Resolve(
  HWND  hwnd,
  DWORD fFlags
);

パラメーター

hwnd

型: HWND

シェルがダイアログ ボックスの親として使用するウィンドウへのハンドル。 シェル リンクの解決中にユーザーに詳細情報の入力を求める必要がある場合は、シェルによってダイアログ ボックスが表示されます。

fFlags

型: DWORD

アクション フラグ。 このパラメーターは、次の値と組み合わせて使用できます。

SLR_NO_UI (0x0001)

0x0001。 リンクを解決できない場合は、ダイアログ ボックスを表示しません。 SLR_NO_UIが設定されている場合、fFlags の上位ワードを、リンクの解決に費やす最大時間を指定するタイムアウト値に設定できます。 タイムアウト期間内にリンクを解決できない場合、関数は を返します。 上位ワードが 0 に設定されている場合、タイムアウト期間は既定値の 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 フラグが設定されています。
  • ターゲットが移動または名前変更され、シェル リンク オブジェクトの内部状態が更新され、新しいターゲットが参照されます。
  • シェル リンク オブジェクトは 、IPersistFile を介してファイルから読み込まれました。
また、クライアントは IPersistFile::IsDirty メソッドを呼び出して、リンク オブジェクトが変更され、ファイルを更新する必要があるかどうかを判断することもできます。

解決 には、ターゲット オブジェクトを検索するための 2 つの方法があります。 1 つ目は、分散リンク追跡サービスです。 サービスが使用可能な場合は、NTFS バージョン 5.0 ボリューム上にあり、そのボリューム上の別の場所に移動されたオブジェクトを見つけることができます。 また、別の NTFS バージョン 5.0 ボリューム (他のコンピューター上のボリュームを含む) に移動されたオブジェクトを見つけることもできます。 このサービスの使用を抑制するには、 SLR_NOTRACK フラグを設定します。

分散リンク追跡が使用できない場合、またはリンク オブジェクトを見つけることができない場合は、 解決 によって検索ヒューリスティックを使用して検索が試みられます。 最初に、オブジェクトの最後の既知のディレクトリで、同じ属性とファイル作成時間が異なる名前のオブジェクトを検索します。 次に、オブジェクトの最後の既知のディレクトリの近くにあるサブディレクトリを再帰的に検索します。 同じ名前または作成時刻のオブジェクトを検索します。 最後に、 Resolve は、デスクトップとその他のローカル ボリュームで一致するオブジェクトを検索します。 検索ヒューリスティックの使用を抑制するには、 SLR_NOSEARCH フラグを設定します。

両方の方法が失敗した場合、ユーザーに場所の入力を求めるダイアログ ボックスが表示されます。 ダイアログ ボックスを非表示にするには、 SLR_NO_UI フラグを設定します。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shobjidl_core.h
[DLL] Shell32.dll (バージョン 4.0 以降)