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

IFileOperation

COM
IID947aab5f-0a5c-4c13-b4d6-4bf7836fc9f8継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Shell アイテムをコピー、移動、名前変更、作成、削除するためのメソッド、および進行状況ダイアログとエラーダイアログを提供するためのメソッドを公開します。このインターフェースは SHFileOperation 関数を置き換えるものです。

解説(Remarks)

Shell アイテムは、ファイルやフォルダーといったファイルシステムオブジェクトだけでなく、仮想オブジェクトも含め、名前空間内の任意のオブジェクトになり得ます。IFileOperation の各メソッドのトピックでは、"アイテム" という用語を、任意の名前空間オブジェクトを総称的に指すために使用します。

IFileOperation は、従来の SHFileOperation 関数と比べて多くの利点があります。

このインターフェースを使用してファイル操作を行うには、一連の呼び出しを行う必要があります。
  1. 省略可能。Advise および Unadvise を通じて、進行状況および エラー通知のためのイベントシンクを設定します。
  2. 必要に応じて以下を使用して操作の状態を設定します。
  3. 必要に応じて以下を使用して、どのアイテムに対してどの操作を実行するかを指定します。
  4. PerformOperations を呼び出して操作を実行します。
IFileOperation は、シングルスレッドアパートメント (STA) の状況でのみ適用できます。マルチスレッドアパートメント (MTA) の状況では使用できません。MTA の場合は、引き続き SHFileOperation を使用する必要があります。

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。

vtbl 3 HRESULT Advise(IFileOperationProgressSink* pfops, DWORD* pdwCookie)

すべての操作に対して、ハンドラーが状態およびエラー情報を提供できるようにします。

pfopsIFileOperationProgressSink*in進行状況および エラー通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。
pdwCookieDWORD*outこのメソッドが返るとき、このパラメーターはこの接続を一意に識別する返却トークンを指します。呼び出し側アプリケーションは、後でこのトークンを IFileOperation::Unadvise に渡すことで接続を削除するために使用します。Advise の呼び出しが失敗した場合、この値は無意味です。

戻り値

型: HRESULT

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

解説(Remarks)

いくつかの個別のメソッドには、ここで設定したものとは重複する独自の進行状況シンクを宣言する機能があります。これらは、特定の操作についてのみ進行状況とエラー情報を受け取りたい場合に使用します。

vtbl 4 HRESULT Unadvise(DWORD dwCookie)

IFileOperation::Advise を通じて以前に確立されたアドバイザリ接続を終了します。

dwCookieDWORDin削除する接続を識別する接続トークンです。この値は、接続が確立されたときに Advise によって元々取得されたものです。

戻り値

型: HRESULT

ここに記載されている値以外の値は失敗を示します。

戻りコード 説明
S_OK
接続が正常に終了しました。
CONNECT_E_NOCONNECTION
dwCookie の値が有効な接続を表していません。
vtbl 5 HRESULT SetOperationFlags(FILEOPERATION_FLAGS dwOperationFlags)

現在の操作のパラメーターを設定します。

dwOperationFlagsFILEOPERATION_FLAGSin

ファイル操作を制御するフラグです。このメンバーは以下のフラグの組み合わせにすることができます。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_EARLYFAILUREFOF_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 を呼び出す前にこれらのフラグを設定します。

vtbl 6 HRESULT SetProgressMessage(LPWSTR pszMessage)

実装されていません。(IFileOperation.SetProgressMessage)

pszMessageLPWSTRinウィンドウタイトルへのポインターです。これは null で終端された Unicode 文字列です。

戻り値

型: HRESULT

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

vtbl 7 HRESULT SetProgressDialog(IOperationsProgressDialog* popd)

操作の進行状況を表示するために使用されるダイアログボックスを指定します。

popdIOperationsProgressDialog*inダイアログボックスを表す IOperationsProgressDialog オブジェクトへのポインターです。

戻り値

型: HRESULT

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

vtbl 8 HRESULT SetProperties(IPropertyChangeArray* pproparray)

アイテムに設定するプロパティと値のセットを宣言します。

