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

IFileDialog

COM
IID42f85136-db7e-439c-85f1-e4075d135fc8継承元IModalWindow自前メソッド開始 vtbl4

公式ドキュメント

共通ファイルダイアログの初期化、表示、および結果の取得を行うメソッドを公開します。

解説(Remarks)

実装するタイミング

IFileDialog は、共通のファイルを開くダイアログ (CLSID_FileOpenDialog) およびファイルを保存するダイアログ (CLSID_FileSaveDialog) によって実装されます。

メソッド 23

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

vtbl 4 HRESULT SetFileTypes(DWORD cFileTypes, COMDLG_FILTERSPEC* rgFilterSpec)

ダイアログで開くまたは保存できるファイルの種類を設定します。

cFileTypesDWORDinrgFilterSpec で指定される配列内の要素数です。
rgFilterSpecCOMDLG_FILTERSPEC*inそれぞれがファイルの種類を表す COMDLG_FILTERSPEC 構造体の配列へのポインターです。

戻り値

型: HRESULT

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

戻り値 説明
E_UNEXPECTED

SetFileTypes が既に呼び出されています。

E_UNEXPECTED
IFileDialog::SetOptions メソッドで FOS_PICKFOLDERS フラグが設定されています。
E_INVALIDARG
rgFilterSpec パラメーターが NULL です。

解説(Remarks)

開くダイアログを使用する場合、そこで宣言されたファイルの種類はビューをフィルターするために使用されます。保存ダイアログを使用する場合、これらの値はファイル名にどの拡張子が付加されるかを決定します。

このメソッドはダイアログを表示する前に呼び出す必要があり、各ダイアログインスタンスに対して 1 回だけ呼び出すことができます。ファイルの種類は、共通アイテムダイアログボックスが表示された後は変更できません。

次のコード例は、このメソッドのコンテキストにおける COMDLG_FILTERSPEC 構造体の配列の使用方法を示しています。この例の配列は 3 つの COMDLG_FILTERSPEC 構造体で構成されています。1 つ目はダイアログフィルターに対して 2 つのパターンを宣言し、2 つ目は単一のパターンを宣言し、最後のものはすべての種類のファイルを表示します。変数 szJPG、szBMP、および szAll は、各フィルターにわかりやすい名前を提供する、事前に宣言された文字列であると想定します。

COMDLG_FILTERSPEC rgSpec[] =
{ 
    { szJPG, L"*.jpg;*.jpeg" },
    { szBMP, L"*.bmp" },
    { szAll, L"*.*" },
};
vtbl 5 HRESULT SetFileTypeIndex(DWORD iFileType)

ダイアログで選択された状態として表示されるファイルの種類を設定します。

iFileTypeDWORDinIFileDialog::SetFileTypescFileTypes パラメーターに渡されたファイルの種類の配列における、ファイルの種類のインデックスです。これは 0 から始まるインデックスではなく、1 から始まるインデックスであることに注意してください。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはダイアログを表示する前に呼び出す必要があります。

vtbl 6 HRESULT GetFileTypeIndex(DWORD* piFileType)

現在選択されているファイルの種類を取得します。

piFileTypeDWORD*out

IFileDialog::SetFileTypescFileTypes パラメーターに渡されたファイルの種類の配列における、選択されたファイルの種類のインデックスを受け取る UINT 値へのポインターです。

注意 これは 0 から始まるインデックスではなく、1 から始まるインデックスです。

戻り値

型: HRESULT

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

解説(Remarks)

IFileDialog::GetFileTypeIndex は、ダイアログが開いている間、または閉じた後のいずれでも呼び出すことができます。

vtbl 7 HRESULT Advise(IFileDialogEvents* pfde, DWORD* pdwCookie)

ダイアログから発生するイベントをリッスンするイベントハンドラーを割り当てます。

pfdeIFileDialogEvents*inダイアログからイベントを受け取る IFileDialogEvents 実装へのポインターです。
pdwCookieDWORD*outこのイベントハンドラーを識別する値を受け取る DWORD へのポインターです。クライアントがダイアログの使用を終えたら、その値を指定して IFileDialog::Unadvise メソッドを呼び出す必要があります。

戻り値

