Win32 API 日本語リファレンス
ホームUI.Shell › IShellLinkA

IShellLinkA

COM
IID000214ee-0000-0000-c000-000000000046継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

シェルリンクを作成、変更、解決するメソッドを公開します。(ANSI)

解説(Remarks)

Note このインターフェイスを使用して URL へのリンクを作成することはできません。
IShellLink インターフェイスには、ANSI 版 (IShellLinkA) と Unicode 版 (IShellLinkW) があります。どちらが使用されるかは、ANSI と Unicode のどちらでコンパイルするかによって決まります。
メモ

shobjidl_core.h ヘッダーは、IShellLink を、UNICODE プリプロセッサ定数の定義に基づいてこの関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして定義します。エンコーディング中立のエイリアスを、エンコーディング中立でないコードと混在して使用すると、不一致が生じ、コンパイルエラーや実行時エラーの原因となる可能性があります。詳細については、Conventions for Function Prototypes を参照してください。

メソッド 18

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetPath(LPSTR pszFile, INT cch, WIN32_FIND_DATAA* pfd, DWORD fFlags)

シェルリンクオブジェクトのターゲットのパスとファイル名を取得します。(ANSI)

pszFileLPSTRoutシェルリンクオブジェクトのターゲットのパスとファイル名を受け取るバッファーのアドレス。
cchINTinpszFile パラメーターが指すバッファーのサイズ (終端の null 文字を含む文字数)。返すことができる最大パスサイズは MAX_PATH です。このパラメーターは通常、ARRAYSIZE(pszFile) を呼び出して設定します。ARRAYSIZE マクロは Winnt.h で定義されています。
pfdWIN32_FIND_DATAA*inoutシェルリンクオブジェクトのターゲットに関する情報を受け取る WIN32_FIND_DATA 構造体へのポインター。このパラメーターが NULL の場合、追加情報は返されません。
fFlagsDWORDin

取得するパス情報の種類を指定するフラグ。このパラメーターには、次の値の組み合わせを指定できます。

SLGP_SHORTPATH

標準の短い (8.3 形式) ファイル名を取得します。

SLGP_UNCPRIORITY

サポートされていません。使用しないでください。

SLGP_RAWPATH

生のパス名を取得します。生のパスは、存在しない可能性があり、展開が必要な環境変数を含む場合があります。

SLGP_RELATIVEPRIORITY

Windows Vista 以降。可能であれば、以前の IShellLink::SetRelativePath の呼び出しで設定されたパスからの相対的な、ショートカットのターゲットのパスを取得します。

戻り値

型: HRESULT

操作が成功し、有効なパスが取得された場合は S_OK を返します。操作は成功したがパスが取得されなかった場合は S_FALSE を返し、pszFile は空になります。それ以外の場合は、標準の HRESULT エラー値のいずれかを返します。

vtbl 4 HRESULT GetIDList(ITEMIDLIST** ppidl)

シェルリンクオブジェクトのターゲットのアイテム識別子リストを取得します。(ANSI)

ppidlITEMIDLIST**outこのメソッドが返るときに、PIDL のアドレスを格納します。

戻り値

型: HRESULT

操作が成功し、1 つ以上の有効な PIDL が取得された場合は S_OK を返します。操作は成功したが PIDL が取得されなかった場合は、ppidlNULL に設定して S_FALSE を返します。それ以外の場合は、標準のエラー値を返します。

vtbl 5 HRESULT SetIDList(ITEMIDLIST* pidl)

シェルリンクオブジェクトのアイテム識別子リスト (PIDL) へのポインターを設定します。(ANSI)

pidlITEMIDLIST*inオブジェクトの完全修飾 PIDL。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、アプリケーションがコントロールパネルアプリケーション、プリンター、または別のコンピューターなど、ファイル以外のオブジェクトにシェルリンクを設定する必要がある場合に便利です。

vtbl 6 HRESULT GetDescription(LPSTR pszName, INT cch)

シェルリンクオブジェクトの説明文字列を取得します。(ANSI)

pszNameLPSTRout説明文字列を受け取るバッファーへのポインター。
cchINTinpszName パラメーターが指すバッファーにコピーする最大文字数。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

