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

IFileOperationProgressSink

COM
IID04b0f1a7-9490-44bc-96e1-4296a31252e2継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IFileOperation を呼び出す側が、そのインターフェイスを通じて実行している操作の詳細を監視するために使用する、高機能な通知システムを提供するメソッドを公開します。

解説(Remarks)

実装するタイミング

アプリケーションは IFileOperationProgressSink を自身で実装する必要があります。Windows は既定の実装を提供しません。

使用するタイミング

IFileOperationProgressSink は、本質的に特定のイベントに対するハンドラーです。通常、その時点で処理されている具体的な処理に関する情報(ファイル名、コピー元とコピー先、コピー先での項目の新しい名前など)を表示するために使用されます。Post 系メソッドは操作の各部分の HRESULT を受け取るため、呼び出し側は処理が失敗した場合にどこで失敗したかを具体的に特定できます。IFileOperation のメソッドのパラメーター値は、適切な IFileOperationProgressSink のメソッドに渡されるため、それらのメソッドは同じ情報にアクセスできます。

IFileOperation の呼び出しに IFileOperationProgressSink の実装をアタッチするには、次の 2 つの方法があります。

Advise を呼び出す場合、IFileOperationProgressSink を特定の IFileOperation メソッドに渡す必要はありません。そのようにすると IFileOperationProgressSink のメソッドが重複して呼び出され、通知も重複するためです。

選択したメソッドにのみ IFileOperationProgressSink を渡す場合、それらすべてに対して同じ IFileOperationProgressSink のインスタンスを使用できます。

次の例では、Advise メソッドを呼び出して、IFileOperation のインスタンスに IFileOperationProgressSink を渡します。
IFileOperation *pfo;
CoCreateInstance(CLSID_FileOperation, NULL, CLSCTX_ALL, IID_IFileOperation, (void **)&m_pFO)
HRESULT hr = SHCreateFileOperation(hwnd, 0, IID_PPV_ARGS(&pfo));
if (SUCCEEDED(hr))
{
    // Advise to get notifications
    DWORD dwCookie;
    hr = pfo->Advise(SAFECAST(this, IFileOperationProgressSink*), &dwCookie);
}

メソッド 16

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

vtbl 3 HRESULT StartOperations()

個々のファイル操作が実行される前に、呼び出し側が実装したアクションを実行します。

戻り値

型: HRESULT

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

解説(Remarks)

StartOperations は、PerformOperations の後に呼び出される IFileOperationProgressSink メソッドのうち、最初に呼び出されるものです。ファイル操作が開始される前に必要なセットアップや初期化を行うために使用できます。

vtbl 4 HRESULT FinishOperations(HRESULT hrResult)

IFileOperation の呼び出しによって実行される最後の操作が完了した後に、呼び出し側が実装したアクションを実行します。

hrResultHRESULTin最終操作の戻り値。これは、操作をキューに登録するだけの IFileOperation のいずれかのメソッドが返す HRESULT ではないことに注意してください。これは、コピー、削除、移動などの実際の操作の結果です。

戻り値

型: HRESULT

使用されません。

vtbl 5 HRESULT PreRenameItem(DWORD dwFlags, IShellItem* psiItem, LPWSTR pszNewName)

各項目の名前変更処理が始まる前に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDin操作を制御するフラグを含むビット単位の値。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiItemIShellItem*in名前変更する項目を指定する IShellItem へのポインター。
pszNewNameLPWSTRin項目の新しい表示名へのポインター。これは null 終端の Unicode 文字列です。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、名前変更操作および IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 6 HRESULT PostRenameItem(DWORD dwFlags, IShellItem* psiItem, LPWSTR pszNewName, HRESULT hrRename, IShellItem* psiNewlyCreated)

各項目の名前変更処理が完了した後に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDin名前変更操作中に使用されたフラグを含むビット単位の値。一部の値は名前変更操作中に設定または変更されることがあります。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiItemIShellItem*in名前変更される前の項目を指定する IShellItem へのポインター。
pszNewNameLPWSTRin項目の新しい表示名へのポインター。これは null 終端の Unicode 文字列です。名前の衝突やその他の命名規則により、要求した名前とは異なる場合があることに注意してください。
hrRenameHRESULTin名前変更操作の戻り値。これは、名前変更操作をキューに登録するだけの RenameItem が返す HRESULT ではないことに注意してください。これは、実際の名前変更操作の結果です。
psiNewlyCreatedIShellItem*in新しい名前を持つ項目を表す IShellItem へのポインター。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 7 HRESULT PreMoveItem(DWORD dwFlags, IShellItem* psiItem, IShellItem* psiDestinationFolder, LPWSTR pszNewName)

各項目の移動処理が始まる前に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDin操作を制御するフラグを含むビット単位の値。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiItemIShellItem*in移動する項目を指定する IShellItem へのポインター。
psiDestinationFolderIShellItem*in移動した項目を格納する移動先フォルダーを指定する IShellItem へのポインター。
pszNewNameLPWSTRin新しい場所での項目の新しい名前へのポインター。これは null 終端の Unicode 文字列であり、NULL にすることができます。NULL の場合、移動先の項目の名前はコピー元と同じになります。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、移動操作および IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 8 HRESULT PostMoveItem(DWORD dwFlags, IShellItem* psiItem, IShellItem* psiDestinationFolder, LPWSTR pszNewName, HRESULT hrMove, IShellItem* psiNewlyCreated)