pproparrayIPropertyChangeArray*inIPropertyChangeArray へのポインターです。これは、設定するプロパティとその新しい値を指定する IPropertyChange オブジェクトのコレクションにアクセスします。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは新しいプロパティ値を設定するのではなく、単にそれらを宣言するだけです。1 つのアイテムまたはアイテムのグループにプロパティ値を設定するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::SetProperties を呼び出して、設定する特定のプロパティとその新しい値を宣言します。
  2. IFileOperation::ApplyPropertiesToItem または IFileOperation::ApplyPropertiesToItems を呼び出して、プロパティを設定するアイテムを宣言します。
  3. IFileOperation::PerformOperations を呼び出して、アイテムにプロパティを適用します。
vtbl 9 HRESULT SetOwnerWindow(HWND hwndOwner)

進行状況ウィンドウおよびダイアログウィンドウの親ウィンドウまたはオーナーウィンドウを設定します。

hwndOwnerHWNDin操作のオーナーウィンドウへのハンドルです。このウィンドウがエラーメッセージを受け取ります。

戻り値

型: HRESULT

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

vtbl 10 HRESULT ApplyPropertiesToItem(IShellItem* psiItem)

プロパティ値を設定する単一のアイテムを宣言します。

psiItemIShellItem*in新しいプロパティ値を受け取るアイテムへのポインターです。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはアイテムにプロパティを適用するのではなく、単にアイテムを宣言するだけです。アイテムにプロパティ値を設定するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::SetProperties を呼び出して、設定する特定のプロパティとその新しい値を宣言します。
  2. IFileOperation::ApplyPropertiesToItem を呼び出して、プロパティを設定するアイテムを宣言します。
  3. IFileOperation::PerformOperations を呼び出して、アイテムにプロパティを適用します。
vtbl 11 HRESULT ApplyPropertiesToItems(IUnknown* punkItems)

共通のプロパティ値のセットを適用するアイテムのセットを宣言します。

punkItemsIUnknown*inアイテムのグループを表す IShellItemArrayIDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::ApplyPropertiesToItem と同じ機能を実現します。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはアイテムにプロパティを適用するのではなく、単にアイテムを宣言するだけです。アイテムのグループにプロパティ値を設定するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::SetProperties を呼び出して、設定する特定のプロパティとその新しい値を宣言します。
  2. IFileOperation::ApplyPropertiesToItems を呼び出して、プロパティ値を設定するアイテムを宣言します。
  3. IFileOperation::PerformOperations を呼び出して、アイテムにプロパティを適用します。
vtbl 12 HRESULT RenameItem(IShellItem* psiItem, LPWSTR pszNewName, IFileOperationProgressSink* pfopsItem)

新しい表示名を付与する単一のアイテムを宣言します。

psiItemIShellItem*inソースアイテムを指定する IShellItem へのポインターです。
pszNewNameLPWSTRinアイテムの新しい 表示名 へのポインターです。これは null で終端された Unicode 文字列です。
pfopsItemIFileOperationProgressSink*in状態および失敗の通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、名前変更操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはアイテムの名前を変更するのではなく、単に名前を変更するアイテムを宣言するだけです。オブジェクトの名前を変更するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::RenameItem を呼び出して新しい名前を宣言します。
  2. IFileOperation::PerformOperations を呼び出して名前変更操作を開始します。
vtbl 13 HRESULT RenameItems(IUnknown* pUnkItems, LPWSTR pszNewName)

新しい表示名を付与するアイテムのセットを宣言します。すべてのアイテムに同じ名前が付けられます。

pUnkItemsIUnknown*in名前を変更するアイテムのグループを表す IShellItemArrayIDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::RenameItem と同じ機能を実現します。
pszNewNameLPWSTRinアイテムの新しい表示名へのポインターです。これは null で終端された Unicode 文字列です。

戻り値

型: HRESULT

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

解説(Remarks)

pUnkItems のコレクション内の複数のアイテムが同じフォルダー内にある場合、名前が変更されたファイルはそれらを区別するために括弧付きの番号が付加されます。たとえば、newfile(1).txt、newfile(2).txt、newfile(3).txt のようになります。

このメソッドはアイテムの名前を変更するのではなく、単に名前を変更するアイテムを宣言するだけです。オブジェクトのグループの名前を変更するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::RenameItems を呼び出して、ソースのファイルまたはフォルダーと新しい名前を宣言します。
  2. IFileOperation::PerformOperations を呼び出して名前変更操作を開始します。
