IEmptyVolumeCache2
COM公式ドキュメント
IEmptyVolumeCache を拡張します。このインターフェイスは、IEmptyVolumeCache::Initialize よりも優れたローカライズサポートを提供する、追加のメソッド InitializeEx を 1 つ定義します。
解説(Remarks)
このインターフェイスは、Windows 2000 上で動作するディスククリーンアップハンドラーによってエクスポートする必要があります。Windows 98 上で動作するハンドラーは IEmptyVolumeCache をエクスポートする必要があります。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ディスククリーンアップハンドラーを初期化します。Initialize よりも優れたローカライズサポートを提供します。
| hkRegKey | HKEY | in | ハンドラーオブジェクトに関する情報を保持するレジストリキーへのハンドル。 |
| pcwszVolume | LPWSTR | in | ボリュームのルート(例: "C:")を含む、null で終わる Unicode 文字列へのポインター。 |
| pcwszKeyName | LPWSTR | in | ハンドラーのレジストリキーの名前を含む、null で終わる Unicode 文字列へのポインター。 |
| ppwszDisplayName | LPWSTR* | out | ディスククリーンアップマネージャーのハンドラー一覧に表示される名前を含む、null で終わる Unicode 文字列へのポインター。このパラメーターには値を割り当てる必要があります。 |
| ppwszDescription | LPWSTR* | out | ディスククリーンアップマネージャーの利用可能なディスククリーナー一覧からこのオブジェクトが選択されたときに表示される、null で終わる Unicode 文字列へのポインター。このパラメーターには値を割り当てる必要があります。 |
| ppwszBtnText | LPWSTR* | out | ディスククリーンアップマネージャーの 設定 ボタンに表示されるテキストを含む、null で終わる Unicode 文字列へのポインター。EVCF_HASSETTINGS フラグが設定されている場合は、ppwszBtnText に値を割り当てる必要があります。それ以外の場合は NULL に設定できます。 |
| pdwFlags | EMPTY_VOLUME_CACHE_FLAGS* | out | ハンドラーに情報を渡し、またディスククリーンアップマネージャーに情報を返すために使用されるフラグ。 これらのフラグはオブジェクトに渡すことができます:EVCF_OUTOFDISKSPACEこのフラグが設定されている場合、そのドライブでユーザーのディスク領域が不足しています。このフラグを受け取ったとき、ハンドラーはたとえパフォーマンスの低下を招く場合であっても、積極的にディスク領域を解放する必要があります。ただし、ハンドラーはアプリケーションの失敗やユーザーのデータ損失を引き起こすようなファイルを削除してはなりません。 EVCF_SETTINGSMODEディスククリーンアップマネージャーがスケジュールに従って実行される場合、EVCF_SETTINGSMODE フラグが設定されます。ppwszDisplayName および ppwszDescription パラメーターに値を割り当てる必要があります。このフラグが設定されている場合、ディスククリーンアップマネージャーは GetSpaceUsed、Purge、ShowProperties を呼び出しません。Purge は呼び出されないため、クリーンアップは InitializeEx で処理する必要があります。ハンドラーは pcwszVolume パラメーターを無視し、どのドライブにあるかにかかわらず不要なファイルをすべてクリーンアップする必要があります。ユーザーからのフィードバックを得る機会がないため、クリーンアップが極めて安全なファイルのみを対象とすべきです。 これらのフラグはハンドラーからディスククリーンアップマネージャーに返すことができます:EVCF_DONTSHOWIFZERO削除するファイルがない場合にこのフラグを設定します。GetSpaceUsed が呼び出されたときに pdwSpaceUsed パラメーターをゼロに設定すると、ディスククリーンアップマネージャーはそのハンドラーを一覧から除外します。 EVCF_ENABLEBYDEFAULTディスククリーンアップマネージャーの一覧でハンドラーを既定でチェックした状態にするには、このフラグを設定します。ユーザーがハンドラーのチェックボックスをオフにしない限り、ディスククリーンアップユーティリティが実行されるたびにハンドラーが実行されます。チェックボックスがオフにされると、ユーザーが再度選択するまでハンドラーは実行されません。 EVCF_ENABLEBYDEFAULT_AUTOスケジュールされたクリーンアップ中にハンドラーを自動的に実行するには、このフラグを設定します。このフラグは、ファイルの削除が低リスクである場合にのみ設定すべきです。EVCF_ENABLEBYDEFAULT と同様に、ユーザーはディスククリーンアップマネージャーの一覧でチェックボックスをオフにすることで、ハンドラーを実行しないように選択できます。 EVCF_HASSETTINGSハンドラーが UI を表示できることを示すには、このフラグを設定します。単純な UI の例としては、削除可能なファイルを表示し、そのうちどれを削除するかをユーザーが選択できるリストボックスがあります。ディスククリーンアップマネージャーは、クリーンアップハンドラーの説明の下にボタンを表示します。ユーザーはこのボタンをクリックして UI を要求します。ボタンのテキストを指定するには、ppwszBtnText パラメーターを使用します。 EVCF_REMOVEFROMLISTディスククリーンアップマネージャーの一覧からハンドラーを削除するには、このフラグを設定します。すべてのレジストリ情報が削除され、キーとその値が復元されるまでハンドラーを再度実行することはできません。このフラグは主に一度限りのクリーンアップ操作に使用されます。 |
戻り値
型: HRESULT
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| 削除するファイルがありません。 | |
| クリーンアップ操作が途中で終了しました。 | |
| クリーンアップ操作が失敗しました。 |
解説(Remarks)
Windows 2000 のディスククリーンアップマネージャーは、ディスククリーンアップハンドラーを初期化するために、最初に IEmptyVolumeCache2::InitializeEx を呼び出します。IEmptyVolumeCache2 インターフェイスが実装されていない場合にのみ Initialize を呼び出します。Windows 98 のディスククリーンアップマネージャーは Initialize のみをサポートします。
InitializeEx は、Initialize よりも優れたローカライズサポートを提供することを目的としています。InitializeEx が呼び出されたとき、ハンドラーアプリケーションは ppwszDisplayName および ppwszDescription パラメーターに適切にローカライズされた値を割り当てる必要があります。設定 ボタンが有効になっている場合は、ppwszBtnText パラメーターにも値を割り当てる必要があります。Initialize とは異なり、ディスククリーンアップマネージャーにレジストリから既定値を取得するよう通知するためにこれらの文字列を NULL に設定すると、InitializeEx は失敗します。
ppwszDisplayName、ppwszDescription、ppwszBtnText を通じて返される文字列のメモリを割り当てるには、CoTaskMemAlloc を使用します。ディスククリーンアップマネージャーは、メモリが不要になったときに解放します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IEmptyVolumeCache2 "{02B7E3BA-4DB3-11D2-B2D9-00C04F8EEC8C}" #usecom global IEmptyVolumeCache2 IID_IEmptyVolumeCache2 "{}" #comfunc global IEmptyVolumeCache2_InitializeEx 8 sptr,wstr,wstr,var,var,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IEmptyVolumeCache2 "{02B7E3BA-4DB3-11D2-B2D9-00C04F8EEC8C}" #usecom global IEmptyVolumeCache2 IID_IEmptyVolumeCache2 "{}" #comfunc global IEmptyVolumeCache2_InitializeEx 8 sptr,wstr,wstr,sptr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。