型: HRESULT

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

vtbl 8 HRESULT Unadvise(DWORD dwCookie)

IFileDialog::Advise メソッドを通じてアタッチされたイベントハンドラーを削除します。

dwCookieDWORDinイベントハンドラーを表す DWORD 値です。この値は IFileDialog::Advise メソッドの pdwCookie パラメーターを通じて取得されます。

戻り値

型: HRESULT

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

vtbl 9 HRESULT SetOptions(FILEOPENDIALOGOPTIONS fos)

ダイアログの動作を制御するフラグを設定します。

fosFILEOPENDIALOGOPTIONSin1 つ以上の FILEOPENDIALOGOPTIONS 値です。

戻り値

型: HRESULT

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

解説(Remarks)

一般に、このメソッドには IFileDialog::GetOptions で取得した値を渡し、適切なフラグを設定してオプションを追加または除外するように変更する必要があります。

vtbl 10 HRESULT GetOptions(FILEOPENDIALOGOPTIONS* pfos)

ダイアログの動作を制御するために設定されている現在のフラグを取得します。

pfosFILEOPENDIALOGOPTIONS*outこのメソッドが正常に返されると、1 つ以上の FILEOPENDIALOGOPTIONS 値で構成される値を指します。

戻り値

型: HRESULT

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

vtbl 11 HRESULT SetDefaultFolder(IShellItem* psi)

最近使用したフォルダーの値が利用できない場合に、既定として使用されるフォルダーを設定します。

psiIShellItem*inフォルダーを表すインターフェースへのポインターです。

戻り値

型: HRESULT

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

vtbl 12 HRESULT SetFolder(IShellItem* psi)

以前のユーザー操作に関係なく、ダイアログを開いたときに常に選択されるフォルダーを設定します。

psiIShellItem*inフォルダーを表すインターフェースへのポインターです。

戻り値

型: HRESULT

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

解説(Remarks)

このフォルダーは、あらゆる「最近使用した」フォルダーよりも優先されます。このメソッドがダイアログの表示中に呼び出された場合、ダイアログは指定されたフォルダーに移動します。

一般に、このメソッドの使用は推奨されません。ダイアログボックスを表示する前に SetFolder を呼び出すと、ユーザーが最後に保存または開いた場所が表示されなくなります。この動作に非常に特殊な理由がない限り、良好で期待される操作体験とは言えないため、避けるべきです。ほとんどすべての場合において、IFileDialog::SetDefaultFolder の方が適切なメソッドです。

Windows 7 以降では、psi を通じて指定されたフォルダーのパスが既知のフォルダーの既定のパスである場合、その既知のフォルダーの現在のパスがダイアログで使用されます。そのパスは、psi で指定されたパスと同じでない場合があります。たとえば、既知のフォルダーがリダイレクトされている場合などです。既知のフォルダーがライブラリ (仮想フォルダーのドキュメント、ミュージック、ピクチャ、ビデオ) である場合、ライブラリのパスがダイアログで使用されます。指定されたライブラリが非表示になっている場合 (Windows 8.1 以降では既定で非表示です)、ライブラリの既定の保存場所 (たとえばドキュメントライブラリの場合は Microsoft OneDrive のドキュメントフォルダー) がダイアログで使用されます。これらのマッピングにより、ダイアログで使用されるフォルダーの場所は、このメソッドを呼び出したときに指定したものと正確には一致しない場合があります。

vtbl 13 HRESULT GetFolder(IShellItem** ppsi)

ダイアログで現在選択されているフォルダー、またはダイアログが現在表示されていない場合はダイアログを開いたときに選択されるフォルダーを取得します。

ppsiIShellItem**outフォルダーを表すインターフェースへのポインターのアドレスです。

戻り値

型: HRESULT

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

解説(Remarks)

取得した IShellItem が不要になったら、それを解放する責任は呼び出し側のアプリケーションにあります。

vtbl 14 HRESULT GetCurrentSelection(IShellItem** ppsi)

ダイアログにおけるユーザーの現在の選択を取得します。