Windows 2000 以降では、pszName に返される文字列の最大長は INFOTIPSIZE です。Windows 2000 より前のシステムでは、文字列のサイズは MAX_PATH に制限されます。

vtbl 7 HRESULT SetDescription(LPSTR pszName)

シェルリンクオブジェクトの説明を設定します。説明には任意のアプリケーション定義文字列を指定できます。(ANSI)

pszNameLPSTRin新しい説明文字列を含むバッファーへのポインター。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

Windows 2000 以降では、pszName で指定する文字列は INFOTIPSIZE 以下でなければなりません。Windows 2000 より前のシステムでは、文字列のサイズは MAX_PATH に制限されます。

vtbl 8 HRESULT GetWorkingDirectory(LPSTR pszDir, INT cch)

シェルリンクオブジェクトの作業ディレクトリ名を取得します。(ANSI)

pszDirLPSTRout作業ディレクトリ名を受け取るバッファーのアドレス。
cchINTinpszDir パラメーターが指すバッファーにコピーする最大文字数。作業ディレクトリ名がこのパラメーターで指定された最大値より長い場合は切り捨てられます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

vtbl 9 HRESULT SetWorkingDirectory(LPSTR pszDir)

シェルリンクオブジェクトの作業ディレクトリ名を設定します。(ANSI)

pszDirLPSTRin新しい作業ディレクトリ名を含むバッファーのアドレス。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

作業ディレクトリは、ターゲットが作業ディレクトリを必要とする場合を除き、省略可能です。たとえば、アプリケーションが、別のディレクトリにあるテンプレートを使用する Microsoft Word ドキュメントへのシェルリンクを作成する場合、アプリケーションはこのメソッドを使用して作業ディレクトリを設定します。

vtbl 10 HRESULT GetArguments(LPSTR pszArgs, INT cch)

シェルリンクオブジェクトに関連付けられたコマンドライン引数を取得します。(ANSI)

pszArgsLPSTRoutこのメソッドが正常に返るときに、コマンドライン引数を受け取るバッファーへのポインター。
cchINTinpszArgs パラメーターで提供されるバッファーにコピーできる最大文字数。Unicode 文字列の場合、最大文字列長に制限はありません。ANSI 文字列の場合、返される文字列の最大長は Windows のバージョンによって異なり、Windows 2000 より前では MAX_PATH、Windows 2000 以降では INFOTIPSIZE (Commctrl.h で定義) です。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

Windows 7 以降では、このメソッドではなく IPropertyStore (PKEY_Link_Arguments 値を使用) を通じて引数文字列を取得することが推奨されます。このメソッドは、提供されたバッファーが十分な大きさでない場合に文字列を暗黙的に切り捨てる可能性があります。IPropertyStore は正しいサイズの文字列を割り当てます。

vtbl 11 HRESULT SetArguments(LPSTR pszArgs)

シェルリンクオブジェクトのコマンドライン引数を設定します。(ANSI)

pszArgsLPSTRin新しいコマンドライン引数を含むバッファーへのポインター。Unicode 文字列の場合、最大文字列長に制限はありません。ANSI 文字列の場合、返される文字列の最大長は Windows のバージョンによって異なり、Windows 2000 より前では MAX_PATH、Windows 2000 以降では INFOTIPSIZE (Commctrl.h で定義) です。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、コンパイラーのように特別なフラグを引数として受け取るアプリケーションへのリンクを作成する場合に便利です。

vtbl 12 HRESULT GetHotkey(WORD* pwHotkey)

シェルリンクオブジェクトのキーボードショートカット (ホットキー) を取得します。(ANSI)

pwHotkeyWORD*out

キーボードショートカットのアドレス。仮想キーコードは下位バイトに、修飾フラグは上位バイトに格納されます。修飾フラグには、次の値の組み合わせを指定できます。

HOTKEYF_ALT

ALT キー

HOTKEYF_CONTROL

CTRL キー

HOTKEYF_EXT

拡張キー

HOTKEYF_SHIFT

SHIFT キー

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

vtbl 13 HRESULT SetHotkey(WORD wHotkey)

シェルリンクオブジェクトのキーボードショートカット (ホットキー) を設定します。(ANSI)

