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

IShellLibrary

COM
IID11a66efa-382e-451a-9234-1e0e12ef3085継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ライブラリを作成および管理するためのメソッドを公開します。

解説(Remarks)

実装するタイミング

IShellLibrary の独自実装はサポートされていません。クライアント アプリケーションは Shell32.dll が提供する実装を使用します。

使用するタイミング

新しいライブラリの作成、または既存のライブラリの属性の照会や更新を行うには IShellLibrary を使用します。

ライブラリ ヘルパー関数

次のライブラリ ヘルパー関数が Shobjidl.h によって提供されます。
名前 概要
SHAddFolderPathToLibrary ライブラリにフォルダーを追加します。
SHCreateLibrary IShellLibrary オブジェクトを作成します。
SHLoadLibraryFromItem 指定したライブラリ定義ファイルから IShellLibrary オブジェクトを作成して読み込みます。
SHLoadLibraryFromKnownFolder 指定した KNOWNFOLDERID に対する IShellLibrary オブジェクトを作成して読み込みます。
SHLoadLibraryFromParsingName 指定したパスに対する IShellLibrary オブジェクトを作成して読み込みます。
SHRemoveFolderPathFromLibrary ライブラリからフォルダーを削除します。
SHResolveFolderPathInLibrary 移動または名前変更されたライブラリ フォルダーの対象の場所を解決しようとします。
SHResolveLibrary ライブラリの場所を見つけようとします。
SHSaveLibraryInFolderPath IShellLibrary オブジェクトをディスクに保存します。
SHShowManageLibraryUI ライブラリ フォルダーと既定の保存場所をユーザーが管理できるライブラリ管理ダイアログを表示します。

ライブラリの列挙型

次の列挙型がライブラリをサポートします。
名前 概要
DEFAULTSAVEFOLDERTYPE 既定の保存場所がパブリックかプライベートかを指定します。
LIBRARYOPTIONFLAGS ライブラリ オプションを指定します。
LIBRARYSAVEFLAGS ライブラリの保存時に名前の衝突を処理するためのオプションを定義します。

メソッド 17

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

vtbl 3 HRESULT LoadLibraryFromItem(IShellItem* psiLibrary, DWORD grfMode)

指定したライブラリ定義ファイルからライブラリを読み込みます。

psiLibraryIShellItem*in読み込むライブラリ定義ファイルの IShellItem オブジェクト。このオブジェクトがライブラリでない場合はエラーが返されます。
grfModeDWORDinライブラリ オブジェクトのアクセス モードと共有モードを指定する、1 つ以上の STGM ストレージ メディア フラグ。

戻り値

型: HRESULT

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

解説(Remarks)

既に読み込まれている IShellLibrary オブジェクトに対してこのメソッドを呼び出すと、そのオブジェクトの内容はメモリ内で新しい情報によって上書きされます。

既存のライブラリ オブジェクトがない場合は、このメソッドの代わりに SHLoadLibraryFromItem を呼び出すことができます。

次のコード例は、このメソッドをラップするヘルパー関数 SHLoadLibraryFromItem を示しています。

//
// from shobjidl.h
//
__inline HRESULT SHLoadLibraryFromItem(
    __in IShellItem *psiLibrary,
    __in DWORD grfMode,
    __in REFIID riid,
    __deref_out void **ppv
)
{
    *ppv = NULL;
    IShellLibrary *plib;

    HRESULT hr = CoCreateInstance(
      CLSID_ShellLibrary, 
      NULL, 
      CLSCTX_INPROC_SERVER, 
      IID_PPV_ARGS(&plib));

    if (SUCCEEDED(hr))
    {
        hr = plib->LoadLibraryFromItem (psiLibrary, grfMode);
        if (SUCCEEDED(hr))
        {
            hr = plib->QueryInterface (riid, ppv);
        }
        plib->Release();
    }
    return hr;
}

次のコード例は、このメソッドをラップするヘルパー関数 SHLoadLibraryFromParsingName を示しています。