vtbl 14 HRESULT MoveItem(IShellItem* psiItem, IShellItem* psiDestinationFolder, LPWSTR pszNewName, IFileOperationProgressSink* pfopsItem)

指定された宛先へ移動する単一のアイテムを宣言します。

psiItemIShellItem*inソースアイテムを指定する IShellItem へのポインターです。
psiDestinationFolderIShellItem*in移動したアイテムを格納する宛先フォルダーを指定する IShellItem へのポインターです。
pszNewNameLPWSTRin新しい場所でのアイテムの新しい名前へのポインターです。これは null で終端された Unicode 文字列であり、NULL にすることができます。NULL の場合、宛先アイテムの名前はソースと同じになります。
pfopsItemIFileOperationProgressSink*inこの特定の移動操作の進行状況および エラー通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、移動操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはアイテムを移動するのではなく、単に移動するアイテムを宣言するだけです。オブジェクトを移動するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::MoveItem を呼び出して、ソースアイテム、宛先フォルダー、宛先名を宣言します。
  2. IFileOperation::PerformOperations を呼び出して移動操作を開始します。
vtbl 15 HRESULT MoveItems(IUnknown* punkItems, IShellItem* psiDestinationFolder)

指定された宛先へ移動するアイテムのセットを宣言します。

punkItemsIUnknown*in移動するアイテムのグループを表す IShellItemArrayIDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::MoveItem と同じ機能を実現します。
psiDestinationFolderIShellItem*in移動したアイテムを格納する宛先フォルダーを指定する IShellItem へのポインターです。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはアイテムを移動するのではなく、単に移動するアイテムを宣言するだけです。アイテムのグループを移動するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::MoveItems を呼び出して、ソースのファイルまたはフォルダーと宛先フォルダーを宣言します。
  2. IFileOperation::PerformOperations を呼び出して移動操作を開始します。
vtbl 16 HRESULT CopyItem(IShellItem* psiItem, IShellItem* psiDestinationFolder, LPWSTR pszCopyName, IFileOperationProgressSink* pfopsItem)

指定された宛先へコピーする単一のアイテムを宣言します。

psiItemIShellItem*inソースアイテムを指定する IShellItem へのポインターです。
psiDestinationFolderIShellItem*inアイテムのコピーを格納する宛先フォルダーを指定する IShellItem へのポインターです。
pszCopyNameLPWSTRinアイテムがコピーされた後の新しい名前へのポインターです。これは null で終端された Unicode 文字列であり、NULL にすることができます。NULL の場合、宛先アイテムの名前はソースと同じになります。
pfopsItemIFileOperationProgressSink*inこの特定のコピー操作の進行状況および エラー通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、コピー操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはアイテムをコピーするのではなく、単にコピーするアイテムを宣言するだけです。オブジェクトをコピーするには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::CopyItem を呼び出して、ソースアイテム、宛先フォルダー、宛先名を宣言します。
  2. 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;
}
vtbl 17 HRESULT CopyItems(IUnknown* punkItems, IShellItem* psiDestinationFolder)

指定された宛先へコピーするアイテムのセットを宣言します。

punkItemsIUnknown*inコピーするアイテムのグループを表す IShellItemArrayIDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::CopyItem と同じ機能を実現します。
psiDestinationFolderIShellItem*inアイテムのコピーを格納する宛先フォルダーを指定する IShellItem へのポインターです。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはアイテムをコピーするのではなく、単にコピーするアイテムを宣言するだけです。アイテムのグループをコピーするには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::CopyItems を呼び出して、ソースアイテムと宛先フォルダーを宣言します。
  2. IFileOperation::PerformOperations を呼び出してコピー操作を開始します。
vtbl 18 HRESULT DeleteItem(IShellItem* psiItem, IFileOperationProgressSink* pfopsItem)

削除する単一のアイテムを宣言します。

psiItemIShellItem*in削除するアイテムを指定する IShellItem へのポインターです。
pfopsItemIFileOperationProgressSink*inこの特定の削除操作の進行状況および エラー通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、削除操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはアイテムを削除するのではなく、単に削除するアイテムを宣言するだけです。アイテムを削除するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::DeleteItem を呼び出して、削除するファイルまたはフォルダーを宣言します。
  2. IFileOperation::PerformOperations を呼び出して削除操作を開始します。