各項目の移動処理が完了した後に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDin移動操作中に使用されたフラグを含むビット単位の値。一部の値は移動操作中に設定または変更されることがあります。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiItemIShellItem*inコピー元の項目を指定する IShellItem へのポインター。
psiDestinationFolderIShellItem*in移動した項目を格納する移動先フォルダーを指定する IShellItem へのポインター。
pszNewNameLPWSTRin移動後に項目に付けられた名前へのポインター。これは null 終端の Unicode 文字列です。名前の衝突やその他の命名規則により、要求した名前とは異なる場合があることに注意してください。
hrMoveHRESULTin移動操作の戻り値。これは、移動操作をキューに登録するだけの MoveItem が返す HRESULT ではないことに注意してください。これは、実際の移動の結果です。
psiNewlyCreatedIShellItem*in新しい場所に移動した項目を表す IShellItem へのポインター。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 9 HRESULT PreCopyItem(DWORD dwFlags, IShellItem* psiItem, IShellItem* psiDestinationFolder, LPWSTR pszNewName)

各項目のコピー処理が始まる前に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDin操作を制御するフラグを含むビット単位の値。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiItemIShellItem*inコピー元の項目を指定する IShellItem へのポインター。
psiDestinationFolderIShellItem*in項目のコピーを格納する移動先フォルダーを指定する IShellItem へのポインター。
pszNewNameLPWSTRinコピー後の項目の新しい名前へのポインター。これは null 終端の Unicode 文字列であり、NULL にすることができます。NULL の場合、移動先の項目の名前はコピー元と同じになります。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、コピー操作および IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 10 HRESULT PostCopyItem(DWORD dwFlags, IShellItem* psiItem, IShellItem* psiDestinationFolder, LPWSTR pszNewName, HRESULT hrCopy, IShellItem* psiNewlyCreated)

各項目のコピー処理が完了した後に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDinコピー操作中に使用されたフラグを含むビット単位の値。一部の値はコピー操作中に設定または変更されることがあります。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiItemIShellItem*inコピー元の項目を指定する IShellItem へのポインター。
psiDestinationFolderIShellItem*in項目のコピー先となった移動先フォルダーを指定する IShellItem へのポインター。
pszNewNameLPWSTRinコピー後に項目に付けられた新しい名前へのポインター。これは null 終端の Unicode 文字列です。名前の衝突やその他の命名規則により、要求した名前とは異なる場合があることに注意してください。
hrCopyHRESULTinコピー操作の戻り値。これは、コピー操作をキューに登録するだけの CopyItem が返す HRESULT ではないことに注意してください。これは、実際のコピーの結果です。
psiNewlyCreatedIShellItem*in項目の新しいコピーを表す IShellItem へのポインター。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 11 HRESULT PreDeleteItem(DWORD dwFlags, IShellItem* psiItem)

各項目の削除処理が始まる前に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDin操作を制御するフラグを含むビット単位の値。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiItemIShellItem*in削除する項目を指定する IShellItem へのポインター。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、削除操作および IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 12 HRESULT PostDeleteItem(DWORD dwFlags, IShellItem* psiItem, HRESULT hrDelete, IShellItem* psiNewlyCreated)

各項目の削除処理が完了した後に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDin削除操作中に使用されたフラグを含むビット単位の値。一部の値は削除操作中に設定または変更されることがあります。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiItemIShellItem*in削除された項目を指定する IShellItem へのポインター。
hrDeleteHRESULTin削除操作の戻り値。これは、削除操作をキューに登録するだけの DeleteItem が返す HRESULT ではないことに注意してください。これは、実際の削除の結果です。
psiNewlyCreatedIShellItem*inごみ箱に入った、削除された項目を指定する IShellItem へのポインター。項目が完全に削除された場合、この値は NULL になります。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 13 HRESULT PreNewItem(DWORD dwFlags, IShellItem* psiDestinationFolder, LPWSTR pszNewName)

新しい項目を作成する処理が始まる前に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDin操作を制御するフラグを含むビット単位の値。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiDestinationFolderIShellItem*in新しい項目を格納する移動先フォルダーを指定する IShellItem へのポインター。
pszNewNameLPWSTRin新しい項目のファイル名へのポインター(例: Newfile.txt)。これは null 終端の Unicode 文字列です。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、この操作および IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 14 HRESULT PostNewItem(DWORD dwFlags, IShellItem* psiDestinationFolder, LPWSTR pszNewName, LPWSTR pszTemplateName, DWORD dwFileAttributes, HRESULT hrNew, IShellItem* psiNewItem)

新しい項目が作成された後に、呼び出し側が実装したアクションを実行します。