//
// from shobjidl.h
//
__inline HRESULT SHLoadLibraryFromParsingName(
    __in PCWSTR pszParsingName,
    __in DWORD grfMode,
    __in REFIID riid,
    __deref_out void **ppv
)
{
    *ppv = NULL;
    IShellItem *psiLibrary;
    HRESULT hr = SHCreateItemFromParsingName (
      pszParsingName, 
      NULL, 
      IID_PPV_ARGS(&psiLibrary));

    if (SUCCEEDED(hr))
    {
        hr = SHLoadLibraryFromItem (psiLibrary, grfMode, riid, ppv);
        psiLibrary->Release();
    }
    return hr;
}
vtbl 4 HRESULT LoadLibraryFromKnownFolder(GUID* kfidLibrary, DWORD grfMode)

KNOWNFOLDERID によって参照されるライブラリを読み込みます。

kfidLibraryGUID*in読み込むライブラリを識別する KNOWNFOLDERID 値。
grfModeDWORDinライブラリ オブジェクトのアクセス モードと共有モードを指定する、1 つ以上の STGM ストレージ メディア フラグ。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドを呼び出したときに IShellLibrary オブジェクトが既にライブラリを保持している場合、そのライブラリはメモリ内で新しいライブラリによって上書きされます。

このライブラリに対する既存の IShellLibrary オブジェクトがない場合は、このメソッドの代わりに SHLoadLibraryFromItem を呼び出すことができます。

次のコード例は、このメソッドをラップするヘルパー関数 SHLoadLibraryFromKnownFolder を示しています。

//
// from shobjidl.h
//
__inline HRESULT SHLoadLibraryFromKnownFolder(
    __in REFKNOWNFOLDERID kfidLibrary, 
    __in DWORD grfMode, 
    __in REFIID riid, 
    __deref_out void **ppv)
{
    *ppv = NULL;
    IShellLibrary *plib;
    HRESULT hr = CoCreateInstance( 
        CLSID_ShellLibrary,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_PPV_ARGS(&plib));
    if (SUCCEEDED(hr))
    {
        hr = plib->LoadLibraryFromKnownFolder(kfidLibrary, grfMode);
        if (SUCCEEDED(hr))
        {
            hr = plib->QueryInterface(riid, ppv);
        }
        plib->Release();
    }
    return hr;}
vtbl 5 HRESULT AddFolder(IShellItem* psiLocation)

ライブラリにフォルダーを追加します。

psiLocationIShellItem*inライブラリに追加するフォルダーを表す IShellItem オブジェクト。

戻り値

型: HRESULT

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

解説(Remarks)

フォルダーがライブラリに追加されると、そのフォルダーは Windows Search インデックスにも追加されます。

利便性のため、このメソッドの代わりに SHAddFolderPathToLibrary を使用できます。

次のコード例は、このメソッドをラップするヘルパー関数 SHAddFolderPathToLibrary を示しています。

//
// From Shobjidl.h
//
__inline HRESULT SHAddFolderPathToLibrary (
    __in IShellLibrary *plib,
    __in PCWSTR pszFolderPath
)
{
    IShellItem *psiFolder;
    
    HRESULT hr = SHCreateItemFromParsingName (
      pszFolderPath, 
      NULL,
      IID_PPV_ARGS(&psiFolder));
    
    if (SUCCEEDED(hr))
    {
        hr = plib->AddFolder (psiFolder);
        psiFolder->Release ();
    }
    return hr;
}
vtbl 6 HRESULT RemoveFolder(IShellItem* psiLocation)

ライブラリからフォルダーを削除します。

psiLocationIShellItem*in削除するフォルダーを表す IShellItem オブジェクト。

戻り値

型: HRESULT

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

解説(Remarks)

利便性のため、このメソッドの代わりに SHRemoveFolderPathFromLibrary を使用できます。

次のコード例は、このメソッドをラップするヘルパー関数 SHRemoveFolderPathFromLibrary を示しています。

