Skip to main content

Overview

Keyboard shortcuts (hotkeys) are a core feature of PowerToys, allowing quick activation of utilities without leaving your current task. All shortcuts are customizable and checked for conflicts.

Hotkey structure

Keyboards shortcuts in PowerToys use the HotkeySettings class defined in src/settings-ui/Settings.UI.Library/HotkeySettings.cs:
public record HotkeySettings
{
    public bool Win { get; set; }      // Windows key
    public bool Ctrl { get; set; }     // Control key
    public bool Alt { get; set; }      // Alt key
    public bool Shift { get; set; }    // Shift key
    public int Code { get; set; }      // Virtual key code
}
Virtual key codes follow the Windows Virtual-Key Codes specification.

Default keyboard shortcuts

Global shortcuts

Default: Win + Alt + P (code: 80)Opens the Quick Access menu to quickly access any PowerToys module.Defined in GeneralSettings.cs:111

Utility shortcuts

UtilityDefault ShortcutActionViewModel Reference
PowerToys RunAlt + SpaceOpen launcherPowerLauncherViewModel.cs
Always On TopWin + Ctrl + TPin window on topAlwaysOnTopViewModel.cs
Color PickerWin + Shift + CActivate color pickerColorPickerViewModel.cs
FancyZones EditorWin + Shift + `Open zone editorFancyZonesViewModel.cs:95
FancyZones Next TabWin + PgDnSwitch to next zone tabFancyZonesViewModel.cs:96
FancyZones Prev TabWin + PgUpSwitch to previous zone tabFancyZonesViewModel.cs:97
Screen RulerWin + Shift + MActivate screen rulerMeasureToolViewModel.cs
Text ExtractorWin + Shift + TExtract text from screenPowerOcrViewModel.cs
Shortcut GuideWin (hold)Show Windows shortcutsShortcutGuideViewModel.cs

Customizing shortcuts

Via Settings UI

1

Open utility settings

Navigate to the specific utility’s settings page in PowerToys Settings
2

Click shortcut field

Click on the keyboard shortcut input field
3

Press new combination

Press your desired key combination (must include modifier keys)
4

Check for conflicts

PowerToys automatically checks for conflicts and displays warnings
5

Save changes

Changes are saved immediately and communicated via IPC to the Runner

Shortcut requirements

Valid shortcuts must meet these criteria (enforced in HotkeySettings.cs:226-234):
  • Must include at least one modifier key (Win, Ctrl, Alt, or Shift)
  • Must include a main key (letter, number, or function key)
  • Cannot use Tab alone (reserved for accessibility)
  • Cannot conflict with system shortcuts
// From HotkeySettings.cs:226-234
public bool IsValid()
{
    if (IsAccessibleShortcut())
    {
        return false;
    }
    
    return (Alt || Ctrl || Win || Shift) && Code != 0;
}

Shortcut format

Shortcuts are stored in JSON with virtual key codes:
{
  "win": true,
  "ctrl": false,
  "alt": true,
  "shift": false,
  "code": 80
}
This represents: Win + Alt + P (P has virtual key code 80)

Command-line format

Shortcuts can be specified via command line using the TryParseFromCmd method (HotkeySettings.cs:253-288):
# Format: Modifier+Modifier+Key
Win+Alt+P
Ctrl+Shift+F5
Win+Ctrl+Alt+0x43  # Using hex virtual key code
Supported modifiers: Win, Ctrl, Alt, ShiftKeys can be:
  • Single letters/digits: A, 5
  • Virtual key codes: 0x70 (F1)
  • Key names: F5, Home, End

Conflict detection

PowerToys includes sophisticated conflict detection to prevent shortcut collisions.

Conflict types

System conflicts

Conflicts with Windows built-in shortcuts (Win+L, Alt+Tab, etc.)Cannot be ignored

PowerToys conflicts

Conflicts between different PowerToys utilitiesCan be ignored if desired

Conflict properties

The HotkeySettings class tracks conflict state (HotkeySettings.cs:62-115):
public bool HasConflict { get; set; }          // Is there a conflict?
public string ConflictDescription { get; set; } // What conflicts?
public bool IsSystemConflict { get; set; }     // System vs. app conflict?
public bool IgnoreConflict { get; set; }       // User chose to ignore?

Conflict resolution workflow

1

Detect conflict

When you set a shortcut, PowerToys checks all registered shortcuts
2

Show warning

If a conflict exists, a warning appears with details about the conflicting shortcutImplementation: HotkeySettingsControlHook.cs
3

Choose action

You can:
  • Change your shortcut
  • Change the conflicting shortcut
  • Ignore the conflict (if not a system conflict)
4

Save preference

Ignored conflicts are saved in GeneralSettings.IgnoredConflictProperties

Accessing conflict information

Conflicts are surfaced through the GetAllHotkeySettings() method implemented by each ViewModel:
// From ColorPickerViewModel.cs:92-99
public override Dictionary<string, HotkeySettings[]> GetAllHotkeySettings()
{
    var hotkeysDict = new Dictionary<string, HotkeySettings[]>
    {
        [ModuleName] = [ActivationShortcut],
    };
    
    return hotkeysDict;
}

Advanced customization

Per-application shortcuts

Keyboard Manager allows remapping shortcuts differently for specific applications:
This is managed separately through Keyboard Manager’s UI and stored in default.json in the Keyboard Manager folder.See the Keyboard Manager documentation for details.

Disabling shortcuts

To disable a utility’s shortcut without disabling the utility:
  1. Clear the shortcut field in Settings UI
  2. The shortcut will be set to an empty state (Code = 0)
  3. The utility remains enabled but has no activation shortcut
{
  "win": false,
  "ctrl": false,
  "alt": false,
  "shift": false,
  "code": 0
}

Group Policy override

Shortcuts can be controlled via GPO for enterprise deployments. See Group Policy for details.

Shortcut best practices

Use Win key

Windows key combinations are less likely to conflict with applications

Avoid common combos

Stay away from Ctrl+C, Ctrl+V, Alt+F4, and other standard shortcuts

Be consistent

Use similar patterns across utilities (e.g., Win+Shift for activation)

Test thoroughly

Verify shortcuts work in your most-used applications

Troubleshooting

Shortcut not working

Some shortcuts don’t work with elevated applications unless PowerToys runs elevatedSolution: Enable “Run as administrator” in General settings
Another application may be capturing the shortcut firstSolution: Use a different shortcut or check the other application’s settings
The utility must be enabled for its shortcut to workSolution: Check the utility’s enabled state in Settings or Dashboard
Group Policy may be preventing shortcut customizationSolution: Contact your system administrator

Shortcut conflict detection not working

If conflicts aren’t being detected:
  1. Restart PowerToys to refresh the shortcut registry
  2. Check logs at %LOCALAPPDATA%\Microsoft\PowerToys\Logs
  3. Manually review settings.json for duplicate shortcuts

Settings overview

Learn about PowerToys configuration architecture

Group Policy

Control shortcuts via enterprise policy