UINT uLayouts;
HKL *lpList = NULL;
wchar_t szBufLng[512], szBufCtry[512];
uLayouts = GetKeyboardLayoutList(0, NULL);
lpList = (HKL*)LocalAlloc(LPTR, (uLayouts * sizeof(HKL)));
uLayouts = GetKeyboardLayoutList(uLayouts, lpList);
for(int i = 0; i < uLayouts; ++i)
{
GetLocaleInfo(MAKELCID(((UINT)lpList[i] & 0xffffffff),
SORT_DEFAULT), LOCALE_SISO639LANGNAME, szBufLng, 512);
GetLocaleInfo(MAKELCID(((UINT)lpList[i] & 0xffffffff),
SORT_DEFAULT), LOCALE_SISO3166CTRYNAME, szBufCtry, 512);
wprintf(L"%s-%s, %x\n", szBufLng, szBufCtry, (UINT)lpList[i]);
memset(szBufLng, 0, 512);
memset(szBufCtry, 0, 512);
}
if(lpList)
LocalFree(lpList);