//
// from shobjidl.h
//
__inline HRESULT SHRemoveFolderPathFromLibrary(
    __in IShellLibrary *plib,
    __in PCWSTR pszFolderPath)
{
    PIDLIST_ABSOLUTE pidlFolder = 
      SHSimpleIDListFromPath (pszFolderPath);
    HRESULT hr = pidlFolder ? S_OK : E_INVALIDARG;

    if (SUCCEEDED(hr))
    {
        IShellItem *psiFolder;
        hr = SHCreateItemFromIDList (
          pidlFolder, 
          IID_PPV_ARGS(&psiFolder));

        if (SUCCEEDED(hr))
        {
            hr = plib->RemoveFolder(psiFolder);
            psiFolder->Release();
        }
        CoTaskMemFree(pidlFolder);
    }
    return hr;
}
vtbl 7 HRESULT GetFolders(LIBRARYFOLDERFILTER lff, GUID* riid, void** ppv)

ライブラリに含まれる子フォルダーのセットを取得します。

lffLIBRARYFOLDERFILTERin

取得するフォルダーを決定する、次のいずれかの LIBRARYFOLDERFILTER 値。これらのフラグは組み合わせることができません。

LFF_FORCEFILESYSTEM (1)

ファイル システム フォルダーのみを取得します。ファイル システム フォルダーとは、SFGAO_FILESYSTEM 属性が設定されているフォルダーです。

LFF_STORAGEITEMS (2)

IStorage オブジェクトにバインドできるすべてのフォルダーを取得します。これらのフォルダーは、SFGAO_STORAGE または SFGAO_FILESYSTEM 属性が設定されているフォルダーです。

LFF_ALLITEMS (3)

ライブラリ内のすべてのフォルダーを取得します。

riidGUID*inppv で取得するインターフェイスの IID への参照。この値は通常 IID_IShellItemArray ですが、IID_IObjectCollection、IID_IObjectArray、または CShellItemArray によって実装されるその他のインターフェイスの IID を指定することもできます。
ppvvoid**out riid で要求したインターフェイスへのポインター。この呼び出しが失敗した場合、この値は NULL になります。

戻り値

型: HRESULT

このメソッドは次のいずれかの値を返します。

戻り値コード 説明
S_OK
呼び出しが成功し、指定したフォルダーが ppv に返されました。
S_FALSE
呼び出しは成功しましたが、指定したフォルダーの一部が ppv に返されませんでした。
E_
このメソッドはその他のエラー値を返す場合があります。

解説(Remarks)

このメソッドはフォルダーの順序付きリストを取得します。既定では、このメソッドはストレージの場所のみを返します。

最良の結果を得るには、riid パラメーターと ppv パラメーターに、Objbase.h で定義されている IID_PPV_ARGS マクロを使用してください。このマクロは ppv の値が指すインターフェイスに基づいて正しい IID を提供するため、コーディング エラーの可能性を排除できます。

vtbl 8 HRESULT ResolveFolder(IShellItem* psiFolderToResolve, DWORD dwTimeout, GUID* riid, void** ppv)

フォルダーが移動または名前変更されている場合でも、ライブラリ フォルダーの対象の場所を解決します。

psiFolderToResolveIShellItem*in見つけるライブラリ フォルダーを表す IShellItem オブジェクト。
dwTimeoutDWORDinメソッドが返す前にフォルダーを見つけようとする最大時間 (ミリ秒単位)。指定した時間が経過するまでにフォルダーが見つからなかった場合は、エラーが返されます。
riidGUID*in解決された対象の場所を表す、ppv で取得するインターフェイスの IID への参照。この値は通常 IID_IShellItem ですが、IID_IShellItem2、または CShellItem によって実装されるその他のインターフェイスの IID を指定することもできます。
ppvvoid**outriid で要求したインターフェイスへのポインター。

戻り値

型: HRESULT

このメソッドは次のいずれかの値を返します。