ppsiIShellItem**outダイアログで現在選択されているアイテムを表すインターフェースへのポインターのアドレスです。このアイテムは、ビューウィンドウで選択されたファイルまたはフォルダー、あるいはユーザーがダイアログの編集ボックスに入力したものである場合があります。後者の場合、現在のスレッドをブロックする解析処理 (ユーザーによってキャンセル可能) が必要になることがあります。

戻り値

型: HRESULT

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

解説(Remarks)

取得した IShellItem が不要になったら、それを解放する責任は呼び出し側のアプリケーションにあります。

vtbl 15 HRESULT SetFileName(LPWSTR pszName)

ダイアログボックスを開いたときに [ファイル名] 編集ボックスに表示されるファイル名を設定します。

pszNameLPWSTRinファイルの名前へのポインターです。

戻り値

型: HRESULT

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

vtbl 16 HRESULT GetFileName(LPWSTR* pszName)

ダイアログの [ファイル名] 編集ボックスに現在入力されているテキストを取得します。

pszNameLPWSTR*outこのメソッドが正常に返されたときにテキストを受け取るバッファーへのポインターのアドレスです。

戻り値

型: HRESULT

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

解説(Remarks)

[ファイル名] 編集ボックス内のテキストは、必ずしもユーザーが選択したアイテムを反映しているとは限りません。ユーザーが選択したアイテムを取得するには、IFileDialog::GetResult を使用してください。

取得したバッファーは、CoTaskMemFree 関数を使用して解放する責任が呼び出し側のアプリケーションにあります。

vtbl 17 HRESULT SetTitle(LPWSTR pszTitle)

ダイアログのタイトルを設定します。

pszTitleLPWSTRinタイトルテキストを含むバッファーへのポインターです。

戻り値

型: HRESULT

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

vtbl 18 HRESULT SetOkButtonLabel(LPWSTR pszText)

[開く] または [保存] ボタンのテキストを設定します。

pszTextLPWSTRinボタンのテキストを含むバッファーへのポインターです。

戻り値

型: HRESULT

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

vtbl 19 HRESULT SetFileNameLabel(LPWSTR pszLabel)

ファイル名編集ボックスの横にあるラベルのテキストを設定します。

pszLabelLPWSTRinラベルのテキストを含むバッファーへのポインターです。

戻り値

型: HRESULT

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

vtbl 20 HRESULT GetResult(IShellItem** ppsi)

ユーザーがダイアログで行った選択を取得します。

ppsiIShellItem**outユーザーの選択を表す IShellItem へのポインターのアドレスです。

戻り値

型: HRESULT

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

解説(Remarks)

IFileDialog::GetResult は、ダイアログが閉じた後、または OnFileOk イベントの処理中に呼び出すことができます。それ以外のタイミングでこのメソッドを呼び出すと失敗します。複数のアイテムが選択された場合、このメソッドは失敗します。複数のアイテムの場合は、GetResults を呼び出してください。

IFileDialog::GetResult で結果を利用できるようにするには、Show が成功コードを返している必要があります。

vtbl 21 HRESULT AddPlace(IShellItem* psi, FDAP fdap)

ユーザーがアイテムを開くまたは保存するために利用できる場所のリストにフォルダーを追加します。

psiIShellItem*inユーザーが利用できるようにするフォルダーを表す IShellItem へのポインターです。これはフォルダーのみ指定できます。
fdapFDAPinリスト内のどこにフォルダーを配置するかを指定します。FDAP を参照してください。

戻り値

型: HRESULT

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

解説(Remarks)

SHSetTemporaryPropertyForItem を使用すると、psi パラメーターで表されるアイテムに一時的な PKEY_ItemNameDisplay プロパティを設定できます。このプロパティの値は、アイテムの UI 名の代わりに使用されます。

vtbl 22 HRESULT SetDefaultExtension(LPWSTR pszDefaultExtension)

ファイル名に付加される既定の拡張子を設定します。

pszDefaultExtensionLPWSTRin拡張子のテキストを含むバッファーへのポインターです。この文字列には先頭のピリオドを含めないでください。たとえば "jpg" は正しいですが、".jpg" は正しくありません。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドをダイアログを表示する前に呼び出しておくと、ユーザーが新しいファイルの種類を選択したときにダイアログが既定の拡張子を自動的に更新します (SetFileTypes を参照)。

