中国語とフランス語のシェル言語パック (MUI) がインストールされている Windows XP Embedded ビルドで Win API 関数 EnumUILanguages を使用していますが、API 呼び出しは 1 つの言語コードのみを返します: 0409 (ベースの en-US インストール言語)。
HKLM\SYSTEM\CurrentControlSet\Control\Nls\MUILanguages\ の下のレジストリを見ると、利用可能なすべての言語 (0409、040C、0804) を確認できます。レジストリに直接アクセスするよりも API 呼び出しを使用したいのですが....この API 呼び出しが唯一の言語を返す理由について何か提案はありますか?
ありがとう、ダンカン
更新: 少しのコードと情報 - メモ ボックスとボタンを含むフォームからこれを呼び出しています。ボタンを押すと、WinAPI 呼び出しが開始され、TMemoBox の Strings プロパティへのポインタが渡されて、コールバック関数が書き込みできるようになります。
// The Button handler
procedure TForm1.btnEnumLangsClick(Sender: TObject);
var
dwFlags : DWORD;
callback : TEnumUILanguagesProc;
begin
dwFlags := 0; // Same as MUI_LANGUAGE_ID for WinXP compat
EnumUILanguagesW( @EnumUILanguages_Callback,
dwFlags,
LParam(memoUILangs.Lines) // Pointer to Memo box text lines
);
end;
// API Callback function:
function EnumUILanguages_Callback(lpUILanguageString: PWideChar;
List: TStringList): BOOL; stdcall;
begin
// Add language ID to the memo box
List.Add(lpUILanguageString);
// Return true so the callback continues to run
Result := True;
end;