Skip to main content

Overview

Keyboard Manager allows you to remap keys and create custom keyboard shortcuts. Define remappings that work system-wide or configure application-specific shortcuts for ultimate keyboard customization and productivity.
Key remappings affect the entire system. Test carefully, especially with critical keys like Ctrl, Alt, and Win.

Activation

1

Enable Keyboard Manager

Open PowerToys Settings and enable Keyboard Manager
2

Open Keyboard Manager

Click “Open Keyboard Manager” or “Remap a key” in settings
3

Choose Remapping Type

Select “Remap keys” or “Remap shortcuts”
4

Create Remappings

Define your key or shortcut remappings
5

Apply Changes

Click “OK” to apply remappings (takes effect immediately)

Key Features

Key Remapping

Single Key Remap

Change what a key doesExample: Caps Lock → Escape

Modifier Keys

Swap or remap modifiersExample: Ctrl ↔ Alt

Disable Keys

Disable unwanted keysMap to “Disable” to prevent activation

System-Wide

Remappings work everywhereApplies to all applications

Shortcut Remapping

Create custom keyboard shortcuts:
System-wide shortcut remapping:
Original:   Ctrl+B
Remapped:   Ctrl+Shift+B

Original:   Win+L
Remapped:   Win+Shift+L
Use cases:
  • Avoid shortcut conflicts
  • Match other OS shortcuts
  • Custom workflow shortcuts

Remapping Editor

Graphical interface for configuration:
// Remapping structure
public class KeyRemapping
{
    public uint OriginalKey { get; set; }     // Virtual key code
    public uint RemappedKey { get; set; }     // Target virtual key code
}

public class ShortcutRemapping
{
    public Shortcut Original { get; set; }
    public Shortcut Remapped { get; set; }
    public string TargetApp { get; set; }     // Optional, for app-specific
}

public class Shortcut
{
    public uint Key { get; set; }
    public bool Win { get; set; }
    public bool Ctrl { get; set; }
    public bool Alt { get; set; }
    public bool Shift { get; set; }
}
Source: src/modules/keyboardmanager/KeyboardManagerEditorLibrary/

Type Key Button

Visual key selector:
  1. Click “Type Key” button
  2. Press the key you want to remap
  3. Key name appears in field
  4. Supports all keyboard keys including special keys
Supported:
  • Letter keys (A-Z)
  • Number keys (0-9)
  • Function keys (F1-F24)
  • Modifier keys (Ctrl, Alt, Shift, Win)
  • Special keys (Home, End, PgUp, PgDn, Insert, Delete)
  • Navigation keys (Arrows)
  • Media keys (Play, Pause, Volume, etc.)
  • Numpad keys

Application Targeting

For app-specific remappings:
target_application
string
Application executable nameExamples:
  • chrome.exe
  • Code.exe (VS Code)
  • EXCEL.EXE
  • notepad.exe
Note: Case-insensitive, must include .exe extension
Process name detection:
  • Keyboard Manager monitors foreground window
  • Checks process executable name
  • Applies remappings if match found
  • Reverts to global remappings otherwise

Configuration

Settings Location

Remappings stored in:
%LOCALAPPDATA%\Microsoft\PowerToys\KeyboardManager\default.json

Common Key Remappings

Popular among developers:
Original: Caps Lock
Remapped: Esc
Why: Easier to reach Escape in Vim/terminals
Ergonomic improvement:
Original: Caps Lock
Remapped: Left Ctrl
Why: Ctrl more accessible, less pinky strain
For Mac users on Windows:
Left Ctrl  ↔  Left Alt
Right Ctrl ↔  Right Alt
Why: Match macOS keyboard layout (Cmd position)
Prevent accidental activation:
Left Win  →  Disable
Right Win →  Disable
Why: Gaming, prevent Start menu during work
Easier PowerToys shortcuts:
Right Alt → Left Win
Why: Access Win shortcuts with thumb

Shortcut Examples