wHotkeyWORDin新しいキーボードショートカット。仮想キーコードは下位バイトに、修飾フラグは上位バイトに格納されます。修飾フラグには、IShellLink::GetHotkey メソッドの説明で指定された値の組み合わせを指定できます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

キーボードショートカットを設定すると、ユーザーは特定のキーの組み合わせを押すことでオブジェクトをアクティブ化できます。

vtbl 14 HRESULT GetShowCmd(SHOW_WINDOW_CMD* piShowCmd)

シェルリンクオブジェクトの表示コマンドを取得します。(ANSI)

piShowCmdSHOW_WINDOW_CMD*out

コマンドへのポインター。次のコマンドがサポートされています。

SW_SHOWNORMAL

ウィンドウをアクティブ化して表示します。ウィンドウが最小化または最大化されている場合、システムは元のサイズと位置に復元します。アプリケーションは、ウィンドウを初めて表示するときにこのフラグを指定する必要があります。

SW_SHOWMAXIMIZED

ウィンドウをアクティブ化し、最大化ウィンドウとして表示します。

SW_SHOWMINIMIZED

ウィンドウをアクティブ化し、最小化ウィンドウとして表示します。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

表示コマンドは、対応するオブジェクトの初期表示状態を設定するために使用されます。これは ShowWindow で説明されている SW_xxx 値のいずれかです。

vtbl 15 HRESULT SetShowCmd(SHOW_WINDOW_CMD iShowCmd)

シェルリンクオブジェクトの表示コマンドを設定します。表示コマンドはウィンドウの初期表示状態を設定します。(ANSI)

iShowCmdSHOW_WINDOW_CMDin

コマンド。SetShowCmd は、次の ShowWindow コマンドのいずれかを受け入れます。

SW_SHOWNORMAL

ウィンドウをアクティブ化して表示します。ウィンドウが最小化または最大化されている場合、システムは元のサイズと位置に復元します。アプリケーションは、ウィンドウを初めて表示するときにこのフラグを指定する必要があります。

SW_SHOWMAXIMIZED

ウィンドウをアクティブ化し、最大化ウィンドウとして表示します。

SW_SHOWMINNOACTIVE

ウィンドウを最小化状態で表示し、現在アクティブなウィンドウをアクティブなままにします。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

vtbl 16 HRESULT GetIconLocation(LPSTR pszIconPath, INT cch, INT* piIcon)

シェルリンクオブジェクトのアイコンの場所 (パスとインデックス) を取得します。(ANSI)

pszIconPathLPSTRoutアイコンを含むファイルのパスを受け取るバッファーのアドレス。
cchINTinpszIconPath パラメーターが指すバッファーにコピーする最大文字数。
piIconINT*outアイコンのインデックスを受け取る値のアドレス。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

vtbl 17 HRESULT SetIconLocation(LPSTR pszIconPath, INT iIcon)

シェルリンクオブジェクトのアイコンの場所 (パスとインデックス) を設定します。(ANSI)

pszIconPathLPSTRinアイコンを含むファイルのパスを格納するバッファーのアドレス。
iIconINTinアイコンのインデックス。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

vtbl 18 HRESULT SetRelativePath(LPSTR pszPathRel, DWORD dwReserved)

シェルリンクオブジェクトへの相対パスを設定します。(ANSI)

pszPathRelLPSTRinショートカットの解決を実行する際の基準となる、ショートカットファイルの完全修飾パスを含むバッファーのアドレス。これはフォルダー名ではなくファイル名である必要があります。
dwReservedDWORDin予約済み。このパラメーターにはゼロを設定してください。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

クライアントは通常、リンクがターゲットと一緒に移動され、絶対パスが無効になる可能性がある場合に相対リンクを定義します。SetRelativePath メソッドは、ターゲットと相対パスの間の共通パスプレフィックスに基づいて、リンク解決プロセスがターゲットを見つけるのを助けるために使用できます。解決プロセスを支援するため、クライアントはリンク作成プロセスの一部として相対パスを設定する必要があります。

次のシナリオを考えます。

ショートカットが保存される前に、相対パスを付けて元のリンクを作成することで、解決プロセスを支援できます。
::SetRelativePath("c:\MyLink.lnk", NULL);

