IFileOperation
COM公式ドキュメント
Shell アイテムをコピー、移動、名前変更、作成、削除するためのメソッド、および進行状況ダイアログとエラーダイアログを提供するためのメソッドを公開します。このインターフェースは SHFileOperation 関数を置き換えるものです。
解説(Remarks)
Shell アイテムは、ファイルやフォルダーといったファイルシステムオブジェクトだけでなく、仮想オブジェクトも含め、名前空間内の任意のオブジェクトになり得ます。IFileOperation の各メソッドのトピックでは、"アイテム" という用語を、任意の名前空間オブジェクトを総称的に指すために使用します。
IFileOperation は、従来の SHFileOperation 関数と比べて多くの利点があります。
- 文字列パスではなく IShellItem を使用してアイテムを識別します。SHFileOperation では、パス文字列と宛先文字列を、標準的な単一の null 文字ではなく 2 つの null 文字で終端する必要がありました。単一の null 文字自体は、文字列内で複数のパスを区切るために使用されていたためです。IShellItem を通じてアイテムを識別する方が堅牢で、プログラミングエラーが起こりにくくなります。また、仮想フォルダーなどの非ファイルシステムアイテムにもアクセスできます。1 回の操作で複数のアイテムを、文字列としてではなく IShellItemArray、IDataObject、または IEnumShellItems を通じてアクセスするコレクションとして渡すことができます。
- FormatMessage のような API と組み合わせた HRESULT 値による、より正確なエラー報告。SHFileOperation からの戻りコードは、誤解を招いたり不正確であったりすることがありました。
- 拡張性。Component Object Model (COM) インターフェースとして、IFileOperation は、特定のニーズに合わせてサードパーティによってその機能を拡張できます。ただし、これは非常にまれなケースであるべきです。Windows は、ほとんどのユーザーのニーズを満たすはずの IFileOperation の既定の実装を提供しています。
- より優れた進行状況フィードバック。個々のアイテムに対する特定の操作が開始および終了したときの通知や全体的な進行状況を含む、詳細な操作の進行状況を、操作中に受け取ることができます。SHFileOperation も進行状況 UI を提供していましたが、それほど詳細ではありませんでした。
- より多くの機能。SHFileOperation が提供するコピー、削除、移動、名前変更の機能に加えて、IFileOperation ではプロパティ値の適用や新しいアイテムの作成が可能です。
- 操作に対するより多くの制御。SHFileOperation が認識する操作フラグに加えて、IFileOperation::SetOperationFlags では拡張された操作オプションを指定する新しいフラグが認識されます。
- 1 回の呼び出しで異なる操作を実行できます。たとえば、一連のファイルを移動し、別のファイルをコピーし、フォルダーの名前を変更し、さらに別のアイテムにプロパティを適用するといったことを、すべて 1 回の操作で行えます。SHFileOperation では、コピー、移動、名前変更、削除のいずれか 1 つの操作しか一度に実行できませんでした。
- 省略可能。Advise および Unadvise を通じて、進行状況および エラー通知のためのイベントシンクを設定します。
- 必要に応じて以下を使用して操作の状態を設定します。
- 必要に応じて以下を使用して、どのアイテムに対してどの操作を実行するかを指定します。
- PerformOperations を呼び出して操作を実行します。
IFileOperation の拡張を示す完全なサンプルは、Windows Software Development Kit (SDK) に含まれています。既定のインストールでは、%ProgramFiles%\Microsoft SDKs\Windows\v6.0\Samples\WinUI\Shell\AppPlatform\FileOperations にあります。
メソッド 20
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
すべての操作に対して、ハンドラーが状態およびエラー情報を提供できるようにします。
| pfops | IFileOperationProgressSink* | in | 進行状況および エラー通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。 |
| pdwCookie | DWORD* | out | このメソッドが返るとき、このパラメーターはこの接続を一意に識別する返却トークンを指します。呼び出し側アプリケーションは、後でこのトークンを IFileOperation::Unadvise に渡すことで接続を削除するために使用します。Advise の呼び出しが失敗した場合、この値は無意味です。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
いくつかの個別のメソッドには、ここで設定したものとは重複する独自の進行状況シンクを宣言する機能があります。これらは、特定の操作についてのみ進行状況とエラー情報を受け取りたい場合に使用します。
IFileOperation::Advise を通じて以前に確立されたアドバイザリ接続を終了します。
| dwCookie | DWORD | in | 削除する接続を識別する接続トークンです。この値は、接続が確立されたときに Advise によって元々取得されたものです。 |
戻り値
型: HRESULT
ここに記載されている値以外の値は失敗を示します。
| 戻りコード | 説明 |
|---|---|
| 接続が正常に終了しました。 | |
| dwCookie の値が有効な接続を表していません。 |
現在の操作のパラメーターを設定します。
| dwOperationFlags | FILEOPERATION_FLAGS | in | ファイル操作を制御するフラグです。このメンバーは以下のフラグの組み合わせにすることができます。FOF フラグは Shellapi.h で定義され、FOFX フラグは Shobjidl.h で定義されています。 注 このメソッドが呼び出されない場合、操作で使用される既定値は FOF_ALLOWUNDO | FOF_NOCONFIRMMKDIR です。
FOF_ALLOWUNDO (0x0040)可能であれば元に戻す情報を保持します。 Windows Vista より前では、操作は元の操作を実行したのと同じプロセスからのみ元に戻すことができました。 Windows Vista 以降のシステムでは、元に戻す操作のスコープはユーザーセッションです。ユーザーセッション内で実行されている任意のプロセスが、別の操作を元に戻すことができます。元に戻す状態は Explorer.exe プロセスに保持され、そのプロセスが実行されている限り、元に戻す機能を調整できます。 ソースファイルパラメーターに完全修飾されたパスとファイル名が含まれていない場合、このフラグは無視されます。 FOF_FILESONLY (0x0080)ワイルドカードのファイル名 (.) が指定されている場合、ファイルに対してのみ (フォルダーに対しては行わずに) 操作を実行します。 FOF_NOCONFIRMATION (0x0010)表示される任意のダイアログボックスに対して すべてはい で応答します。 FOF_NOCONFIRMMKDIR (0x0200)操作で新しいフォルダーの作成が必要な場合でも、その作成を確認しません。 FOF_NO_CONNECTED_ELEMENTS (0x2000)接続されたアイテムをグループとして移動しません。指定されたファイルのみを移動します。 FOF_NOCOPYSECURITYATTRIBS (0x0800)アイテムのセキュリティ属性をコピーしません。 FOF_NOERRORUI (0x0400)エラーが発生してもユーザーにメッセージを表示しません。このフラグが FOFX_EARLYFAILURE なしで設定されている場合、任意のエラーは、ユーザーがダイアログボックスで 無視 または 続行 を選択したかのように扱われます。現在のアクションを停止し、アクションが中止されたことを示すフラグを設定して、残りの操作を続行します。 FOF_NORECURSION (0x1000)ローカルフォルダー内でのみ操作します。サブディレクトリへ再帰的に操作しません。 FOF_RENAMEONCOLLISION (0x0008)移動、コピー、または名前変更操作で、ターゲット名のアイテムが既に存在する場合、操作対象のアイテムに新しい名前を付けます。 FOF_SILENT (0x0004)進行状況ダイアログボックスを表示しません。 FOF_WANTNUKEWARNING (0x4000)削除操作中にファイルまたはフォルダーがごみ箱へ送られずに破棄される場合に警告を送信します。このフラグは FOF_NOCONFIRMATION を部分的に上書きします。 FOFX_ADDUNDORECORD (0x20000000)Windows 8 で導入。ファイル操作はユーザーが呼び出したものであり、元に戻すスタックに配置する必要があります。このフラグは FOF_ALLOWUNDO よりも推奨されます。 FOFX_NOSKIPJUNCTIONS (0x00010000)Shell 名前空間のジャンクションに入り込みます。既定では、ジャンクションには入りません。ジャンクションの詳細については、Specifying a Namespace Extension's Location を参照してください。 FOFX_PREFERHARDLINK (0x00020000)可能であれば、宛先にファイルの新しいインスタンスを作成するのではなく、ハードリンクを作成します。 FOFX_SHOWELEVATIONPROMPT (0x00040000)操作で昇格された権限が必要で、エラー UI を無効にするために FOF_NOERRORUI フラグが設定されている場合でも、UAC UI プロンプトを表示します。 FOFX_EARLYFAILURE (0x00100000)FOFX_EARLYFAILURE が FOF_NOERRORUI とともに設定されている場合、いずれかの操作でエラーが発生すると操作の一式全体が停止されます。このフラグは FOF_NOERRORUI が設定されている場合にのみ有効です。 FOFX_PRESERVEFILEEXTENSIONS (0x00200000)ファイル名の拡張子を保持するような方法で衝突時の名前変更を行います。このフラグは FOF_RENAMEONCOLLISION も設定されている場合にのみ有効です。 FOFX_KEEPNEWERFILE (0x00400000)衝突が発生した場合、更新日時プロパティに基づいて、より新しいファイルまたはフォルダーを保持します。これはユーザーにプロンプト UI を表示することなく自動的に行われます。 FOFX_NOCOPYHOOKS (0x00800000)コピーフックを使用しません。 FOFX_NOMINIMIZEBOX (0x01000000)進行状況ダイアログを最小化できないようにします。 FOFX_MOVEACLSACROSSVOLUMES (0x02000000)ボリューム間の移動操作を実行する際に、ソースアイテムのセキュリティ属性を宛先アイテムにコピーします。このフラグがない場合、宛先アイテムは新しいフォルダーのセキュリティ属性を受け取ります。 FOFX_DONTDISPLAYSOURCEPATH (0x04000000)進行状況ダイアログにソースアイテムのパスを表示しません。 FOFX_DONTDISPLAYDESTPATH (0x08000000)進行状況ダイアログに宛先アイテムのパスを表示しません。 FOFX_RECYCLEONDELETE (0x00080000)Windows 8 で導入。ファイルが削除されるとき、完全に削除するのではなくごみ箱へ送ります。 FOFX_REQUIREELEVATION (0x10000000)Windows Vista SP1 で導入。ユーザーは権限の昇格が必要になることを想定しているため、昇格の確認を求めるダイアログボックスを表示しません。 FOFX_COPYASDOWNLOAD (0x40000000)Windows 7 で導入。進行状況ダイアログに コピー中 の代わりに ダウンロード中 というメッセージを表示します。 FOFX_DONTDISPLAYLOCATIONS (0x80000000)Windows 7 で導入。進行状況ダイアログに場所の行を表示しません。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
コピー、削除、名前変更など、実行される操作のパラメーターを定義するために、IFileOperation::PerformOperations を呼び出す前にこれらのフラグを設定します。
実装されていません。(IFileOperation.SetProgressMessage)
| pszMessage | LPWSTR | in | ウィンドウタイトルへのポインターです。これは null で終端された Unicode 文字列です。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
操作の進行状況を表示するために使用されるダイアログボックスを指定します。
| popd | IOperationsProgressDialog* | in | ダイアログボックスを表す IOperationsProgressDialog オブジェクトへのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
アイテムに設定するプロパティと値のセットを宣言します。
| pproparray | IPropertyChangeArray* | in | IPropertyChangeArray へのポインターです。これは、設定するプロパティとその新しい値を指定する IPropertyChange オブジェクトのコレクションにアクセスします。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは新しいプロパティ値を設定するのではなく、単にそれらを宣言するだけです。1 つのアイテムまたはアイテムのグループにプロパティ値を設定するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::SetProperties を呼び出して、設定する特定のプロパティとその新しい値を宣言します。
- IFileOperation::ApplyPropertiesToItem または IFileOperation::ApplyPropertiesToItems を呼び出して、プロパティを設定するアイテムを宣言します。
- IFileOperation::PerformOperations を呼び出して、アイテムにプロパティを適用します。
進行状況ウィンドウおよびダイアログウィンドウの親ウィンドウまたはオーナーウィンドウを設定します。
| hwndOwner | HWND | in | 操作のオーナーウィンドウへのハンドルです。このウィンドウがエラーメッセージを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
プロパティ値を設定する単一のアイテムを宣言します。
| psiItem | IShellItem* | in | 新しいプロパティ値を受け取るアイテムへのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはアイテムにプロパティを適用するのではなく、単にアイテムを宣言するだけです。アイテムにプロパティ値を設定するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::SetProperties を呼び出して、設定する特定のプロパティとその新しい値を宣言します。
- IFileOperation::ApplyPropertiesToItem を呼び出して、プロパティを設定するアイテムを宣言します。
- IFileOperation::PerformOperations を呼び出して、アイテムにプロパティを適用します。
共通のプロパティ値のセットを適用するアイテムのセットを宣言します。
| punkItems | IUnknown* | in | アイテムのグループを表す IShellItemArray、IDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::ApplyPropertiesToItem と同じ機能を実現します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはアイテムにプロパティを適用するのではなく、単にアイテムを宣言するだけです。アイテムのグループにプロパティ値を設定するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::SetProperties を呼び出して、設定する特定のプロパティとその新しい値を宣言します。
- IFileOperation::ApplyPropertiesToItems を呼び出して、プロパティ値を設定するアイテムを宣言します。
- IFileOperation::PerformOperations を呼び出して、アイテムにプロパティを適用します。
新しい表示名を付与する単一のアイテムを宣言します。
| psiItem | IShellItem* | in | ソースアイテムを指定する IShellItem へのポインターです。 |
| pszNewName | LPWSTR | in | アイテムの新しい 表示名 へのポインターです。これは null で終端された Unicode 文字列です。 |
| pfopsItem | IFileOperationProgressSink* | in | 状態および失敗の通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、名前変更操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはアイテムの名前を変更するのではなく、単に名前を変更するアイテムを宣言するだけです。オブジェクトの名前を変更するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::RenameItem を呼び出して新しい名前を宣言します。
- IFileOperation::PerformOperations を呼び出して名前変更操作を開始します。
新しい表示名を付与するアイテムのセットを宣言します。すべてのアイテムに同じ名前が付けられます。
| pUnkItems | IUnknown* | in | 名前を変更するアイテムのグループを表す IShellItemArray、IDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::RenameItem と同じ機能を実現します。 |
| pszNewName | LPWSTR | in | アイテムの新しい表示名へのポインターです。これは null で終端された Unicode 文字列です。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
pUnkItems のコレクション内の複数のアイテムが同じフォルダー内にある場合、名前が変更されたファイルはそれらを区別するために括弧付きの番号が付加されます。たとえば、newfile(1).txt、newfile(2).txt、newfile(3).txt のようになります。
このメソッドはアイテムの名前を変更するのではなく、単に名前を変更するアイテムを宣言するだけです。オブジェクトのグループの名前を変更するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::RenameItems を呼び出して、ソースのファイルまたはフォルダーと新しい名前を宣言します。
- IFileOperation::PerformOperations を呼び出して名前変更操作を開始します。
指定された宛先へ移動する単一のアイテムを宣言します。
| psiItem | IShellItem* | in | ソースアイテムを指定する IShellItem へのポインターです。 |
| psiDestinationFolder | IShellItem* | in | 移動したアイテムを格納する宛先フォルダーを指定する IShellItem へのポインターです。 |
| pszNewName | LPWSTR | in | 新しい場所でのアイテムの新しい名前へのポインターです。これは null で終端された Unicode 文字列であり、NULL にすることができます。NULL の場合、宛先アイテムの名前はソースと同じになります。 |
| pfopsItem | IFileOperationProgressSink* | in | この特定の移動操作の進行状況および エラー通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、移動操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはアイテムを移動するのではなく、単に移動するアイテムを宣言するだけです。オブジェクトを移動するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::MoveItem を呼び出して、ソースアイテム、宛先フォルダー、宛先名を宣言します。
- IFileOperation::PerformOperations を呼び出して移動操作を開始します。
指定された宛先へ移動するアイテムのセットを宣言します。
| punkItems | IUnknown* | in | 移動するアイテムのグループを表す IShellItemArray、IDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::MoveItem と同じ機能を実現します。 |
| psiDestinationFolder | IShellItem* | in | 移動したアイテムを格納する宛先フォルダーを指定する IShellItem へのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはアイテムを移動するのではなく、単に移動するアイテムを宣言するだけです。アイテムのグループを移動するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::MoveItems を呼び出して、ソースのファイルまたはフォルダーと宛先フォルダーを宣言します。
- IFileOperation::PerformOperations を呼び出して移動操作を開始します。
指定された宛先へコピーする単一のアイテムを宣言します。
| psiItem | IShellItem* | in | ソースアイテムを指定する IShellItem へのポインターです。 |
| psiDestinationFolder | IShellItem* | in | アイテムのコピーを格納する宛先フォルダーを指定する IShellItem へのポインターです。 |
| pszCopyName | LPWSTR | in | アイテムがコピーされた後の新しい名前へのポインターです。これは null で終端された Unicode 文字列であり、NULL にすることができます。NULL の場合、宛先アイテムの名前はソースと同じになります。 |
| pfopsItem | IFileOperationProgressSink* | in | この特定のコピー操作の進行状況および エラー通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、コピー操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはアイテムをコピーするのではなく、単にコピーするアイテムを宣言するだけです。オブジェクトをコピーするには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::CopyItem を呼び出して、ソースアイテム、宛先フォルダー、宛先名を宣言します。
- IFileOperation::PerformOperations を呼び出してコピー操作を開始します。
例
次のサンプルコードは、このメソッドの実装例を示しています。
HRESULT CopyItem(__in PCWSTR pszSrcItem, __in PCWSTR pszDest, PCWSTR pszNewName)
{
//
// Initialize COM as STA.
//
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
IFileOperation *pfo;
//
// Create the IFileOperation interface
//
hr = CoCreateInstance(CLSID_FileOperation,
NULL,
CLSCTX_ALL,
IID_PPV_ARGS(&pfo));
if (SUCCEEDED(hr))
{
//
// Set the operation flags. Turn off all UI from being shown to the
// user during the operation. This includes error, confirmation,
// and progress dialogs.
//
hr = pfo->SetOperationFlags(FOF_NO_UI);
if (SUCCEEDED(hr))
{
//
// Create an IShellItem from the supplied source path.
//
IShellItem *psiFrom = NULL;
hr = SHCreateItemFromParsingName(pszSrcItem,
NULL,
IID_PPV_ARGS(&psiFrom));
if (SUCCEEDED(hr))
{
IShellItem *psiTo = NULL;
if (NULL != pszDest)
{
//
// Create an IShellItem from the supplied
// destination path.
//
hr = SHCreateItemFromParsingName(pszDest,
NULL,
IID_PPV_ARGS(&psiTo));
}
if (SUCCEEDED(hr))
{
//
// Add the operation
//
hr = pfo->CopyItem(psiFrom, psiTo, pszNewName, NULL);
if (NULL != psiTo)
{
psiTo->Release();
}
}
psiFrom->Release();
}
if (SUCCEEDED(hr))
{
//
// Perform the operation to copy the file.
//
hr = pfo->PerformOperations();
}
}
//
// Release the IFileOperation interface.
//
pfo->Release();
}
CoUninitialize();
}
return hr;
}
指定された宛先へコピーするアイテムのセットを宣言します。
| punkItems | IUnknown* | in | コピーするアイテムのグループを表す IShellItemArray、IDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::CopyItem と同じ機能を実現します。 |
| psiDestinationFolder | IShellItem* | in | アイテムのコピーを格納する宛先フォルダーを指定する IShellItem へのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはアイテムをコピーするのではなく、単にコピーするアイテムを宣言するだけです。アイテムのグループをコピーするには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::CopyItems を呼び出して、ソースアイテムと宛先フォルダーを宣言します。
- IFileOperation::PerformOperations を呼び出してコピー操作を開始します。
削除する単一のアイテムを宣言します。
| psiItem | IShellItem* | in | 削除するアイテムを指定する IShellItem へのポインターです。 |
| pfopsItem | IFileOperationProgressSink* | in | この特定の削除操作の進行状況および エラー通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、削除操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはアイテムを削除するのではなく、単に削除するアイテムを宣言するだけです。アイテムを削除するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::DeleteItem を呼び出して、削除するファイルまたはフォルダーを宣言します。
- IFileOperation::PerformOperations を呼び出して削除操作を開始します。
削除するアイテムのセットを宣言します。
| punkItems | IUnknown* | in | 削除するアイテムのグループを表す IShellItemArray、IDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::DeleteItem と同じ機能を実現します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはアイテムを削除するのではなく、単に削除するアイテムを宣言するだけです。アイテムのグループを削除するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::DeleteItems を呼び出して、削除するファイルまたはフォルダーを宣言します。
- IFileOperation::PerformOperations を呼び出して削除操作を開始します。
指定された場所に作成する新しいアイテムを宣言します。
| psiDestinationFolder | IShellItem* | in | 新しいアイテムを格納する宛先フォルダーを指定する IShellItem へのポインターです。 |
| dwFileAttributes | DWORD | in | ファイルまたはフォルダーのファイルシステム属性を指定するビット単位の値です。指定可能な値については GetFileAttributes を参照してください。 |
| pszName | LPWSTR | in | 新しいアイテムのファイル名 (たとえば Newfile.txt) へのポインターです。これは null で終端された Unicode 文字列です。 |
| pszTemplateName | LPWSTR | in | 新しいアイテムのベースとなるテンプレートファイル (たとえば Excel9.xls) の名前へのポインターで、以下のいずれかの場所に格納されています。
このパラメーターは通常、新しい空のファイルを指定するために NULL にします。 |
| pfopsItem | IFileOperationProgressSink* | in | 状態および失敗の通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、作成操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは新しいアイテムを作成するのではなく、単に作成するアイテムを宣言するだけです。新しいアイテムを作成するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。
- IFileOperation::NewItem を呼び出して、新しいファイルまたはフォルダーの詳細を宣言します。
- IFileOperation::PerformOperations を呼び出して新しいアイテムを作成します。
選択されたすべての操作を実行します。
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合はエラー値を返します。操作がユーザーによってキャンセルされた場合でも、このメソッドは成功コードを返すことがあることに注意してください。この場合に該当するかどうかを判定するには GetAnyOperationsAborted メソッドを使用してください。
解説(Remarks)
このメソッドは、それぞれの個別のメソッドを呼び出すことで以前に指定されたアクションを実行するために最後に呼び出されます。たとえば、RenameItem はアイテムの名前を変更するのではなく、単にパラメーターを設定するだけです。実際の名前変更は、PerformOperations を呼び出したときに行われます。
IFileOperation::PerformOperations の呼び出しによって開始されたファイル操作が、完了する前に停止されたかどうかを示す値を取得します。操作は、ユーザーの操作によって、またはシステムによって暗黙的に停止される可能性があります。
| pfAnyOperationsAborted | BOOL* | out | このメソッドが返るとき、いずれかのファイル操作が完了する前に中止された場合は TRUE を、それ以外の場合は FALSE を指します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは IFileOperation::PerformOperations が返った後に呼び出してください。
IFileOperation::PerformOperations が成功コードと失敗コードのどちらを返したかにかかわらず、IFileOperation::GetAnyOperationsAborted を呼び出す必要があります。操作がユーザーまたはシステムによって停止された場合でも、成功コードが返されることがあります。
このメソッドは、従来の関数 SHFileOperation で使用される SHFILEOPSTRUCT 構造体の fAnyOperationsAborted メンバーと同じ機能を提供します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFileOperation "{947AAB5F-0A5C-4C13-B4D6-4BF7836FC9F8}" #usecom global IFileOperation IID_IFileOperation "{3AD05575-8857-4850-9277-11B85BDB8E09}" #comfunc global IFileOperation_Advise 3 sptr,var #comfunc global IFileOperation_Unadvise 4 int #comfunc global IFileOperation_SetOperationFlags 5 int #comfunc global IFileOperation_SetProgressMessage 6 wstr #comfunc global IFileOperation_SetProgressDialog 7 sptr #comfunc global IFileOperation_SetProperties 8 sptr #comfunc global IFileOperation_SetOwnerWindow 9 sptr #comfunc global IFileOperation_ApplyPropertiesToItem 10 sptr #comfunc global IFileOperation_ApplyPropertiesToItems 11 sptr #comfunc global IFileOperation_RenameItem 12 sptr,wstr,sptr #comfunc global IFileOperation_RenameItems 13 sptr,wstr #comfunc global IFileOperation_MoveItem 14 sptr,sptr,wstr,sptr #comfunc global IFileOperation_MoveItems 15 sptr,sptr #comfunc global IFileOperation_CopyItem 16 sptr,sptr,wstr,sptr #comfunc global IFileOperation_CopyItems 17 sptr,sptr #comfunc global IFileOperation_DeleteItem 18 sptr,sptr #comfunc global IFileOperation_DeleteItems 19 sptr #comfunc global IFileOperation_NewItem 20 sptr,int,wstr,wstr,sptr #comfunc global IFileOperation_PerformOperations 21 #comfunc global IFileOperation_GetAnyOperationsAborted 22 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IFileOperation "{947AAB5F-0A5C-4C13-B4D6-4BF7836FC9F8}" #usecom global IFileOperation IID_IFileOperation "{3AD05575-8857-4850-9277-11B85BDB8E09}" #comfunc global IFileOperation_Advise 3 sptr,sptr #comfunc global IFileOperation_Unadvise 4 int #comfunc global IFileOperation_SetOperationFlags 5 int #comfunc global IFileOperation_SetProgressMessage 6 wstr #comfunc global IFileOperation_SetProgressDialog 7 sptr #comfunc global IFileOperation_SetProperties 8 sptr #comfunc global IFileOperation_SetOwnerWindow 9 sptr #comfunc global IFileOperation_ApplyPropertiesToItem 10 sptr #comfunc global IFileOperation_ApplyPropertiesToItems 11 sptr #comfunc global IFileOperation_RenameItem 12 sptr,wstr,sptr #comfunc global IFileOperation_RenameItems 13 sptr,wstr #comfunc global IFileOperation_MoveItem 14 sptr,sptr,wstr,sptr #comfunc global IFileOperation_MoveItems 15 sptr,sptr #comfunc global IFileOperation_CopyItem 16 sptr,sptr,wstr,sptr #comfunc global IFileOperation_CopyItems 17 sptr,sptr #comfunc global IFileOperation_DeleteItem 18 sptr,sptr #comfunc global IFileOperation_DeleteItems 19 sptr #comfunc global IFileOperation_NewItem 20 sptr,int,wstr,wstr,sptr #comfunc global IFileOperation_PerformOperations 21 #comfunc global IFileOperation_GetAnyOperationsAborted 22 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。