A lightweight Windows system-tray controller for MSI laptops - without the
heavy, self-updating MSI Center UI (DCv2.exe).
Right now it switches User Scenarios (Extreme Performance / Balanced / ECO-Silent) instantly from the tray. More MSI controls are planned - see the Roadmap.
Inspired by Linux's MControlCenter - this is a Windows take, going through MSI's own service rather than raw EC access.
MSI Center's DCv2.exe is large and tends to update/reinstall itself at the
worst moments. But most of the time you only need to flip the User Scenario.
This app does exactly that - from the tray, instantly, with a tiny footprint.
MSI Center's UI is a thin shell: clicking a User Scenario tile sends a small command over a localhost TCP socket to the MSI background service, and the service performs the real power/fan switch. This app replays that exact command.
- No administrator rights required - it's just a localhost message, exactly like MSI's own UI sends.
- It does not poke the Embedded Controller directly, and it does not bundle, modify, or redistribute any MSI code or binaries.
- It only needs the MSI Center background service installed and running
(the stable part - you don't need the
DCv2.exeUI open).
- Windows x64
- An MSI laptop with MSI Center installed (background service running)
- Prebuilt release: nothing else - a single ~1-2 MB native
.exe, no .NET runtime needed (NativeAOT). Building from source: .NET 10 SDK + the Visual Studio C++ Desktop workload (the NativeAOT linker).
winget install Flakroup.MControlTray
(pending acceptance into the winget community repository)
- Download
MControlTray-win-x64.exefrom the latest release. - Put it anywhere and run it - an icon appears in the system tray.
- (Optional) Autostart at logon: press Win+R, type
shell:startup, and drop a shortcut to the.exethere.
-
Tray icon - a colored circle showing the active mode (
E/B/S). Left or right click opens the menu. -
Command line (great for shortcuts / hotkeys / Stream Deck):
MControlTray.exe --extreme MControlTray.exe --balanced MControlTray.exe --silent
The switch command was reverse-engineered and verified on:
- Board 15P2, Intel Core i7-14700HX, MSI Center 2.0.70
The TCP port is read from the registry (model-independent), but the scenario Index values and the receiver component id are currently hardcoded:
| Scenario | Index |
|---|---|
| Extreme Performance | 1 |
| Balanced | 2 |
| ECO / Silent | 4 |
On other models these may differ. Verify yours like this:
- Set the DWORD
IsDebug = 1underHKLM\SOFTWARE\Wow6432Node\MSI\MSI Center\Component\SDK(it is read live, no restart needed). - Open MSI Center and switch between your scenarios.
- Open
C:\ProgramData\MSI\MSI Center\Utility\Utility_<date>.txtand look forSendData >>lines. The JSON payload contains"Index":N- note whichNmaps to which scenario, and theDestID. - Delete the
IsDebugvalue afterwards (it did not exist originally).
If your values differ, adjust the constants in Program.cs - issues/PRs with
values for more models are very welcome.
- Endpoint: TCP
127.0.0.1:<port>, where<port>is the DWORDServer PortunderHKLM\SOFTWARE\Wow6432Node\MSI\MSI Center\Component\SDK(MSI's hardcoded fallback is32682). - Frame:
[DestID : int32 little-endian = 104][0x00][0x12][UTF-8 JSON] - JSON:
{"Index":N,"Performance":2,"Fan":0,"KB":-1,"PB":-1,"IsLoad":true}
The Embedded Controller byte 0xD2 mirrors the active scenario
(C4=Extreme, C1=Balanced, C2=Silent) but writing it does not switch
the mode - it is a status mirror, not a trigger. The real switch is the command
above, handled by the service.
dotnet publish -c Release -r win-x64
Produces a single self-contained native .exe (~1-2 MB) via NativeAOT - no .NET
runtime required to run it. Building it needs the Visual Studio C++ Desktop
workload (NativeAOT uses the MSVC linker).
Scope will grow into a broader MSI control tray. Planned / ideas (contributions welcome):
- User Scenario switching (Extreme / Balanced / ECO-Silent)
- Cooler Boost toggle
- Custom fan curves
- Battery charge limit
- Live active-state read-back
- Per-model config (no recompile)
Inspired by the Linux MSI community: msi-ec (a kernel EC driver) and MControlCenter (a Qt GUI). This project targets Windows and goes through MSI's official service rather than raw EC access.
Not affiliated with or endorsed by Micro-Star International Co., Ltd. (MSI). "MSI", "MSI Center", and product names are trademarks of their respective owners. This is an independent interoperability tool built from observed behavior. Provided as-is, use at your own risk.