戻り値コード 説明
S_OK
対象フォルダーが見つかり、ppv に返されました。ただし、ライブラリが更新されているため、これらの変更を永続化するには IShellLibrary::Commit または IShellLibrary::Save を呼び出す必要があります。
S_FALSE
対象フォルダーが見つかり、ppv に返されました。
E_
このメソッドはその他のエラー値を返す場合があります。

解説(Remarks)

このメソッドはブロッキング呼び出しであり、返されるまで dwTimeout パラメーターで指定した時間だけ呼び出し元のスレッドをブロックする可能性があります。呼び出し元のスレッドをブロックするため、ユーザー インターフェイスの操作も処理するスレッドから呼び出さないでください。

このメソッドは、場所を解決できない場合でも、フォルダーを手動で見つけるようにユーザーに求めることはありません。

利便性のため、このメソッドの代わりに SHResolveFolderPathInLibrary を使用できます。

riid パラメーターと ppv パラメーターをまとめるには、Objbase.h で定義されている IID_PPV_ARGS マクロを使用することをお勧めします。このマクロは ppv の値が指すインターフェイスに基づいて正しい IID を提供するため、コーディング エラーの可能性を排除できます。

次のコード例は、このメソッドをラップするヘルパー関数 SHResolveFolderPathInLibrary を示しています。

//
// from shobjidl.h
//
__inline HRESULT SHResolveFolderPathInLibrary(
    __in IShellLibrary *plib,
    __in PCWSTR pszFolderPath,
    __in DWORD dwTimeout,
    __deref_out PWSTR *ppszResolvedPath
)
{
    *ppszResolvedPath = NULL;
    PIDLIST_ABSOLUTE pidlFolder = 
      SHSimpleIDListFromPath(pszFolderPath);
    HRESULT hr = pidlFolder ? S_OK : E_INVALIDARG;
    if (SUCCEEDED(hr))
    {
        IShellItem *psiFolder;
        hr = SHCreateItemFromIDList(
          pidlFolder, 
          IID_PPV_ARGS(&psiFolder));

        if (SUCCEEDED(hr))
        {
            IShellItem *psiResolved;
            hr = plib->ResolveFolder(
              psiFolder, 
              dwTimeout, 
              IID_PPV_ARGS(&psiResolved));

            if (SUCCEEDED(hr))
            {
                hr = psiResolved->GetDisplayName(
                  SIGDN_DESKTOPABSOLUTEPARSING, 
                  ppszResolvedPath);
                psiResolved->Release();
            }
            psiFolder->Release();
        }
        CoTaskMemFree(pidlFolder);
    }
    return hr;
}
vtbl 9 HRESULT GetDefaultSaveFolder(DEFAULTSAVEFOLDERTYPE dsft, GUID* riid, void** ppv)

ライブラリが保存操作に使用する既定の対象フォルダーを取得します。

dsftDEFAULTSAVEFOLDERTYPEin取得する保存フォルダーを指定する DEFAULTSAVEFOLDERTYPE 値。
riidGUID*in保存場所を表す、ppv で取得するインターフェイスの IID への参照。この値は通常 IID_IShellItem ですが、IID_IShellItem2、または CShellItem によって実装されるその他のインターフェイスの IID を指定することもできます。
ppvvoid**outriid で要求したインターフェイスへのポインター。

戻り値

型: HRESULT

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

解説(Remarks)

最良の結果を得るには、riid パラメーターと ppv パラメーターに、Objbase.h で定義されている IID_PPV_ARGS マクロを使用してください。このマクロは ppv の値が指すインターフェイスに基づいて正しい IID を提供するため、コーディング エラーの可能性を排除できます。

vtbl 10 HRESULT SetDefaultSaveFolder(DEFAULTSAVEFOLDERTYPE dsft, IShellItem* psi)

ライブラリが保存操作に使用する既定の対象フォルダーを設定します。