# VS Code specific
Ctrl+K, Ctrl+D → Alt+Shift+F  (Format document)
Ctrl+` → Ctrl+J            (Toggle terminal)

# Chrome specific  
Ctrl+Shift+N → Ctrl+Shift+P  (Incognito)

Use Cases

Ergonomic Improvements

1

Reduce Pinky Strain

Move frequently used keys closer:
  • Caps Lock → Backspace
  • Caps Lock → Ctrl
  • Enter → Caps Lock (if needed)
2

Thumb Optimization

Utilize thumb keys more:
  • Right Alt → Win
  • Menu Key → Ctrl
  • Space (when held) → Fn layer
3

Split Keyboard Simulation

Remap for comfort:
  • Left space for one hand
  • Right space for other
  • Reduce hand movement

Cross-Platform Consistency

Make Windows feel like macOS:
Left Alt  → Left Ctrl   (Cmd → Ctrl)
Left Ctrl → Left Alt    (Ctrl → Option)

Application-level shortcuts:
Cmd+C (now Alt+C) → Ctrl+C
Cmd+V (now Alt+V) → Ctrl+V

Accessibility

One-Handed Typing

Remap keys for single-hand useMirror keyboard layout or custom layout

Reduced Hand Movement

Bring distant keys closerMinimize wrist/arm movement

Alternative Input

Map keys to easier-to-press alternativesAccommodate limited dexterity

Gaming Accessibility

Custom key layouts for gamingOne-handed gaming setups

Application Workflows

Consistent shortcuts across IDEs:
In VS Code:
  Ctrl+K, Ctrl+D → Alt+Shift+F

In Visual Studio:
  (Keep default Alt+Shift+F)

Result: Same shortcut across both IDEs
Quick access to extension shortcuts:
F1 → Alt+Shift+P  (Password manager)
F2 → Alt+Shift+T  (Translator)
F3 → Alt+Shift+N  (Notes)
Standardize shortcuts across Adobe apps:
In Photoshop:
  Ctrl+Alt+I → Ctrl+Shift+I  (Match Lightroom)

In Illustrator:
  Ctrl+U → Ctrl+Shift+U      (Match Photoshop)

Technical Details

Architecture

Low-Level Keyboard Hook

Keyboard Manager uses Windows keyboard hooks:
// Install keyboard hook
HHOOK keyboardHook = SetWindowsHookEx(
    WH_KEYBOARD_LL,           // Low-level keyboard hook
    KeyboardProc,             // Callback function
    hInstance,
    0                         // All threads
);

// Hook callback
LRESULT CALLBACK KeyboardProc(
    int nCode,
    WPARAM wParam,
    LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        KBDLLHOOKSTRUCT* kbd = (KBDLLHOOKSTRUCT*)lParam;
        
        // Check if key should be remapped
        if (ShouldRemapKey(kbd->vkCode))
        {
            uint remappedKey = GetRemappedKey(kbd->vkCode);
            
            // Inject remapped key
            InjectKey(remappedKey, wParam);
            
            // Block original key
            return 1;
        }
    }
    
    return CallNextHookEx(keyboardHook, nCode, wParam, lParam);
}
Source: src/modules/keyboardmanager/

Key Injection

Remapped keys injected via SendInput:
void InjectKey(UINT vkCode, WPARAM event)
{
    INPUT input = {};
    input.type = INPUT_KEYBOARD;
    input.ki.wVk = vkCode;
    input.ki.dwFlags = (event == WM_KEYUP) ? KEYEVENTF_KEYUP : 0;
    
    SendInput(1, &input, sizeof(INPUT));
}

Virtual Key Codes

Windows uses virtual key codes for keys:
// Common virtual key codes
#define VK_BACK         0x08  // Backspace
#define VK_TAB          0x09  // Tab
#define VK_RETURN       0x0D  // Enter
#define VK_SHIFT        0x10  // Shift
#define VK_CONTROL      0x11  // Ctrl
#define VK_MENU         0x12  // Alt
#define VK_CAPITAL      0x14  // Caps Lock
#define VK_ESCAPE       0x1B  // Escape
#define VK_SPACE        0x20  // Space
// ... and many more
Full list: MSDN Virtual-Key Codes

Keyboard Shortcuts

In Keyboard Manager Editor

ShortcutAction
Ctrl+SSave remappings
EscCancel and close
TabNavigate fields
EnterConfirm “Type Key” dialog
DeleteRemove selected remapping

Troubleshooting

Check:
  • Keyboard Manager is enabled in PowerToys Settings
  • PowerToys is running
  • Remapping is defined correctly
  • No conflicting remappings
Debug:
  1. Open Keyboard Manager editor
  2. Verify remapping exists
  3. Test with simple remap (e.g., F1 → F2)
  4. Restart PowerToys
Certain keys have limitations:
  • Fn key: Usually hardware-level, cannot remap
  • Power button: System-level, protected
  • Secure keys: Ctrl+Alt+Del cannot be remapped
Elevated applications:
  • Remappings may not work in apps running as admin
  • Run PowerToys as admin to fix
Verify:
  1. Application name matches exactly (check Task Manager)
  2. Include .exe extension
  3. Case doesn’t matter, but spelling does
  4. Some UWP apps may not work (Store apps)
Example:
Correct:   chrome.exe
Incorrect: Chrome
Incorrect: chrome
Problem: Accidentally remapped critical keysFix:
  1. Open PowerToys Settings (if you can type)
  2. Disable Keyboard Manager
  3. Open Keyboard Manager editor
  4. Delete problematic remapping
  5. Re-enable Keyboard Manager
Emergency: Use on-screen keyboard to navigate:
  • Win+Ctrl+O (open on-screen keyboard)
Resolution:
  1. Use app-specific remappings instead of global
  2. Choose less common key combinations
  3. Document conflicts
  4. Consider disabling app’s native shortcut
Example conflict:
Ctrl+Shift+E in VS Code (Explorer)
Ctrl+Shift+E in Windows (Folder in File Explorer)

Solution: Make Windows one app-specific

Best Practices

Safety Tips:
  1. Test First: Try remappings in safe environment
  2. Document Changes: Keep list of all remappings
  3. Start Simple: One or two remappings at a time
  4. Avoid Critical Keys: Don’t remap Ctrl, Alt without care
  5. Backup Config: Export settings before major changes
  6. Use App-Specific: When possible, prefer app-specific over global
Common productivity remappings:

✓ Caps Lock → Ctrl or Escape
  (Most users don't need Caps Lock)

✓ Right Alt → Win
  (Easier PowerToys shortcuts)

✓ Menu Key → Ctrl
  (Rarely used key becomes useful)

✗ Avoid remapping:
  - Left Ctrl (too many shortcuts depend on it)
  - Enter (critical for many operations)
  - Backspace (essential editing key)

See Also