IShellLinkA
COM公式ドキュメント
シェルリンクを作成、変更、解決するメソッドを公開します。(ANSI)
解説(Remarks)
shobjidl_core.h ヘッダーは、IShellLink を、UNICODE プリプロセッサ定数の定義に基づいてこの関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして定義します。エンコーディング中立のエイリアスを、エンコーディング中立でないコードと混在して使用すると、不一致が生じ、コンパイルエラーや実行時エラーの原因となる可能性があります。詳細については、Conventions for Function Prototypes を参照してください。
メソッド 18
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
シェルリンクオブジェクトのターゲットのパスとファイル名を取得します。(ANSI)
| pszFile | LPSTR | out | シェルリンクオブジェクトのターゲットのパスとファイル名を受け取るバッファーのアドレス。 |
| cch | INT | in | pszFile パラメーターが指すバッファーのサイズ (終端の null 文字を含む文字数)。返すことができる最大パスサイズは MAX_PATH です。このパラメーターは通常、ARRAYSIZE(pszFile) を呼び出して設定します。ARRAYSIZE マクロは Winnt.h で定義されています。 |
| pfd | WIN32_FIND_DATAA* | inout | シェルリンクオブジェクトのターゲットに関する情報を受け取る WIN32_FIND_DATA 構造体へのポインター。このパラメーターが NULL の場合、追加情報は返されません。 |
| fFlags | DWORD | in | 取得するパス情報の種類を指定するフラグ。このパラメーターには、次の値の組み合わせを指定できます。 SLGP_SHORTPATH標準の短い (8.3 形式) ファイル名を取得します。 SLGP_UNCPRIORITYサポートされていません。使用しないでください。 SLGP_RAWPATH生のパス名を取得します。生のパスは、存在しない可能性があり、展開が必要な環境変数を含む場合があります。 SLGP_RELATIVEPRIORITYWindows Vista 以降。可能であれば、以前の IShellLink::SetRelativePath の呼び出しで設定されたパスからの相対的な、ショートカットのターゲットのパスを取得します。 |
戻り値
型: HRESULT
操作が成功し、有効なパスが取得された場合は S_OK を返します。操作は成功したがパスが取得されなかった場合は S_FALSE を返し、pszFile は空になります。それ以外の場合は、標準の HRESULT エラー値のいずれかを返します。
シェルリンクオブジェクトのターゲットのアイテム識別子リストを取得します。(ANSI)
| ppidl | ITEMIDLIST** | out | このメソッドが返るときに、PIDL のアドレスを格納します。 |
戻り値
型: HRESULT
操作が成功し、1 つ以上の有効な PIDL が取得された場合は S_OK を返します。操作は成功したが PIDL が取得されなかった場合は、ppidl を NULL に設定して S_FALSE を返します。それ以外の場合は、標準のエラー値を返します。
シェルリンクオブジェクトのアイテム識別子リスト (PIDL) へのポインターを設定します。(ANSI)
| pidl | ITEMIDLIST* | in | オブジェクトの完全修飾 PIDL。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、アプリケーションがコントロールパネルアプリケーション、プリンター、または別のコンピューターなど、ファイル以外のオブジェクトにシェルリンクを設定する必要がある場合に便利です。
シェルリンクオブジェクトの説明文字列を取得します。(ANSI)
| pszName | LPSTR | out | 説明文字列を受け取るバッファーへのポインター。 |
| cch | INT | in | pszName パラメーターが指すバッファーにコピーする最大文字数。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
Windows 2000 以降では、pszName に返される文字列の最大長は INFOTIPSIZE です。Windows 2000 より前のシステムでは、文字列のサイズは MAX_PATH に制限されます。
シェルリンクオブジェクトの説明を設定します。説明には任意のアプリケーション定義文字列を指定できます。(ANSI)
| pszName | LPSTR | in | 新しい説明文字列を含むバッファーへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
Windows 2000 以降では、pszName で指定する文字列は INFOTIPSIZE 以下でなければなりません。Windows 2000 より前のシステムでは、文字列のサイズは MAX_PATH に制限されます。
シェルリンクオブジェクトの作業ディレクトリ名を取得します。(ANSI)
| pszDir | LPSTR | out | 作業ディレクトリ名を受け取るバッファーのアドレス。 |
| cch | INT | in | pszDir パラメーターが指すバッファーにコピーする最大文字数。作業ディレクトリ名がこのパラメーターで指定された最大値より長い場合は切り捨てられます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
シェルリンクオブジェクトの作業ディレクトリ名を設定します。(ANSI)
| pszDir | LPSTR | in | 新しい作業ディレクトリ名を含むバッファーのアドレス。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
作業ディレクトリは、ターゲットが作業ディレクトリを必要とする場合を除き、省略可能です。たとえば、アプリケーションが、別のディレクトリにあるテンプレートを使用する Microsoft Word ドキュメントへのシェルリンクを作成する場合、アプリケーションはこのメソッドを使用して作業ディレクトリを設定します。
シェルリンクオブジェクトに関連付けられたコマンドライン引数を取得します。(ANSI)
| pszArgs | LPSTR | out | このメソッドが正常に返るときに、コマンドライン引数を受け取るバッファーへのポインター。 |
| cch | INT | in | pszArgs パラメーターで提供されるバッファーにコピーできる最大文字数。Unicode 文字列の場合、最大文字列長に制限はありません。ANSI 文字列の場合、返される文字列の最大長は Windows のバージョンによって異なり、Windows 2000 より前では MAX_PATH、Windows 2000 以降では INFOTIPSIZE (Commctrl.h で定義) です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
Windows 7 以降では、このメソッドではなく IPropertyStore (PKEY_Link_Arguments 値を使用) を通じて引数文字列を取得することが推奨されます。このメソッドは、提供されたバッファーが十分な大きさでない場合に文字列を暗黙的に切り捨てる可能性があります。IPropertyStore は正しいサイズの文字列を割り当てます。
シェルリンクオブジェクトのコマンドライン引数を設定します。(ANSI)
| pszArgs | LPSTR | in | 新しいコマンドライン引数を含むバッファーへのポインター。Unicode 文字列の場合、最大文字列長に制限はありません。ANSI 文字列の場合、返される文字列の最大長は Windows のバージョンによって異なり、Windows 2000 より前では MAX_PATH、Windows 2000 以降では INFOTIPSIZE (Commctrl.h で定義) です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、コンパイラーのように特別なフラグを引数として受け取るアプリケーションへのリンクを作成する場合に便利です。
シェルリンクオブジェクトのキーボードショートカット (ホットキー) を取得します。(ANSI)
| pwHotkey | WORD* | out | キーボードショートカットのアドレス。仮想キーコードは下位バイトに、修飾フラグは上位バイトに格納されます。修飾フラグには、次の値の組み合わせを指定できます。 HOTKEYF_ALTALT キー HOTKEYF_CONTROLCTRL キー HOTKEYF_EXT拡張キー HOTKEYF_SHIFTSHIFT キー |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
シェルリンクオブジェクトのキーボードショートカット (ホットキー) を設定します。(ANSI)
| wHotkey | WORD | in | 新しいキーボードショートカット。仮想キーコードは下位バイトに、修飾フラグは上位バイトに格納されます。修飾フラグには、IShellLink::GetHotkey メソッドの説明で指定された値の組み合わせを指定できます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
キーボードショートカットを設定すると、ユーザーは特定のキーの組み合わせを押すことでオブジェクトをアクティブ化できます。
シェルリンクオブジェクトの表示コマンドを取得します。(ANSI)
| piShowCmd | SHOW_WINDOW_CMD* | out | コマンドへのポインター。次のコマンドがサポートされています。 SW_SHOWNORMALウィンドウをアクティブ化して表示します。ウィンドウが最小化または最大化されている場合、システムは元のサイズと位置に復元します。アプリケーションは、ウィンドウを初めて表示するときにこのフラグを指定する必要があります。 SW_SHOWMAXIMIZEDウィンドウをアクティブ化し、最大化ウィンドウとして表示します。 SW_SHOWMINIMIZEDウィンドウをアクティブ化し、最小化ウィンドウとして表示します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
表示コマンドは、対応するオブジェクトの初期表示状態を設定するために使用されます。これは ShowWindow で説明されている SW_xxx 値のいずれかです。
シェルリンクオブジェクトの表示コマンドを設定します。表示コマンドはウィンドウの初期表示状態を設定します。(ANSI)
| iShowCmd | SHOW_WINDOW_CMD | in | コマンド。SetShowCmd は、次の ShowWindow コマンドのいずれかを受け入れます。 SW_SHOWNORMALウィンドウをアクティブ化して表示します。ウィンドウが最小化または最大化されている場合、システムは元のサイズと位置に復元します。アプリケーションは、ウィンドウを初めて表示するときにこのフラグを指定する必要があります。 SW_SHOWMAXIMIZEDウィンドウをアクティブ化し、最大化ウィンドウとして表示します。 SW_SHOWMINNOACTIVEウィンドウを最小化状態で表示し、現在アクティブなウィンドウをアクティブなままにします。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
シェルリンクオブジェクトのアイコンの場所 (パスとインデックス) を取得します。(ANSI)
| pszIconPath | LPSTR | out | アイコンを含むファイルのパスを受け取るバッファーのアドレス。 |
| cch | INT | in | pszIconPath パラメーターが指すバッファーにコピーする最大文字数。 |
| piIcon | INT* | out | アイコンのインデックスを受け取る値のアドレス。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
シェルリンクオブジェクトのアイコンの場所 (パスとインデックス) を設定します。(ANSI)
| pszIconPath | LPSTR | in | アイコンを含むファイルのパスを格納するバッファーのアドレス。 |
| iIcon | INT | in | アイコンのインデックス。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
シェルリンクオブジェクトへの相対パスを設定します。(ANSI)
| pszPathRel | LPSTR | in | ショートカットの解決を実行する際の基準となる、ショートカットファイルの完全修飾パスを含むバッファーのアドレス。これはフォルダー名ではなくファイル名である必要があります。 |
| dwReserved | DWORD | in | 予約済み。このパラメーターにはゼロを設定してください。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
クライアントは通常、リンクがターゲットと一緒に移動され、絶対パスが無効になる可能性がある場合に相対リンクを定義します。SetRelativePath メソッドは、ターゲットと相対パスの間の共通パスプレフィックスに基づいて、リンク解決プロセスがターゲットを見つけるのを助けるために使用できます。解決プロセスを支援するため、クライアントはリンク作成プロセスの一部として相対パスを設定する必要があります。
例
次のシナリオを考えます。
- リンク c:\MyLink.lnk があります。
- リンクのターゲットは c:\MyDocs\MyFile.txt です。
- リンクと MyDocs\MyFile.txt を d:\ に移動したいとします。
::SetRelativePath("c:\MyLink.lnk", NULL);
ショートカットが解決される前に、新しい相対パスを設定すると、Resolve コードは新しい場所でファイルを見つけます。
::SetRelativePath("d:\MyLink.lnk", NULL);
シェルリンクのターゲットが移動または名前変更されていても、そのターゲットを見つけようとします。(ANSI)
| hwnd | HWND | in | シェルがダイアログボックスの親として使用するウィンドウへのハンドル。シェルリンクの解決中にユーザーに追加情報の入力を求める必要がある場合、シェルはダイアログボックスを表示します。 |
| fFlags | DWORD | in | アクションフラグ。このパラメーターには、次の値の組み合わせを指定できます。 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 はそれを見つけようとします。成功し、かつ次の条件が満たされる場合、リンクオブジェクトの読み込み元のファイルは、リンクオブジェクトの新しい状態を反映するように更新されます。
- SLR_UPDATE フラグが設定されている。
- ターゲットが移動または名前変更され、シェルリンクオブジェクトの内部状態が新しいターゲットを参照するように更新される。
- シェルリンクオブジェクトが IPersistFile を通じてファイルから読み込まれた。
Resolve には、ターゲットオブジェクトを見つけるための 2 つのアプローチがあります。1 つ目は分散リンクトラッキングサービスです。このサービスが利用可能な場合、NTFS バージョン 5.0 ボリューム上にあり、そのボリューム内の別の場所に移動されたオブジェクトを見つけることができます。また、他のコンピューター上のボリュームを含む別の NTFS バージョン 5.0 ボリュームに移動されたオブジェクトも見つけることができます。このサービスの使用を抑制するには、SLR_NOTRACK フラグを設定します。
分散リンクトラッキングが利用できない場合、またはリンクオブジェクトの検出に失敗した場合、Resolve は検索ヒューリスティックを使ってそれを見つけようとします。まず、オブジェクトの最後に判明していたディレクトリ内で、名前は異なるが同じ属性とファイル作成時刻を持つオブジェクトを探します。次に、オブジェクトの最後に判明していたディレクトリの周辺にあるサブディレクトリを再帰的に検索します。同じ名前または作成時刻を持つオブジェクトを探します。最後に、Resolve はデスクトップおよびその他のローカルボリューム上で一致するオブジェクトを探します。検索ヒューリスティックの使用を抑制するには、SLR_NOSEARCH フラグを設定します。
両方のアプローチが失敗した場合、システムはユーザーに場所の入力を求めるダイアログボックスを表示します。ダイアログボックスを抑制するには、SLR_NO_UI フラグを設定します。
シェルリンクオブジェクトのターゲットのパスとファイル名を設定します。(ANSI)
| pszFile | LPSTR | in | 新しいパスを含むバッファーのアドレス。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
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 指定が可能。#define global IID_IShellLinkA "{000214EE-0000-0000-C000-000000000046}" #usecom global IShellLinkA IID_IShellLinkA "{00021401-0000-0000-C000-000000000046}" #comfunc global IShellLinkA_GetPath 3 sptr,int,sptr,int #comfunc global IShellLinkA_GetIDList 4 sptr #comfunc global IShellLinkA_SetIDList 5 sptr #comfunc global IShellLinkA_GetDescription 6 sptr,int #comfunc global IShellLinkA_SetDescription 7 str #comfunc global IShellLinkA_GetWorkingDirectory 8 sptr,int #comfunc global IShellLinkA_SetWorkingDirectory 9 str #comfunc global IShellLinkA_GetArguments 10 sptr,int #comfunc global IShellLinkA_SetArguments 11 str #comfunc global IShellLinkA_GetHotkey 12 sptr #comfunc global IShellLinkA_SetHotkey 13 int #comfunc global IShellLinkA_GetShowCmd 14 sptr #comfunc global IShellLinkA_SetShowCmd 15 int #comfunc global IShellLinkA_GetIconLocation 16 sptr,int,sptr #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から自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。