dsftDEFAULTSAVEFOLDERTYPEin設定する既定の保存場所を指定する DEFAULTSAVEFOLDERTYPE 値。
psiIShellItem*in既定の保存場所として使用するフォルダーを表す IShellItem オブジェクト。このオブジェクトが表すフォルダーは、既にライブラリ内にあるフォルダーである必要があります。

戻り値

型: HRESULT

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

解説(Remarks)

既定の保存場所は有効であり、読み取り/書き込みアクセス権を持ち、かつ SFGAO_STREAM または SFGAO_FILESYSTEM 属性のいずれかが設定されている必要があります。

psi がライブラリ内にない場合、このメソッドはエラーを返します。

vtbl 11 HRESULT GetOptions(LIBRARYOPTIONFLAGS* plofOptions)

ライブラリのオプションを取得します。

plofOptionsLIBRARYOPTIONFLAGS*outこのライブラリのライブラリ オプション。LIBRARYOPTIONFLAGS はビット単位の列挙子であり、複数のフラグを設定できることを意味します。

戻り値

型: HRESULT

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

vtbl 12 HRESULT SetOptions(LIBRARYOPTIONFLAGS lofMask, LIBRARYOPTIONFLAGS lofOptions)

ライブラリのオプションを設定します。

lofMaskLIBRARYOPTIONFLAGSinこの呼び出しで変更する LIBRARYOPTIONFLAGS 値を指定するビットマスク。
lofOptionsLIBRARYOPTIONFLAGSin変更する各 LIBRARYOPTIONFLAGS 値の新しい値を指定するビットマスク。lofMask で設定されていない LIBRARYOPTIONFLAGS 値は、この呼び出しでは変更されません。

戻り値

型: HRESULT

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

解説(Remarks)

LIBRARYOPTIONFLAGS はビット単位の列挙子であり、複数のオプション フラグを設定できることを意味します。

オプション値を変更するには、変更するオプション値を lofMask に設定し、その上で lofOptions でオプションの値を設定またはクリアする必要があります。

次の例では、LOF_PINNEDTONAVPANE ライブラリ オプションをクリアします。


LIBRARYOPTIONFLAGS	maskValue;
LIBRARYOPTIONFLAGS optionValue;
HRESULT	hr = E_FAIL;

// set the maskValue variable to indicate
// which option value to change
maskValue = LOF_PINNEDTONAVPANE;

// set the optionValue variable to indicate
// the new value of the option
optionValue = ~LOF_PINNEDTONAVPANE;

// call the method
hr = library->SetOptions (maskValue, optionValue);
vtbl 13 HRESULT GetFolderType(GUID* pftid)

ライブラリのフォルダー タイプを取得します。

pftidGUID*outフォルダーに適用されるビュー テンプレート。通常はフォルダーの用途と内容に基づきます。

戻り値

型: HRESULT

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

解説(Remarks)

フォルダー タイプは、フォルダーが使用する既定のビュー テンプレートを決定します。ビュー テンプレートは、フォルダーの Windows エクスプローラー ビューに既定で表示される列と詳細を指定します。

FOLDERTYPEID 値は shlguid.h で定義されている GUID 値です。

vtbl 14 HRESULT SetFolderType(GUID* ftid)

ライブラリのフォルダー タイプを設定します。

ftidGUID*inフォルダーに適用されるビュー テンプレートを表す GUID または FOLDERTYPEID。通常はフォルダーの用途と内容に基づきます。

戻り値

型: HRESULT

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

解説(Remarks)

フォルダー タイプは、フォルダーが使用する既定のビュー テンプレートを決定します。ビュー テンプレートは、Windows エクスプローラーでフォルダーの既定ビューに既定で表示される列と詳細を指定します。FOLDERTYPEID 値は shlguid.h で定義されている GUID 値です。

vtbl 15 HRESULT GetIcon(LPWSTR* ppszIcon)

ライブラリの既定のアイコンを取得します。

ppszIconLPWSTR*out

