Make an Apple Magic Keyboard's top row work on Windows without a paid driver.
On Windows, the Magic Keyboard's F-row sends plain F1–F12, so the printed
volume, playback and brightness keys do nothing. MagicVolume is a small
background app that turns those keys back into what's printed on them. It needs no
admin rights, no kernel driver and no driver signing.
| Key | Does |
|---|---|
F1 / F2 |
Brightness down / up (hold to ramp) |
F3 |
Task View (Win+Tab) |
F4 |
Search (Ctrl+Shift+S, e.g. PowerToys Run) |
F5 |
Toggle microphone mute (low beep = muted, high beep = live) |
F6 |
Sleep |
F7 / F8 / F9 |
Previous / play-pause / next track |
F10 |
Mute |
F11 / F12 |
Volume down / up (hold to ramp) |
Shift + any of them |
The real function key |
Ctrl+Alt+F12 |
Turn the whole remap on/off (a software fn-lock) |
Every key can be remapped in mapping.ini. See
Configuration.
Requirements: Windows 10 or 11 (x64). The .NET Framework 4.x runtime it needs is already part of Windows.
-
Download
MagicVolume.zipfrom the latest release and unzip it somewhere permanent, for example%LOCALAPPDATA%\MagicVolume. -
In that folder, run:
powershell -ExecutionPolicy Bypass -File install.ps1
This starts MagicVolume and sets it to start every time you log in.
The exe is unsigned, so Windows SmartScreen may warn you the first time. Choose More info → Run anyway, or build it yourself from the source in this repo.
powershell -ExecutionPolicy Bypass -File uninstall.ps1This stops the app and removes both autostart entries. Then delete the folder.
No Visual Studio needed. Windows ships a C# compiler with .NET Framework:
build.cmd :: MagicVolume.exe + all diagnostic tools
build.cmd app :: just MagicVolume.exeOr by hand:
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\csc.exe -platform:x64 -target:winexe -out:MagicVolume.exe MagicVolume.csBecause Windows throws it away before any normal program can see it. The
keyboard does send fn, but Windows' built-in keyboard driver discards
it, and the raw keyboard data is locked from normal apps as anti-keylogger
protection. Only a signed kernel driver can read it, and that signed driver is what
the paid Magic Keyboard utilities charge for. So MagicVolume uses Shift as the
modifier instead. Full write-up: How it works.
- Configuration: every
mapping.inisetting and action - How it works: the keyboard hook, the brightness overlay, and why
fnis unreachable - Troubleshooting: keys stop working, SmartScreen, brightness, autostart
- Diagnostic tools: the probes used to work all this out
MagicVolume uses a low-level keyboard hook to see the F-keys. It only acts on
bare F1–F12 and the toggle hotkey, and passes everything else through
untouched. It never records other keystrokes, and it makes no network connections.
magicvolume.log records only startup settings, on/off toggles, mic mute
state and errors. It never records which keys you press.
The separate diagnostic tool KeyProbe.exe does print every keypress,
because that's its job. Run it only when you're debugging, and don't share its output.