Custom Keyboard Layouts in Windows 11 No Longer Works

Joppy 5 Reputation points
2025-07-23T19:30:54.4466667+00:00

Plain and simple. I use a custom keyboard layout that I made myself. It has been working for year on windows 7 and windows 10. I update to windows 11. It no longer works. When I use the same install files they install seemingly fine, but then they display as "Unavailable input method".

I will downgrade and refuse to upgrade until you fix this, since the extra functionality it offers its essential to me. Remapping in registry, auto hotkey, custom keyboard etc. are not solution and doesn't work as well as native layouts.

Windows for home | Windows 11 | Input and language
0 comments No comments

6 answers

Sort by: Oldest
  1. buyi1net 0 Reputation points
    2026-09-03T20:42:27.5133333+00:00

    Root cause analysis + a working workaround (tested on 26200.9168 / 25H2)

    We hit the same "Unavailable input method" wall with custom KLID layouts and ran a full experiment matrix on Windows 11 25H2 (build 26200.9168). Findings:

    Why it shows "Unavailable input method": The Settings page (Language options → Keyboards) resolves keyboard entry display names only from the built-in layout tables (input.dll / NLS). Any custom KLID (the a0000xxx namespace MSKLC generates) is outside those tables, so Settings falls back to "Unavailable input method" — regardless of:

    • Layout Text being set correctly

    Layout Display Name being set (plain string or indirect string)

    The entry being written through the modern API channel (Get-WinUserLanguageList / Set-WinUserLanguageList round-trip — which, notably, does accept and preserve custom KLIDs)

    Meanwhile the tray indicator, the Win+Space input switcher, and actual typing all work correctly with the custom layout. The defect is purely in Settings' name-resolution path.

    Additional data points from our experiments:

    Removing Layout Id from the layout registration does NOT fix the Settings display — it actually breaks layout loading (the layout silently disappears from the switcher). Layout Id is required.

    On 24H2+ the per-language "Add a keyboard" list is curated: for zh-CN it only offers Microsoft Pinyin / Microsoft Wubi. The plain US keyboard is no longer offered, and custom KLID layouts are never enumerated. For users who need a bare US layout under the Chinese language (e.g., gaming: zero key interception, no IME global hotkeys, no candidate popup in fullscreen games), the Settings UI path is fully closed — registry is the only way.

    The legacy d0000804 preload-substitute chain stopped having any effect on the tray indicator since 24H2.

    Workaround that works (functional surfaces): Register a custom KLID (e.g. a0000804: Layout File = KBDUS.DLL, Layout Text = <same as language display name>, Layout Id = 0ae1), then use it as the language's keyboard entry (0804:a0000804 in the user profile). Tray/switcher/typing are all correct. Accept the cosmetic "Unavailable input method" in Settings until this is fixed.

    We'd appreciate the Settings team either resolving custom layout names from Layout Text/Layout Display Name, or restoring custom layouts (and the plain US keyboard for non-Latin languages) to the per-language add list.Root cause analysis + a working workaround (tested on 26200.9168 / 25H2)

    We hit the same "Unavailable input method" wall with custom KLID layouts and ran a full experiment matrix on Windows 11 25H2 (build 26200.9168). Findings:

    Why it shows "Unavailable input method": The Settings page (Language options → Keyboards) resolves keyboard entry display names only from the built-in layout tables (input.dll / NLS). Any custom KLID (the a0000xxx namespace MSKLC generates) is outside those tables, so Settings falls back to "Unavailable input method" — regardless of:

    Layout Text being set correctly

    Layout Display Name being set (plain string or indirect string)

    The entry being written through the modern API channel (Get-WinUserLanguageList / Set-WinUserLanguageList round-trip — which, notably, does accept and preserve custom KLIDs)

    Meanwhile the tray indicator, the Win+Space input switcher, and actual typing all work correctly with the custom layout. The defect is purely in Settings' name-resolution path.

    Additional data points from our experiments:

    Removing Layout Id from the layout registration does NOT fix the Settings display — it actually breaks layout loading (the layout silently disappears from the switcher). Layout Id is required.

    On 24H2+ the per-language "Add a keyboard" list is curated: for zh-CN it only offers Microsoft Pinyin / Microsoft Wubi. The plain US keyboard is no longer offered, and custom KLID layouts are never enumerated. For users who need a bare US layout under the Chinese language (e.g., gaming: zero key interception, no IME global hotkeys, no candidate popup in fullscreen games), the Settings UI path is fully closed — registry is the only way.

    The legacy d0000804 preload-substitute chain stopped having any effect on the tray indicator since 24H2.

    Workaround that works (functional surfaces): Register a custom KLID (e.g. a0000804: Layout File = KBDUS.DLL, Layout Text = <same as language display name>, Layout Id = 0ae1), then use it as the language's keyboard entry (0804:a0000804 in the user profile). Tray/switcher/typing are all correct. Accept the cosmetic "Unavailable input method" in Settings until this is fixed.

    We'd appreciate the Settings team either resolving custom layout names from Layout Text/Layout Display Name, or restoring custom layouts (and the plain US keyboard for non-Latin languages) to the per-language add list.

    Was this answer helpful?

    2 people found this answer helpful.
    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.