既定のアイコンの場所を記述する null で終わる Unicode 文字列。この文字列は ModuleFileName,ResourceIndex または ModuleFileName,-ResourceID の形式で返されます。

説明
ModuleFileName アイコン リソースを含むモジュール ファイルのファイル名。
ResourceIndex コンマに続く数値が正の場合、モジュール ファイル内のリソースのインデックス。
-ResourceID コンマに続く数値が負の場合、その数値の絶対値がモジュール ファイル内のアイコンのリソース ID です。

戻り値

型: HRESULT

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

解説(Remarks)

ppszIcon で返される文字列の解析に関する追加情報については、PathParseIconLocation を参照してください。

vtbl 16 HRESULT SetIcon(LPWSTR pszIcon)

ライブラリの既定のアイコンを設定します。

pszIconLPWSTRin

既定のアイコンの場所を記述する null で終わる Unicode 文字列。この文字列は ModuleFileName,ResourceIndex または ModuleFileName,-ResourceID の形式にする必要があります。

説明
ModuleFileName アイコン リソースを含むモジュール ファイルのファイル名。
ResourceIndex モジュール ファイル内のアイコン リソースのインデックスを指定する正の 10 進数。
-ResourceID 絶対値がモジュール ファイル内のアイコン リソースのリソース ID である負の 10 進数。

戻り値

型: HRESULT

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

解説(Remarks)

pszIcon パラメーターの形式の詳細については、PathParseIconLocation を参照してください。

vtbl 17 HRESULT Commit()

既存のライブラリ定義ファイルにライブラリの更新をコミットします。

戻り値

型: HRESULT

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

解説(Remarks)

IShellLibrary::Commit は、既存のファイルにライブラリの更新を保存する場合にのみ呼び出せます。バッキング ファイルを持たないライブラリに対して IShellLibrary::Commit を呼び出すと失敗します。

新しいファイルを作成して保存するには、IShellLibrary::Save または SHSaveLibraryInFolderPath を呼び出します。

ライブラリが Libraries 既知フォルダー (FOLDERID_Libraries) に保存されると、ライブラリ内のフォルダーは自動的に検索インデックスに追加されます。

vtbl 18 HRESULT Save(IShellItem* psiFolderToSaveIn, LPWSTR pszLibraryName, LIBRARYSAVEFLAGS lsf, IShellItem** ppsiSavedTo)

ライブラリを新しいライブラリ定義 (*.library-ms) ファイルに保存します。

psiFolderToSaveInIShellItem*inライブラリを保存するフォルダーを指定する IShellItem オブジェクト。ユーザーの既定のライブラリとともに FOLDERID_Libraries 既知フォルダーにライブラリを保存する場合は NULL を指定します。
pszLibraryNameLPWSTRinライブラリを保存する際のファイル名。ファイル名にはファイル名拡張子を含めないでください。ファイル名拡張子は自動的に追加されます。
lsfLIBRARYSAVEFLAGSinライブラリ名の衝突を処理する方法を指定する LIBRARYSAVEFLAGS 値。
ppsiSavedToIShellItem**outライブラリの保存先となったライブラリ定義ファイルを表す IShellItem オブジェクト。

戻り値

型: HRESULT

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

解説(Remarks)

IShellLibrary::SaveSHSaveLibraryInFolderPath は新しいライブラリ ファイルを作成し、そのファイルをディスクに保存します。既存のライブラリ ファイルを持つライブラリに加えた変更を保存するには、IShellLibrary::Commit を呼び出します。

ライブラリが Libraries 既知フォルダー (FOLDERID_Libraries) に保存されると、ライブラリの場所は自動的にシステム インデックスに追加されます。

利便性のため、このメソッドの代わりに SHSaveLibraryInFolderPath を使用できます。

次のコード例は、このメソッドをラップするヘルパー関数 SHSaveLibraryInFolderPath を示しています。