vtbl 19 HRESULT DeleteItems(IUnknown* punkItems)

削除するアイテムのセットを宣言します。

punkItemsIUnknown*in削除するアイテムのグループを表す IShellItemArrayIDataObject、または IEnumShellItems オブジェクトの IUnknown へのポインターです。単一のアイテムを表すために IPersistIDList オブジェクトを指すこともでき、これは実質的に IFileOperation::DeleteItem と同じ機能を実現します。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドはアイテムを削除するのではなく、単に削除するアイテムを宣言するだけです。アイテムのグループを削除するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::DeleteItems を呼び出して、削除するファイルまたはフォルダーを宣言します。
  2. IFileOperation::PerformOperations を呼び出して削除操作を開始します。
vtbl 20 HRESULT NewItem(IShellItem* psiDestinationFolder, DWORD dwFileAttributes, LPWSTR pszName, LPWSTR pszTemplateName, IFileOperationProgressSink* pfopsItem)

指定された場所に作成する新しいアイテムを宣言します。

psiDestinationFolderIShellItem*in新しいアイテムを格納する宛先フォルダーを指定する IShellItem へのポインターです。
dwFileAttributesDWORDinファイルまたはフォルダーのファイルシステム属性を指定するビット単位の値です。指定可能な値については GetFileAttributes を参照してください。
pszNameLPWSTRin新しいアイテムのファイル名 (たとえば Newfile.txt) へのポインターです。これは null で終端された Unicode 文字列です。
pszTemplateNameLPWSTRin

新しいアイテムのベースとなるテンプレートファイル (たとえば Excel9.xls) の名前へのポインターで、以下のいずれかの場所に格納されています。

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

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

pfopsItemIFileOperationProgressSink*in状態および失敗の通知に使用される IFileOperationProgressSink オブジェクトへのポインターです。全体的な操作に対して IFileOperation::Advise を呼び出す場合、作成操作の進行状況と エラー通知はそこに含まれるため、このパラメーターは NULL に設定します。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは新しいアイテムを作成するのではなく、単に作成するアイテムを宣言するだけです。新しいアイテムを作成するには、少なくとも以下に詳述する一連の呼び出しを行う必要があります。

  1. IFileOperation::NewItem を呼び出して、新しいファイルまたはフォルダーの詳細を宣言します。
  2. IFileOperation::PerformOperations を呼び出して新しいアイテムを作成します。
vtbl 21 HRESULT PerformOperations()

選択されたすべての操作を実行します。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。操作がユーザーによってキャンセルされた場合でも、このメソッドは成功コードを返すことがあることに注意してください。この場合に該当するかどうかを判定するには GetAnyOperationsAborted メソッドを使用してください。

解説(Remarks)

このメソッドは、それぞれの個別のメソッドを呼び出すことで以前に指定されたアクションを実行するために最後に呼び出されます。たとえば、RenameItem はアイテムの名前を変更するのではなく、単にパラメーターを設定するだけです。実際の名前変更は、PerformOperations を呼び出したときに行われます。

vtbl 22 HRESULT GetAnyOperationsAborted(BOOL* pfAnyOperationsAborted)

IFileOperation::PerformOperations の呼び出しによって開始されたファイル操作が、完了する前に停止されたかどうかを示す値を取得します。操作は、ユーザーの操作によって、またはシステムによって暗黙的に停止される可能性があります。

pfAnyOperationsAbortedBOOL*outこのメソッドが返るとき、いずれかのファイル操作が完了する前に中止された場合は TRUE を、それ以外の場合は FALSE を指します。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは IFileOperation::PerformOperations が返った後に呼び出してください。

IFileOperation::PerformOperations が成功コードと失敗コードのどちらを返したかにかかわらず、IFileOperation::GetAnyOperationsAborted を呼び出す必要があります。操作がユーザーまたはシステムによって停止された場合でも、成功コードが返されることがあります。

このメソッドは、従来の関数 SHFileOperation で使用される SHFILEOPSTRUCT 構造体の fAnyOperationsAborted メンバーと同じ機能を提供します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。