A lightweight Windows tray app to switch MSI laptop power profiles — Silent / Balanced / Extreme / Super Battery — instantly via global hotkeys, the tray menu, or auto-switch on AC/battery, with an on-screen overlay showing the active profile.
Built because MSI Center 2.0 removed the Silent profile. This app talks to the Embedded Controller (EC) through MSI's own WMI interface — no kernel driver, no disabling of Windows security — so it works regardless of the MSI Center version (even with MSI Center uninstalled).
⚠️ Hardware-specific. Developed and tested on MSI Raider GE78HX 13V (board MS-17S1, i9-13950HX, EC firmware17S1IMS1.114). EC registers are model/firmware-specific — read docs/TECHNICAL.md before trying it on another model. Use at your own risk.
- 🖥️ Tray icon (color = active profile) with a profile menu
- ⌨️ Global, rebindable hotkeys (default
Ctrl+Alt+F1–F4,Ctrl+Alt+P= cycle) - 🔔 On-screen overlay (OSD) on every profile change
- 🌍 8 languages — EN / PL / DE / FR / ES / 中文 / PT-BR / RU
- 🎨 Custom color per profile
- 📊 Status window — live CPU/GPU temperature & fan %, charge limit, EC firmware, session stats
- 🔌 Optional auto-switch on AC / battery (off by default, so it won't fight MSI software)
- 🔋 Battery charge limit (60 / 80 / 100 %)
- 🚀 Start with Windows (elevated scheduled task — no UAC nag at logon)
- 🔄 Syncs the UI if the profile is changed externally (e.g. by MSI Center)
Grab the latest MSIProfileSwitcher.exe from the Releases page.
It's a single, self-contained file — no install, no .NET runtime needed. Run it and approve the UAC prompt (EC access requires administrator).
Each model is ✅ tested (verified on real hardware) or ⚗️ experimental (built from the msi-ec register maps but not yet verified — the "Silent" power-cap behaviour is unconfirmed). On an unrecognized firmware the app runs read-only (Status works, writes disabled), so it never writes wrong registers on an untested machine.
Experimental models are opt-in: enable them in Settings → Power → "Enable experimental models". They write only documented MSI shift/fan registers (low risk), but switching may not give the same low-power "Silent" until an owner confirms it.
| Model | EC firmware | Status |
|---|---|---|
| MSI Raider GE78HX / Vector GP78HX 13V | 17S1IMS1.* |
✅ tested |
| MSI Raider GE68HX 13V | 15M2IMS1.* |
⚗️ experimental |
| MSI GS66 Stealth | 16V1EMS1.* |
⚗️ experimental |
| MSI GS65 Stealth | 16Q4EMS1.* |
⚗️ experimental |
| MSI Katana GF66 | 1582EMS1.* |
⚗️ experimental |
| MSI Katana GF76 | 17L1EMS1.* |
⚗️ experimental |
| MSI GE66 Raider / GP66 Leopard | 1543EMS1.* |
⚗️ experimental |
| MSI GF65 Thin | 16W2EMS1.* |
⚗️ experimental |
Got a different MSI — or own an experimental one and can confirm it works? The easiest way is right inside the app: tray menu → Report my model… (also a button in the Status window). It walks you through a read-only EC capture in each MSI Center scenario, builds the report, copies it to your clipboard, saves it to a file, and opens a pre-filled GitHub issue — just paste and submit. (Requires MSI Center installed as the scenario reference.)
Prefer to do it by hand? Open a Model support request with your EC firmware (shown in the app's Status window) and the output of the diagnostic scripts in scripts/diagnostics/. The procedure is in docs/TECHNICAL.md §11.
Requires the .NET 8 SDK.
dotnet publish -c Release -r win-x64 --self-contained true ^
-p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publishThe app icon is generated by tools/gen-icon.ps1 (already committed as app.ico).
Each profile is a small set of EC register writes sent through root\wmi → MSI_ACPI.Set_Data (a 32-byte Package_32 buffer: Bytes[0] = address, Bytes[1] = value). The key lever is the fan-mode register 0xD4 (Silent = 0x1D), which the EC firmware ties to the power cap — in testing it dropped package power from ~104 W to ~30 W under load.
Full reverse-engineering write-up, register map, measurements and the diagnostic scripts: docs/TECHNICAL.md — also available in Polski.
EC register map credit: BeardOverflow/msi-ec.
Can I set an exact wattage (a power slider)? Not the way this app works — and that's actually the core reason it exists. The app doesn't set watts directly: it flips MSI's built-in EC power modes (the Silent / Balanced / Extreme presets), and the firmware decides the wattage for each mode. Setting an arbitrary PL1/PL2 number would mean writing Intel's power-limit registers — but on these MSI laptops those are locked (MSR is BIOS-locked, MMIO is overridden by Intel DTT). That's exactly why ThrottleStop and Intel XTU can't cap wattage on most of these machines either. MSI's EC doesn't expose a writable power-limit register, and the msi-ec maps don't show one for the boards I've checked — so from software, on a locked machine, a free slider isn't on the table.
There is one route to a real slider, though — outside this app. If your model lets you disable Overclocking Lock / CFG Lock in the hidden Advanced BIOS, the MSR power-limit registers open up, and ThrottleStop (or Intel XTU) can then set PL1/PL2 directly — that's your actual watt slider. Caveats: (1) on many 13th-gen MSI these BIOS options are greyed out or locked by microcode, so it's not guaranteed; (2) it's a manual, at-your-own-risk change in an unofficial BIOS menu; (3) even after the MSR is unlocked, Intel DTT can still override the limit via MMIO.
Is there any risk of damaging my laptop? Very low. The app uses MSI's official WMI interface (the same channel MSI Center uses), writes only the exact register values MSI's own profiles use, and EC writes are volatile — a reboot resets the EC to firmware defaults (nothing is flashed). On an unrecognized firmware it stays read-only and writes nothing. The CPU also keeps its own hardware thermal protection that no EC write can disable. Experimental models are opt-in and write only documented mode registers.
Why does it ask for administrator (UAC)? EC access via WMI requires elevation. Launching manually shows one UAC prompt; the Start with Windows option uses an elevated scheduled task so there's no UAC nag at every logon.
To preview the experimental / unsupported UI on any machine, set the MSIPS_FORCE_FIRMWARE environment variable to a firmware string before launching. The app then simulates that firmware and performs no EC writes (UI preview only):
# Run from an ADMIN PowerShell so the variable reaches the elevated app:
$env:MSIPS_FORCE_FIRMWARE = "16V1EMS1.100" # an experimental model
# or "ZZZZ" for an unsupported firmware
& .\MSIProfileSwitcher.exe
# (close it, clear the variable, relaunch to return to normal)The Status window / tray show a (test) marker while simulating.
MIT © 2026 wygodad