次の方法で共有


リダイレクトされた文字列の検索

このトピックでは、リダイレクトされたレジストリ文字列を検索するためのプログラミング手順について説明します。 詳細については、「 レジストリ文字列リダイレクトの使用」を参照してください。

Language-Neutral レジストリ値を読み込む

Windows Vista 以降では、MUI アプリケーションは言語に依存しないレジストリ値を使用して、文字列リソース テーブルに格納されている言語固有の文字列へのアクセスを許可します。 詳細については、「 レジストリ文字列リダイレクトの使用」の「Language-Neutral リソースを作成する」を参照してください。

レジストリから言語に依存しない値を読み取るアプリケーション コードでは、 RegLoadMUIStringW を呼び出して、適切なユーザー インターフェイス言語で文字列を読み込む必要があります。 この関数を使用する場合、アプリケーションはリソースの読み込みを明示的に処理する必要はありません。

既存のアプリケーションをレジストリの言語に依存しない使用に更新する場合は、通常、既存の文字列値を英語またはレジストリ内の他の 1 つの言語にローカライズし、フォールバックとして、下位互換性のために保持します。 レジストリにリテラル文字列を保持すると、 RegLoadMUIStringW の呼び出しが失敗した場合に、アプリケーションはリテラル文字列にフォールバックできます。 MUI ではこのような実装がサポートされていないので、このようなフォールバックを実装する方法を決定する必要があります。

シェル API を使用してレジストリからショートカット文字列を設定する

アプリケーションでは、シェル API を使用して、 スタート メニューまたはデスクトップ上のファイルまたはフォルダーをリンクするショートカットの文字列を作成できます。 詳細については、「 レジストリ文字列リダイレクトの使用」の「ショートカット文字列のリソースを作成する」を参照してください。

アプリケーションでは 、SHSetLocalizedName を 使用して、ショートカットの MUI 準拠の表示名を読み込むことができます。 関連付けられているヒントを設定するには 、IShellLink::SetDescription を使用する必要があります。 呼び出しによって、文字列がレジストリに登録されます。 "HKCR" がHKEY_CLASSES_ROOTレジストリ キーを表す次の例を考えてみましょう。

HKCR,"CLSID\%CLSID_AntiSpyware%",,,"Windows AntiSpyware"

HKCR,"CLSID\%CLSID_AntiSpyware%","LocalizedString",,"@%ProgramFiles%\Windows AntiSpyware\MSASCui.exe,-104"

HKCR,"CLSID\%CLSID_AntiSpyware%","InfoTip",,"@%ProgramFiles%\Windows AntiSpyware\MSASCui.exe,-208"

最初の行は、フォールバックと下位互換性のために、ローカライズされていないリテラル文字列を提供します。 2 行目は、表示名を登録するための MUI 準拠の方法を示しています。 この行は、Msascui.exe (Windows XP の場合) または関連する言語固有ファイル (Windows Vista の場合) に格納されている文字列識別子 104 を示します。 この文字列識別子は、"My Network Places" に対応します。 この例の 3 行目は、ヒントの登録を処理します。 %CLSID_AntiSpyware% は、このコンポーネントのクラス識別子と一致する GUID を表す環境変数を指定します。

上記の例では、アプリケーションは SHSetLocalizedName を呼び出して最初の 2 つのパラメーターの実行可能ファイルのパスを指定し、 idsRes を "@%ProgramFiles%\Windows AntiSpyware\MSASCui.exe,104" として指定します。 IShellLink::SetDescription の呼び出しでは、ヒントのパスを "@%ProgramFiles%\Windows AntiSpyware\MSASCui.exe,208" として指定します。

レジストリ内のわかりやすいドキュメントの種類名を照会する

わかりやすいドキュメント型名のリソースの作成については、「 レジストリ文字列リダイレクトの使用」の「わかりやすいドキュメント型名のリソースを作成する」を参照してください。 わかりやすいドキュメント名を照会するには、アプリケーションで IQueryAssociations::Init を使用し、その後に IQueryAssociations::GetString を呼び出す必要があります。 IQueryAssociations::Init の呼び出しでは、".txt" などのドキュメントの種類が指定されます。 IQueryAssociations::GetString の呼び出しでは、文字列識別子として ASSOCSTR_FRIENDLYDOCNAME を指定する必要があります。

レジストリから読み取られない Microsoft 管理コンソール スナップイン文字列を登録する

アプリケーションでは、Microsoft 管理コンソール (MMC) スナップインを使用して、その管理タスクをホストできます。 ほとんどの文字列は、「レジストリ文字列リダイレクトの使用」の「Microsoft 管理コンソールの文字列リソースの作成」Snap-Insで説明されている レジストリ設定を使用してリソースとして処理されます。 ただし、一部のスナップインは、MMC がレジストリから読み取ることができないレジストリ文字列値を登録します。 この場合、スナップインは 、MUI 互換の ISnapinAbout インターフェイスを使用して値を取得する必要があります。

レジストリから Windows サービスの表示名と説明を設定する

MUI アプリケーションが Windows サービスを使用している場合は、サービスの表示名と説明を表示する必要があります。 関連するリソースについては、「 レジストリ文字列リダイレクトの使用」の「Windows サービスの文字列リソースを作成する」で説明されています。

サービスの表示名を設定するために、MUI アプリケーションは CreateService または ChangeServiceConfig を呼び出します。 名前は"@<PE-path>,-<stringID>[;<comment>]" という形式の文字列です。 たとえば、サービスがパス %ProgramFiles%\%MyPath%\MyDll.dll を持つ.dll ファイルによって実装され、言語固有の表示名の文字列識別子が 347 の場合、パラメーターは "@%ProgramFiles%\\%MyPath%\\MyDll.dll,-347" として指定されます。 C/C++ では文字列のエスケープ文字として円記号が使用されるため、二重円記号 (\\) が必要です。

言語固有のサービスの説明を設定するには、MUI アプリケーションで、SERVICE_DESCRIPTION構造体の lpDescription メンバーに、適切な文字列識別子を参照する "@<PE-path>,-<stringID>[;<comment>]" 形式の文字列を示すようにする必要があります。 次に、アプリケーションは ChangeServiceConfig2 を呼び出し、パラメーター dwInfoLevel を SERVICE_CONFIG_DESCRIPTIONとして指定し、パラメーター lpInfoSERVICE_DESCRIPTION 構造体として指定します。

Win32 PE リソースの検索

レジストリ文字列リダイレクトの使用