PSFormatPropertyValue 関数 (propsys.h)
プロパティ ストアに格納されているプロパティ値の書式設定された Unicode 文字列表現を取得します。 この関数は、出力文字列にメモリを割り当てます。
構文
PSSTDAPI PSFormatPropertyValue(
[in] IPropertyStore *pps,
[in] IPropertyDescription *ppd,
[in] PROPDESC_FORMAT_FLAGS pdff,
[out] LPWSTR *ppszDisplay
);
パラメーター
[in] pps
種類: IPropertyStore*
プロパティ値の取得元のプロパティ ストアを表す IPropertyStore へのポインター。
[in] ppd
値を取得するプロパティを表す IPropertyDescription へのポインター。
[in] pdff
プロパティ文字列に適用する形式を指定する 1 つ以上の PROPDESC_FORMAT_FLAGS 。 使用可能な値については 、「PROPDESC_FORMAT_FLAGS 」を参照してください。
[out] ppszDisplay
種類: LPWSTR*
関数から戻るときに、書式設定された値へのポインターが null で終わる Unicode 文字列として格納されます。
戻り値
型: HRESULT
この関数が成功すると、 S_OKが返されます。 そうでない場合は、HRESULT エラー コードを返します。
注釈
この関数では 、ppd パラメーターを使用して IPropertyDescription::FormatForDisplay を呼び出します。 この呼び出しでは、プロパティ値の Unicode 文字列表現が提供され、1 つ以上の PROPDESC_FORMAT_FLAGSに基づいて書式設定が追加されます。
PSFormatPropertyValue を呼び出す前に、CoInitialize または OleInitialize を使用してコンポーネント オブジェクト モデル (COM) を初期化する必要があります。
関数はメモリを割り当て、 ppszDisplay でそのメモリへのポインターを返します。 呼び出し元のアプリケーションでは、不要になったときに、 CoTaskMemFree を使用して ppszDisplay で指定された文字列を解放する必要があります。
この関数の目的は、データをユーザーに表示するのに適した文字列に変換することです。 値は、現在のロケール、ユーザーの言語、 PROPDESC_FORMAT_FLAGS、およびプロパティ キーで指定されたプロパティの説明に従って書式設定されます。 プロパティ記述スキーマが値の書式設定にどのように影響するかについては、次のトピックを参照してください。
通常、 PROPDESC_FORMAT_FLAGS は、プロパティの説明で規定されている形式を変更するために使用されます。出力文字列には Unicode 方向文字を含めることができます。 これらの非スペーシング文字は Unicode 双方向アルゴリズムに影響を与え、左から右 (LTR) 言語が右から左 (RTL) ウィンドウに描画されたとき、または LTR ウィンドウに RTL が描画されたときに値が正しく表示されるようにします。 これらの文字には、次のものが含まれます。 "\x200e", "\x200f", "\x202a", "\x202b", "\x202c", "\x202d", "\x202e".
次のプロパティは特殊な形式を使用し、 PROPDESC_FORMAT_FLAGSの影響を受けません。 引用されている例は、現在のロケールが英語に設定されている文字列に対するものです。通常、出力は、特に記載されている場合を除いてローカライズされます。
プロパティ | Format |
---|---|
System.FileAttributes | 次のファイル属性は、文字に変換され、文字列を作成するために追加されます (たとえば、0x1801の値 (FILE_ATTRIBUTE_READONLY |FILE_ATTRIBUTE_COMPRESSED |FILE_ATTRIBUTE_OFFLINE) は "RCO" に変換されます。
|
System.Photo.ISOSpeed | たとえば、"ISO-400" とします。 |
System.Photo.ShutterSpeed |
APEX 値は、次の数式を使用して露出時間に変換されます。
たとえば、"2 秒" とします。または "1/125 秒"。 |
System.Photo.ExposureTime | たとえば、"2 秒" とします。または "1/125 秒" です。 |
System.Photo.Aperture |
APEX 値は、次の数式を使用して F 数値に変換されます。
たとえば、"f/5.6" とします。 |
System.Photo.FNumber | たとえば、"f/5.6" とします。 |
System.Photo.SubjectDistance | たとえば、"15 m"、"250 mm" などです。 |
System.Photo.FocalLength | たとえば、"50 mm" とします。 |
System.Photo.FlashEnergy | たとえば、"500 bpcs" とします。 |
System.Photo.ExposureBias | たとえば、"-2 ステップ"、"0 ステップ"、"+3 ステップ" などです。 |
System.Computer.DecoratedFreeSpace | たとえば、"105 MB の空き 13.2 GB" などです。 |
System.ItemType | たとえば、"Application" や "JPEG Image" などです。 |
System.ControlPanel.Category | たとえば、"外観と個人用設定" などです。 |
System.ComputerName | たとえば、"LITWARE05 (このコンピューター)" や "testbox07" などです。 |
プロパティ キーが登録されているプロパティ スキーマのプロパティの説明に対応していない場合、この関数は値の型に基づいて形式を選択します。
値の型 | フォーマット |
---|---|
VT_BOOLEAN | サポートされていません。 |
VT_FILETIME | PROPDESC_FORMAT_FLAGSと現在のロケールで指定された日付/時刻文字列。 PDFF_SHORTTIMEとPDFF_SHORTDATEが既定値です。 たとえば、"11/13/2006 3:22 PM" などです。 |
数値 VARTYPE | 現在のロケールの 10 進文字列。 たとえば、"42" とします。 |
VT_LPWSTRまたはその他 | 文字列に変換されます。 "\r"、"\t"、または "\n" のシーケンスは、1 つのスペースに置き換えられます。 |
VT_VECTOR |何か | セミコロンで区切られた値。 セミコロンは、ロケールに関係なく使用されます。 |
例
大規模なプログラムの一部として含める次の例では、 PSFormatPropertyValue を使用して評価値を書式設定する方法を示します。
// IPropertyStore *pStore;
// Assume the variable pps is initialized and valid.
IPropertyDescription *pPropDesc;
HRESULT hr = PSGetPropertyDescription(PKEY_Rating, IID_PPV_ARGS(&pPropDesc));
if (SUCCEEDED(hr))
{
PWSTR pszValue;
hr = PSFormatPropertyValue(pStore, pPropDesc, PDFF_DEFAULT, &pszValue);
if (SUCCEEDED(hr))
{
// pszValue contains a formatted string similar to "3 stars".
CoTaskMemFree(pszValue);
}
pPropDesc->Release();
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | propsys.h |
Library | Propsys.lib |
[DLL] | Propsys.dll (バージョン 6.0 以降) |
再頒布可能パッケージ | Windows デスクトップ検索 (WDS) 3.0 |