IShellLinkA::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 フラグが設定されています。
- ターゲットが移動または名前変更され、新しいターゲットを参照するように Shell リンク オブジェクトの内部状態が更新されました。
- シェル リンク オブジェクトは 、IPersistFile を介してファイルから読み込まれました。
解決 には、ターゲット オブジェクトを検索するための 2 つの方法があります。 1 つ目は、分散リンク追跡サービスです。 サービスが使用可能な場合は、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 以降) |