vtbl 23 HRESULT Close(HRESULT hr)

ダイアログを閉じます。

hrHRESULTin選択が行われる前にダイアログが閉じられたことを示すために Show が返すコードです。

戻り値

型: HRESULT

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

解説(Remarks)

アプリケーションは、ダイアログが開いている間、コールバックメソッドまたは関数からこのメソッドを呼び出すことができます。ダイアログが閉じ、Show メソッドは hr で指定された HRESULT を返します。

このメソッドが呼び出された場合、IFileDialog::GetResult または GetResults メソッドで利用できる結果はなく、これらを呼び出すと失敗します。

vtbl 24 HRESULT SetClientGuid(GUID* guid)

呼び出し側のアプリケーションが、ダイアログの永続化された状態に GUID を関連付けることを可能にします。

guidGUID*inこのダイアログの状態に関連付ける GUID です。

戻り値

型: HRESULT

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

解説(Remarks)

ダイアログの状態には、最後に訪れたフォルダーやダイアログの位置とサイズといった要素が含まれる場合があります。

通常、この状態は実行可能ファイルの名前に基づいて永続化されます。GUID を指定することで、アプリケーションは同一アプリケーション内の異なるバージョンのダイアログ (たとえばインポートダイアログと開くダイアログ) に対して、それぞれ異なる永続化された状態を持つことができます。

IFileDialog::SetClientGuid は、ダイアログオブジェクトの作成直後に呼び出す必要があります。

vtbl 25 HRESULT ClearClientData()

永続化されたすべての状態情報をクリアするようダイアログに指示します。

戻り値

型: HRESULT

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

解説(Remarks)

永続化された情報は、アプリケーションまたは GUID に関連付けることができます。IFileDialog::SetClientGuid を使用して GUID が設定されている場合、その GUID を使用して永続化された情報がクリアされます。

vtbl 26 HRESULT SetFilter(IShellItemFilter* pFilter)

SetFilter は Windows 7 以降では使用できなくなりました。

pFilterIShellItemFilter*in設定する IShellItemFilter へのポインターです。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは、アプリケーションがダイアログボックスのビューから一部のアイテムを除外するために特別なフィルター処理を実行する必要がある場合に使用できます。通常はビューに含まれる各アイテムに対して IncludeItem が呼び出されます。GetEnumFlagsForItem は使用されません。 ファイルの種類でフィルターするには、IFileDialog::SetFileTypes を使用してください。アイテム数が多いフォルダーでは、IShellItemFilter を適用するよりも優れたパフォーマンスが得られる場合があるためです。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IFileDialog "{42F85136-DB7E-439C-85F1-E4075D135FC8}"
#usecom global IFileDialog IID_IFileDialog "{}"
#comfunc global IFileDialog_SetFileTypes         4 int,var
#comfunc global IFileDialog_SetFileTypeIndex     5 int
#comfunc global IFileDialog_GetFileTypeIndex     6 var
#comfunc global IFileDialog_Advise               7 sptr,var
#comfunc global IFileDialog_Unadvise             8 int
#comfunc global IFileDialog_SetOptions           9 int
#comfunc global IFileDialog_GetOptions           10 var
#comfunc global IFileDialog_SetDefaultFolder     11 sptr
#comfunc global IFileDialog_SetFolder            12 sptr
#comfunc global IFileDialog_GetFolder            13 sptr
#comfunc global IFileDialog_GetCurrentSelection  14 sptr
#comfunc global IFileDialog_SetFileName          15 wstr
#comfunc global IFileDialog_GetFileName          16 var
#comfunc global IFileDialog_SetTitle             17 wstr
#comfunc global IFileDialog_SetOkButtonLabel     18 wstr
#comfunc global IFileDialog_SetFileNameLabel     19 wstr
#comfunc global IFileDialog_GetResult            20 sptr
#comfunc global IFileDialog_AddPlace             21 sptr,int
#comfunc global IFileDialog_SetDefaultExtension  22 wstr
#comfunc global IFileDialog_Close                23 int
#comfunc global IFileDialog_SetClientGuid        24 var
#comfunc global IFileDialog_ClearClientData      25
#comfunc global IFileDialog_SetFilter            26 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。