Text expansion has a particular failure signature: it works in nine applications and silently does nothing in the tenth. Nothing errors, nothing is logged, the trigger just sits there as literal text.

That is almost always correct behaviour, for a reason nobody has told you about. Here are the reasons, in the order they turn out to be the cause.

Rule out the boring causes first

  1. 1. Is expansion paused? Check the tray icon's tooltip. Ctrl+Shift+Pause toggles it and is easy to hit by accident.
  2. 2. Did you press a delimiter? A snippet fires after Space, Tab or Enter, not the moment the trigger is complete.
  3. 3. Is the trigger exactly right? ;email and ;e-mail are different snippets, and a leading space you did not intend breaks the match.
  4. 4. Did the app just start? Some applications create their input handling after the window appears. Type once, wait a second, type again.

If it works in Notepad and not in the app you care about, it is one of the following.

The other window is running as administrator

The most common cause and the least obvious.

Windows enforces User Interface Privilege Isolation: a process at normal integrity cannot send synthetic input to a process running elevated. Your expander is a normal desktop app. The elevated window — an admin PowerShell, a database console launched as administrator, an installer, some IT tooling — sits above it. The keystrokes are not blocked by the application; they are refused by the operating system.

It looks like this: expansion works in that same program when you launch it normally and stops the moment you launch it as administrator.

Three options, in order of preference. Run the target application without elevation, which most do not actually need. Run the expander as administrator too, so both sit at the same integrity level — a real trade-off, because an elevated process that hooks the keyboard is a larger thing to trust and it needs re-elevating on every start. Or use the clipboard for that one window.

There is no fourth. This is a security boundary working as designed.

It is a password field, or a password manager

Text Replacements blocks expansion in password fields, detected through Windows UI Automation, and keeps a denylist of password managers — 1Password, Bitwarden, KeePass, KeePassXC, LastPass, Dashlane, Keeper, Enpass — where it never expands at all.

This is deliberate and there is no setting for it. A tool that types stored text into a masked field eventually types the wrong stored text into a masked field, in a window you cannot read back.

It looks like this: expansion is dead in one specific field on a page, or everywhere inside your password manager, while the rest of the same application is fine.

It is a remote session or a virtual machine

Remote Desktop, Citrix, VMware, Hyper-V, Parsec, Windows Sandbox: your keystrokes are captured by the client and forwarded to the remote machine. The expander is running locally, watching keys already on their way elsewhere, and the application that would receive the expansion is not on this computer.

It looks like this: expansion works on your desktop and stops the instant focus enters the remote window.

The fix is to install inside the session. Text Replacements does not work in Windows Sandbox or in virtual machine guests when run from the host; the expander has to live on the same machine as the application receiving the text.

The application draws its own text

A few programs implement text input themselves rather than using standard Windows controls: some games, some cross-platform toolkits, some remote consoles, some terminal emulators in unusual modes.

These receive keystrokes normally but expose no accessible text field, and some consume input in a way a synthetic keystroke does not survive. There is no general fix. Use the clipboard for them, or keep the snippet somewhere you can copy from.

Enter is the send key

Not a failure of expansion but a collision.

In Slack, Teams, WhatsApp Desktop, Telegram and Discord, Enter sends the message. If your delimiter is Enter, you type ;sig, press Enter, and the app may send ;sig before the expansion lands — or send the first line of a multi-line replacement and start a new message with the rest.

  • Use Space or Tab in chat apps. Type ;sig then Space; the expansion lands and you press Enter deliberately.
  • Keep multi-line snippets out of chat. A replacement containing line breaks is split across several messages in any client where Enter sends. Use Shift+Enter inside the app for a real line break, and save multi-line snippets for mail and documents.
  • Text Replacements offers two trigger modes: Space, Tab and Enter, or an extended mode that also fires after . , ! ?. The extended mode suits sentence-end snippets and is set in Settings.

Security software has blocked the keyboard hook

Text expansion works through a low-level keyboard hook, the same mechanism a keylogger uses, and some endpoint protection products block it. Usually silently, and sometimes after an update that changed a policy rather than at install time.

It looks like this: expansion worked for weeks and then stopped everywhere at once, Notepad included.

Check your antivirus or EDR quarantine and exclusion lists for the expander's executable. On a managed work machine this is a conversation with IT rather than a setting you can change.

The keyboard layout, when your triggers are Latin and you are not

If you type in Russian, Greek, Hebrew, Arabic or another non-Latin layout, a trigger defined as ;email produces entirely different characters, and a naive matcher never sees it.

Text Replacements resolves the US-layout equivalent of each keypress and matches against that, so Latin triggers fire while you type in another layout. If you came from a different tool and your triggers stopped working when you switched layouts, this is the behaviour you were missing.

Quick reference

Symptom Cause Fix
Works normally, fails when the app runs as admin Integrity boundary Match integrity levels, or do not elevate
Dead in one field only Password field detection By design
Dead in the whole app Password manager denylist By design
Stops at the remote window edge Remote session, VM or Sandbox Install inside the session
Trigger is sent as a message Enter is the send key Use Space or Tab as the delimiter
Multi-line snippet arrives as several messages Enter sends each line Do not use multi-line snippets in chat
Stopped everywhere at once Security software blocked the hook Add an exclusion
Nothing fires anywhere Paused Ctrl+Shift+Pause

Frequently asked questions

Why does it work in Word but not in an elevated command prompt?
Because Windows refuses synthetic input from a lower-integrity process to a higher-integrity one. Word is running as you; the elevated prompt is not.
Can I force expansion in password fields?
No, and there is no setting for it. That is intentional.
Does it work in Chrome, Edge and Firefox?
Yes, including inside web applications, with one exception you will meet: fields the browser marks as password fields are blocked, as everywhere else.
Does it work over Remote Desktop if I install it on the remote machine?
Yes. The expander needs to be on the same machine as the application receiving the text. Installed remotely, it behaves normally inside the session.
My snippet expands but the text is mangled or out of order.
Usually an application with slow input handling receiving keystrokes faster than it processes them. Shorten the snippet, or use the clipboard for that program.
Is there a list of applications where it is guaranteed to work?
Text Replacements uses a system-wide keyboard hook, so it works in ordinary desktop applications: browsers, Office, VS Code, Slack, Outlook, PowerShell, Notepad. The exceptions are the ones above.