WIn XP で VC6 を使用してアプリを開発しています。システムからデフォルトの入力言語リストを取得するには、GetKeyBoardLayoutList() および GetLocalInfo() API が使用されます。
以下はコードです。
`UINT uLayouts;
char szBuf[512];
HKL *lpList = NULL;
uLayouts = GetKeyboardLayoutList(0, NULL);
lpList = (HKL*)LocalAlloc(LPTR, (uLayouts * sizeof(HKL)));
uLayouts = GetKeyboardLayoutList(uLayouts, lpList);
for(UINT i = 0; i < uLayouts; i++)
{
DWORD temp = (UINT)lpList[i] & 0xffffffff;
GetLocaleInfo(MAKELCID(temp,SORT_DEFAULT), LOCALE_SLANGUAGE , szBuf, 512);
}`
szBuf では、入力言語名を「英語 (米国)」として取得していますが、OS の実際の名前は「英語 (米国) - 米国」です。
OSに存在する入力言語の正確な名前を取得するにはどうすればよいですか? 次のように、さまざまなフラグを使用してみました。
LOCALE_SENGLANGUAGE //英語
LOCALE_ILANGUAGE、LOCALE_SLANGUAGE、LOCALE_ICOUNTRY、LOCALE_SABBREVLANGNAME、LOCALE_SNATIVELANGNAME、LOCALE_SABBREVCTRYNAME、LOCALE_SNATIVECTRYNAME
ただし、正確な言語名を取得することはできません。