BOOLEAN ProcessKeyboardLayoutRegistry( PGENERIC_LIST List) { PGENERIC_LIST_ENTRY Entry; PWCHAR LayoutId; const MUI_LAYOUTS * LayoutsList; MUI_LAYOUTS NewLayoutsList[20]; ULONG uIndex; ULONG uOldPos = 0; Entry = GetCurrentListEntry(List); if (Entry == NULL) return FALSE; LayoutId = (PWCHAR)GetListEntryUserData(Entry); if (LayoutId == NULL) return FALSE; LayoutsList = MUIGetLayoutsList(); if (_wcsicmp(LayoutsList[0].LayoutID, LayoutId) != 0) { for (uIndex = 1; LayoutsList[uIndex].LangID != NULL; uIndex++) { if (_wcsicmp(LayoutsList[uIndex].LayoutID, LayoutId) == 0) { uOldPos = uIndex; continue; } NewLayoutsList[uIndex].LangID = LayoutsList[uIndex].LangID; NewLayoutsList[uIndex].LayoutID = LayoutsList[uIndex].LayoutID; } NewLayoutsList[uIndex].LangID = NULL; NewLayoutsList[uIndex].LayoutID = NULL; NewLayoutsList[uOldPos].LangID = LayoutsList[0].LangID; NewLayoutsList[uOldPos].LayoutID = LayoutsList[0].LayoutID; NewLayoutsList[0].LangID = LayoutsList[uOldPos].LangID; NewLayoutsList[0].LayoutID = LayoutsList[uOldPos].LayoutID; return AddKbLayoutsToRegistry(NewLayoutsList); } return TRUE; }
BOOLEAN AddKeyboardLayouts( IN PCWSTR LanguageId) { ULONG lngIndex = 0; while (MUILanguageList[lngIndex].LanguageID != NULL) { if (_wcsicmp(MUILanguageList[lngIndex].LanguageID, LanguageId) == 0) { return AddKbLayoutsToRegistry(MUILanguageList[lngIndex].MuiLayouts); } lngIndex++; } return FALSE; }