//
// from shobjidl.h
//
__inline HRESULT SHSaveLibraryInFolderPath(
    __in IShellLibrary *plib, 
    __in PCWSTR pszFolderPath, 
    __in PCWSTR pszLibraryName, 
    __in LIBRARYSAVEFLAGS lsf, 
    __deref_opt_out PWSTR *ppszSavedToPath
)
{
    if (ppszSavedToPath)
    {
        *ppszSavedToPath = NULL;
    }

    IShellItem *psiFolder;
    HRESULT hr = SHCreateItemFromParsingName(
      pszFolderPath, 
      NULL, 
      IID_PPV_ARGS(&psiFolder));

    if (SUCCEEDED(hr))
    {
        IShellItem *psiSavedTo;
        hr = plib->Save(psiFolder, pszLibraryName, lsf, &psiSavedTo);

        if (SUCCEEDED(hr))
        {
            if (ppszSavedToPath)
            {
                hr = psiSavedTo->GetDisplayName(
                  SIGDN_DESKTOPABSOLUTEPARSING, 
                  ppszSavedToPath);
            }
            psiSavedTo->Release();
        }
        psiFolder->Release();
    }
    return hr;
}
vtbl 19 HRESULT SaveInKnownFolder(GUID* kfidToSaveIn, LPWSTR pszLibraryName, LIBRARYSAVEFLAGS lsf, IShellItem** ppsiSavedTo)

ライブラリを指定した既知フォルダー内の新しいファイルに保存します。

kfidToSaveInGUID*in

IShellLibrary オブジェクトを保存する既知フォルダーの ID。

詳細については、KNOWNFOLDERID を参照してください。

pszLibraryNameLPWSTRinライブラリを保存する際のファイル名。ファイル名にはファイル名拡張子を含めないでください。ファイル名拡張子は自動的に追加されます。
lsfLIBRARYSAVEFLAGSinライブラリ名の衝突を処理する方法を指定する LIBRARYSAVEFLAGS 値。
ppsiSavedToIShellItem**outライブラリの保存先となったライブラリ定義ファイルを表す IShellItem オブジェクト。

戻り値

型: HRESULT

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

解説(Remarks)

IShellLibrary::SaveSHSaveLibraryInFolderPath は新しいライブラリ ファイルを作成し、そのファイルをディスクに保存します。

既存のライブラリ ファイルを持つライブラリに加えた変更を保存するには、IShellLibrary::Commit を呼び出します。

ライブラリが Libraries 既知フォルダー (FOLDERID_Libraries) に保存されると、ライブラリの場所は自動的にシステム インデックスに追加されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IShellLibrary "{11A66EFA-382E-451A-9234-1E0E12EF3085}"
#usecom global IShellLibrary IID_IShellLibrary "{D9B3211D-E57F-4426-AAEF-30A806ADD397}"
#comfunc global IShellLibrary_LoadLibraryFromItem         3 sptr,int
#comfunc global IShellLibrary_LoadLibraryFromKnownFolder  4 var,int
#comfunc global IShellLibrary_AddFolder                   5 sptr
#comfunc global IShellLibrary_RemoveFolder                6 sptr
#comfunc global IShellLibrary_GetFolders                  7 int,var,sptr
#comfunc global IShellLibrary_ResolveFolder               8 sptr,int,var,sptr
#comfunc global IShellLibrary_GetDefaultSaveFolder        9 int,var,sptr
#comfunc global IShellLibrary_SetDefaultSaveFolder        10 int,sptr
#comfunc global IShellLibrary_GetOptions                  11 var
#comfunc global IShellLibrary_SetOptions                  12 int,int
#comfunc global IShellLibrary_GetFolderType               13 var
#comfunc global IShellLibrary_SetFolderType               14 var
#comfunc global IShellLibrary_GetIcon                     15 var
#comfunc global IShellLibrary_SetIcon                     16 wstr
#comfunc global IShellLibrary_Commit                      17
#comfunc global IShellLibrary_Save                        18 sptr,wstr,int,sptr
#comfunc global IShellLibrary_SaveInKnownFolder           19 var,wstr,int,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。