IQueryInfo
COM公式ドキュメント
IShellFolder 実装内に存在する項目のフラグやインフォチップ情報を、Shell が取得するために使用するメソッドを公開します。インフォチップは通常、ツールチップコントロール内に表示されます。
解説(Remarks)
このインターフェイスは、IShellFolder::GetUIObjectOf を呼び出し、インターフェイス識別子として IID_IQueryInfo を渡すことで取得します。インフォチップ情報を要求する対象の項目は、IShellFolder::GetUIObjectOf 呼び出しの apidl 引数に含まれます。フォルダーが IQueryInfo を提供しない場合、Shell はインフォチップに標準の表示テキストを使用します。
実装するタイミング
フォルダー内の項目に対して表示される通常のテキストとは異なるフラグやテキスト情報を提供するには、IQueryInfo を実装します。たとえば、フォルダーにファイルオブジェクトが含まれている場合、インフォチップを使用して、項目のファイル名だけでなくパスとファイル名全体を提供できます。使用するタイミング
ほとんどの場合、このインターフェイスを直接使用することはありません。Shell は、インフォチップ内に表示する追加情報が必要になったときに、このインターフェイスを使用します。ただし、別のオブジェクトからインフォチップ情報を取得したい場合は、IQueryInfo を直接使用できます。メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
項目のインフォチップテキストを取得します。
| dwFlags | DWORD | in | インフォチップテキストを取得する対象の項目の処理方法を指定するフラグです。この値は通常ゼロ(QITIPF_DEFAULT)です。次の値が認識されます。 QITIPF_DEFAULT (0x00000000)特別な処理を行いません。 QITIPF_USENAME (0x00000001)ppwszTip にインフォチップテキストではなく項目の名前を提供します。 QITIPF_LINKNOTARGET (0x00000002)項目がショートカットの場合、そのターゲットではなくショートカット自体のインフォチップテキストを取得します。 QITIPF_LINKUSETARGET (0x00000004)項目がショートカットの場合、そのショートカットのターゲットのインフォチップテキストを取得します。 QITIPF_USESLOWTIP (0x00000008)名前空間全体を検索して情報を取得します。この値を指定すると、応答時間が遅延する可能性があります。 QITIPF_SINGLELINE (0x00000010)Windows Vista 以降。インフォチップを 1 行に表示します。 |
| ppwszTip | LPWSTR* | out | Unicode 文字列ポインターのアドレスです。このメソッドが正常に戻ると、チップ文字列へのポインターを受け取ります。このメソッドを実装するアプリケーションは、CoTaskMemAlloc を呼び出して ppwszTip 用のメモリを割り当てる必要があります。呼び出し側アプリケーションは、メモリが不要になったときに CoTaskMemFree を呼び出してメモリを解放する必要があります。 |
戻り値
型: HRESULT
関数が成功した場合は S_OK を返します。利用可能なインフォチップテキストがない場合、ppwszTip は NULL に設定されます。それ以外の場合は、COM で定義されたエラー値を返します。
項目の情報フラグを取得します。このメソッドは現在使用されていません。
| pdwFlags | DWORD* | out | 項目のフラグを受け取る値へのポインターです。返すフラグがない場合、この値はゼロに設定する必要があります。 |
戻り値
型: HRESULT
pdwFlags が何らかのフラグ値を返す場合は S_OK を返し、それ以外の場合は COM で定義されたエラー値を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IQueryInfo "{00021500-0000-0000-C000-000000000046}" #usecom global IQueryInfo IID_IQueryInfo "{}" #comfunc global IQueryInfo_GetInfoTip 3 int,var #comfunc global IQueryInfo_GetInfoFlags 4 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IQueryInfo "{00021500-0000-0000-C000-000000000046}" #usecom global IQueryInfo IID_IQueryInfo "{}" #comfunc global IQueryInfo_GetInfoTip 3 int,sptr #comfunc global IQueryInfo_GetInfoFlags 4 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。