MControlTray: Lightweight System-Tray Controller for MSI Laptops
MControlTray is a lightweight Windows tray application designed to control user scenarios on MSI laptops, enabling instant switching between Extreme Performance, Balanced, and ECO-Silent modes without the need for the bulky MSI Center UI. This tool offers a sleek, efficient alternative for managing your laptop's performance settings.
Key Features:
Instant Scenario Switching: Access three user scenarios—Extreme Performance, Balanced, and ECO-Silent—with just a click from the system tray icon.
Lightweight Design: Operates with minimal resource usage, ensuring smooth performance without unnecessary overhead.
No Administrator Rights Required: Functions by sending commands to MSI's background service via localhost, eliminating the need for elevated privileges.
Seamless Integration: Works in conjunction with MSI's existing service, avoiding direct EC access and ensuring compatibility without redistributing MSI binaries.
Audience & Benefits:
Ideal for users seeking a quick, streamlined way to adjust performance settings on their MSI laptops. MControlTray provides the benefit of instant scenario switching, enhancing productivity or power efficiency as needed, all while maintaining a clean, unobtrusive interface.
Installable via winget, MControlTray is an excellent choice for those who prefer simplicity and efficiency in managing their laptop's performance. Inspired by Linux tools, it brings a similar philosophy to Windows, focusing on interoperability and ease of use.
README
MControlTray
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.
Why
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.
How it works
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.exe UI open).
Requirements
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).
Install
winget
winget install Flakroup.MControlTray
(pending acceptance into the winget community repository)
Manual
Download MControlTray-win-x64.exe from 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 there.
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 = 1 under
HKLM\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_.txt and look for
SendData >> lines. The JSON payload contains "Index":N - note which N
maps to which scenario, and the DestID.
Delete the IsDebug value 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.
Protocol (for the curious / porters)
Endpoint: TCP 127.0.0.1:, where `` is the DWORD
Server Port under HKLM\SOFTWARE\Wow6432Node\MSI\MSI Center\Component\SDK
(MSI's hardcoded fallback is 32682).
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.
Build from source
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).
Roadmap
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)
Prior art & credits
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.
Disclaimer
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.