ショートカットが解決される前に、新しい相対パスを設定すると、Resolve コードは新しい場所でファイルを見つけます。

::SetRelativePath("d:\MyLink.lnk", NULL);
vtbl 19 HRESULT Resolve(HWND hwnd, DWORD fFlags)

シェルリンクのターゲットが移動または名前変更されていても、そのターゲットを見つけようとします。(ANSI)

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

アクションフラグ。このパラメーターには、次の値の組み合わせを指定できます。

SLR_NO_UI (0x0001)

0x0001。リンクを解決できない場合にダイアログボックスを表示しません。SLR_NO_UI が設定されている場合、fFlags の上位ワードに、リンクの解決に費やす最大時間を指定するタイムアウト値を設定できます。リンクがタイムアウト時間内に解決できない場合、関数は戻ります。上位ワードがゼロに設定されている場合、タイムアウト時間は既定値の 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 以降。ターゲットが既知のフォルダーであり、その既知のフォルダーがリダイレクトされた場合、dirty として報告します。これは、元のターゲットパスがファイルシステムパスまたは 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 エラーコードを返します。

解説(Remarks)

リンク作成後、ターゲットの名前や場所が変わることがあります。IShellLink::Resolve メソッドは、まずリンクに関連付けられたパスを取得します。オブジェクトがすでに存在しない場合や名前が変更されている場合、Resolve はそれを見つけようとします。成功し、かつ次の条件が満たされる場合、リンクオブジェクトの読み込み元のファイルは、リンクオブジェクトの新しい状態を反映するように更新されます。

クライアントは、IPersistFile::IsDirty メソッドを呼び出して、リンクオブジェクトが変更され、ファイルを更新する必要があるかどうかを判断することもできます。

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

分散リンクトラッキングが利用できない場合、またはリンクオブジェクトの検出に失敗した場合、Resolve は検索ヒューリスティックを使ってそれを見つけようとします。まず、オブジェクトの最後に判明していたディレクトリ内で、名前は異なるが同じ属性とファイル作成時刻を持つオブジェクトを探します。次に、オブジェクトの最後に判明していたディレクトリの周辺にあるサブディレクトリを再帰的に検索します。同じ名前または作成時刻を持つオブジェクトを探します。最後に、Resolve はデスクトップおよびその他のローカルボリューム上で一致するオブジェクトを探します。検索ヒューリスティックの使用を抑制するには、SLR_NOSEARCH フラグを設定します。

両方のアプローチが失敗した場合、システムはユーザーに場所の入力を求めるダイアログボックスを表示します。ダイアログボックスを抑制するには、SLR_NO_UI フラグを設定します。

vtbl 20 HRESULT SetPath(LPSTR pszFile)

シェルリンクオブジェクトのターゲットのパスとファイル名を設定します。(ANSI)

pszFileLPSTRin新しいパスを含むバッファーのアドレス。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IShellLinkA "{000214EE-0000-0000-C000-000000000046}"
#usecom global IShellLinkA IID_IShellLinkA "{00021401-0000-0000-C000-000000000046}"
#comfunc global IShellLinkA_GetPath              3 var,int,var,int
#comfunc global IShellLinkA_GetIDList            4 var
#comfunc global IShellLinkA_SetIDList            5 var
#comfunc global IShellLinkA_GetDescription       6 var,int
#comfunc global IShellLinkA_SetDescription       7 str
#comfunc global IShellLinkA_GetWorkingDirectory  8 var,int
#comfunc global IShellLinkA_SetWorkingDirectory  9 str
#comfunc global IShellLinkA_GetArguments         10 var,int
#comfunc global IShellLinkA_SetArguments         11 str
#comfunc global IShellLinkA_GetHotkey            12 var
#comfunc global IShellLinkA_SetHotkey            13 int
#comfunc global IShellLinkA_GetShowCmd           14 var
#comfunc global IShellLinkA_SetShowCmd           15 int
#comfunc global IShellLinkA_GetIconLocation      16 var,int,var
#comfunc global IShellLinkA_SetIconLocation      17 str,int
#comfunc global IShellLinkA_SetRelativePath      18 str,int
#comfunc global IShellLinkA_Resolve              19 sptr,int
#comfunc global IShellLinkA_SetPath              20 str
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。