dwFlagsDWORDin作成操作中に使用されたフラグを含むビット単位の値。一部の値は作成操作中に設定または変更されることがあります。フラグの説明については TRANSFER_SOURCE_FLAGS を参照してください。
psiDestinationFolderIShellItem*in新しい項目が追加された移動先フォルダーを指定する IShellItem へのポインター。
pszNewNameLPWSTRin新しい項目のファイル名へのポインター(例: Newfile.txt)。これは null 終端の Unicode 文字列です。
pszTemplateNameLPWSTRin

新しい項目の基になるテンプレートファイル(例: Excel9.xls)の名前へのポインター。次のいずれかの場所に格納されています。

  • CSIDL_COMMON_TEMPLATES。このフォルダーの既定のパスは %ALLUSERSPROFILE%\Templates です。
  • CSIDL_TEMPLATES。このフォルダーの既定のパスは %USERPROFILE%\Templates です。
  • %SystemRoot%\shellnew
これは null 終端の Unicode 文字列で、新しいファイルと同じ種類の既存ファイルを指定するために使用され、アプリケーションが新しいファイルに含めたい最小限のコンテンツを含みます。

このパラメーターは通常、新しい空のファイルを指定するために NULL にします。

dwFileAttributesDWORDin新しい項目に適用されるファイル属性。GetFileAttributes にある値の 1 つ以上を指定します。
hrNewHRESULTin作成操作の戻り値。これは、作成操作をキューに登録するだけの NewItem が返す HRESULT ではないことに注意してください。これは、実際の作成の結果です。
psiNewItemIShellItem*in新しい項目を表す IShellItem へのポインター。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。エラー値の場合、IFileOperation の呼び出しによって保留されている以降のすべての操作がキャンセルされます。

vtbl 15 HRESULT UpdateProgress(DWORD iWorkTotal, DWORD iWorkSoFar)

現在完了している作業量を、総作業量との関係で見積もった値を提供します。

iWorkTotalDWORDin完了すべき作業量の見積もり。
iWorkSoFarDWORDinこれまでに完了した iWorkTotal の割合。

戻り値

型: HRESULT

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

解説(Remarks)

iWorkTotaliWorkSoFar の値は、実行すべき作業量とその完了度を表す「ポイント」または見積もりです。特定の単位で指定されるものではありませんが、処理全体にかかる時間におおよそ比例するようにします。たとえば、1 つの小さなファイルのコピーを 2 ポイント、大きなファイルを 10 ポイントと見なすことができます。5 つの小さなファイルと 1 つの大きなファイルをコピーする操作を実行しているプロセスが、小さなファイルのうち 4 つを完了した場合、iWorkSoFar は 8 ポイント(4 × 2 = 8)、iWorkTotal は 20 ポイント(5 × 2 + 10 = 20)となり、見積もりは 20 ポイント中 8 ポイント(つまり 40%)完了となります。

vtbl 16 HRESULT ResetTimer()

サポートされていません。(IFileOperationProgressSink.ResetTimer)

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは E_NOTIMPL ではなく S_OK を返す必要があります。

vtbl 17 HRESULT PauseTimer()

サポートされていません。(IFileOperationProgressSink.PauseTimer)

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは E_NOTIMPL ではなく S_OK を返す必要があります。

vtbl 18 HRESULT ResumeTimer()

サポートされていません。(IFileOperationProgressSink.ResumeTimer)

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは E_NOTIMPL ではなく S_OK を返す必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IFileOperationProgressSink "{04B0F1A7-9490-44BC-96E1-4296A31252E2}"
#usecom global IFileOperationProgressSink IID_IFileOperationProgressSink "{}"
#comfunc global IFileOperationProgressSink_StartOperations   3
#comfunc global IFileOperationProgressSink_FinishOperations  4 int
#comfunc global IFileOperationProgressSink_PreRenameItem     5 int,sptr,wstr
#comfunc global IFileOperationProgressSink_PostRenameItem    6 int,sptr,wstr,int,sptr
#comfunc global IFileOperationProgressSink_PreMoveItem       7 int,sptr,sptr,wstr
#comfunc global IFileOperationProgressSink_PostMoveItem      8 int,sptr,sptr,wstr,int,sptr
#comfunc global IFileOperationProgressSink_PreCopyItem       9 int,sptr,sptr,wstr
#comfunc global IFileOperationProgressSink_PostCopyItem      10 int,sptr,sptr,wstr,int,sptr
#comfunc global IFileOperationProgressSink_PreDeleteItem     11 int,sptr
#comfunc global IFileOperationProgressSink_PostDeleteItem    12 int,sptr,int,sptr
#comfunc global IFileOperationProgressSink_PreNewItem        13 int,sptr,wstr
#comfunc global IFileOperationProgressSink_PostNewItem       14 int,sptr,wstr,wstr,int,int,sptr
#comfunc global IFileOperationProgressSink_UpdateProgress    15 int,int
#comfunc global IFileOperationProgressSink_ResetTimer        16
#comfunc global IFileOperationProgressSink_PauseTimer        17
#comfunc global IFileOperationProgressSink_ResumeTimer       18
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。