├── .gitignore ├── LICENSE ├── Lib ├── ADL.dll ├── BIOSData │ ├── BIOSData.db │ ├── BIOSData.txt │ ├── SCEWIN.exe │ ├── SCEWIN_64.exe │ ├── amifldrv32.sys │ └── amifldrv64.sys ├── DeviceManagerDLL.dll ├── FintekUSBDll.dll ├── ICCS_8 │ ├── Class_ICCS_8.dll │ └── Interop.ICCProxyLib.dll ├── ICCS_9 │ ├── Class_ICCS_9.dll │ └── Interop.ICCProxyLib.dll ├── MBAPI_x86.dll ├── NDA.dll ├── NTIOLib.sys ├── NTIOLib_X64.sys ├── SetupICCS_9.exe ├── USB_DLL.dll ├── devcon.exe └── devcon64.exe ├── MSI LED Tool.sln ├── MSI LED Tool ├── AdlGraphicsInfo.cs ├── AnimationType.cs ├── App.config ├── Constants.cs ├── JsonSerializer.cs ├── LedSettings.cs ├── MSI LED Tool.csproj ├── Manufacturer.cs ├── NdaGraphicsInfo.cs ├── Program.cs └── Properties │ └── AssemblyInfo.cs └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015/2017 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # Visual Studio 2017 auto generated files 33 | Generated\ Files/ 34 | 35 | # MSTest test Results 36 | [Tt]est[Rr]esult*/ 37 | [Bb]uild[Ll]og.* 38 | 39 | # NUNIT 40 | *.VisualState.xml 41 | TestResult.xml 42 | 43 | # Build Results of an ATL Project 44 | [Dd]ebugPS/ 45 | [Rr]eleasePS/ 46 | dlldata.c 47 | 48 | # Benchmark Results 49 | BenchmarkDotNet.Artifacts/ 50 | 51 | # .NET Core 52 | project.lock.json 53 | project.fragment.lock.json 54 | artifacts/ 55 | 56 | # StyleCop 57 | StyleCopReport.xml 58 | 59 | # Files built by Visual Studio 60 | *_i.c 61 | *_p.c 62 | *_i.h 63 | *.ilk 64 | *.meta 65 | *.obj 66 | *.iobj 67 | *.pch 68 | *.pdb 69 | *.ipdb 70 | *.pgc 71 | *.pgd 72 | *.rsp 73 | *.sbr 74 | *.tlb 75 | *.tli 76 | *.tlh 77 | *.tmp 78 | *.tmp_proj 79 | *.log 80 | *.vspscc 81 | *.vssscc 82 | .builds 83 | *.pidb 84 | *.svclog 85 | *.scc 86 | 87 | # Chutzpah Test files 88 | _Chutzpah* 89 | 90 | # Visual C++ cache files 91 | ipch/ 92 | *.aps 93 | *.ncb 94 | *.opendb 95 | *.opensdf 96 | *.sdf 97 | *.cachefile 98 | *.VC.db 99 | *.VC.VC.opendb 100 | 101 | # Visual Studio profiler 102 | *.psess 103 | *.vsp 104 | *.vspx 105 | *.sap 106 | 107 | # Visual Studio Trace Files 108 | *.e2e 109 | 110 | # TFS 2012 Local Workspace 111 | $tf/ 112 | 113 | # Guidance Automation Toolkit 114 | *.gpState 115 | 116 | # ReSharper is a .NET coding add-in 117 | _ReSharper*/ 118 | *.[Rr]e[Ss]harper 119 | *.DotSettings.user 120 | 121 | # JustCode is a .NET coding add-in 122 | .JustCode 123 | 124 | # TeamCity is a build add-in 125 | _TeamCity* 126 | 127 | # DotCover is a Code Coverage Tool 128 | *.dotCover 129 | 130 | # AxoCover is a Code Coverage Tool 131 | .axoCover/* 132 | !.axoCover/settings.json 133 | 134 | # Visual Studio code coverage results 135 | *.coverage 136 | *.coveragexml 137 | 138 | # NCrunch 139 | _NCrunch_* 140 | .*crunch*.local.xml 141 | nCrunchTemp_* 142 | 143 | # MightyMoose 144 | *.mm.* 145 | AutoTest.Net/ 146 | 147 | # Web workbench (sass) 148 | .sass-cache/ 149 | 150 | # Installshield output folder 151 | [Ee]xpress/ 152 | 153 | # DocProject is a documentation generator add-in 154 | DocProject/buildhelp/ 155 | DocProject/Help/*.HxT 156 | DocProject/Help/*.HxC 157 | DocProject/Help/*.hhc 158 | DocProject/Help/*.hhk 159 | DocProject/Help/*.hhp 160 | DocProject/Help/Html2 161 | DocProject/Help/html 162 | 163 | # Click-Once directory 164 | publish/ 165 | 166 | # Publish Web Output 167 | *.[Pp]ublish.xml 168 | *.azurePubxml 169 | # Note: Comment the next line if you want to checkin your web deploy settings, 170 | # but database connection strings (with potential passwords) will be unencrypted 171 | *.pubxml 172 | *.publishproj 173 | 174 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 175 | # checkin your Azure Web App publish settings, but sensitive information contained 176 | # in these scripts will be unencrypted 177 | PublishScripts/ 178 | 179 | # NuGet Packages 180 | *.nupkg 181 | # The packages folder can be ignored because of Package Restore 182 | **/[Pp]ackages/* 183 | # except build/, which is used as an MSBuild target. 184 | !**/[Pp]ackages/build/ 185 | # Uncomment if necessary however generally it will be regenerated when needed 186 | #!**/[Pp]ackages/repositories.config 187 | # NuGet v3's project.json files produces more ignorable files 188 | *.nuget.props 189 | *.nuget.targets 190 | 191 | # Microsoft Azure Build Output 192 | csx/ 193 | *.build.csdef 194 | 195 | # Microsoft Azure Emulator 196 | ecf/ 197 | rcf/ 198 | 199 | # Windows Store app package directories and files 200 | AppPackages/ 201 | BundleArtifacts/ 202 | Package.StoreAssociation.xml 203 | _pkginfo.txt 204 | *.appx 205 | 206 | # Visual Studio cache files 207 | # files ending in .cache can be ignored 208 | *.[Cc]ache 209 | # but keep track of directories ending in .cache 210 | !*.[Cc]ache/ 211 | 212 | # Others 213 | ClientBin/ 214 | ~$* 215 | *~ 216 | *.dbmdl 217 | *.dbproj.schemaview 218 | *.jfm 219 | *.pfx 220 | *.publishsettings 221 | orleans.codegen.cs 222 | 223 | # Including strong name files can present a security risk 224 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 225 | #*.snk 226 | 227 | # Since there are multiple workflows, uncomment next line to ignore bower_components 228 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 229 | #bower_components/ 230 | 231 | # RIA/Silverlight projects 232 | Generated_Code/ 233 | 234 | # Backup & report files from converting an old project file 235 | # to a newer Visual Studio version. Backup files are not needed, 236 | # because we have git ;-) 237 | _UpgradeReport_Files/ 238 | Backup*/ 239 | UpgradeLog*.XML 240 | UpgradeLog*.htm 241 | ServiceFabricBackup/ 242 | *.rptproj.bak 243 | 244 | # SQL Server files 245 | *.mdf 246 | *.ldf 247 | *.ndf 248 | 249 | # Business Intelligence projects 250 | *.rdl.data 251 | *.bim.layout 252 | *.bim_*.settings 253 | *.rptproj.rsuser 254 | 255 | # Microsoft Fakes 256 | FakesAssemblies/ 257 | 258 | # GhostDoc plugin setting file 259 | *.GhostDoc.xml 260 | 261 | # Node.js Tools for Visual Studio 262 | .ntvs_analysis.dat 263 | node_modules/ 264 | 265 | # Visual Studio 6 build log 266 | *.plg 267 | 268 | # Visual Studio 6 workspace options file 269 | *.opt 270 | 271 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 272 | *.vbw 273 | 274 | # Visual Studio LightSwitch build output 275 | **/*.HTMLClient/GeneratedArtifacts 276 | **/*.DesktopClient/GeneratedArtifacts 277 | **/*.DesktopClient/ModelManifest.xml 278 | **/*.Server/GeneratedArtifacts 279 | **/*.Server/ModelManifest.xml 280 | _Pvt_Extensions 281 | 282 | # Paket dependency manager 283 | .paket/paket.exe 284 | paket-files/ 285 | 286 | # FAKE - F# Make 287 | .fake/ 288 | 289 | # JetBrains Rider 290 | .idea/ 291 | *.sln.iml 292 | 293 | # CodeRush 294 | .cr/ 295 | 296 | # Python Tools for Visual Studio (PTVS) 297 | __pycache__/ 298 | *.pyc 299 | 300 | # Cake - Uncomment if you are using it 301 | # tools/** 302 | # !tools/packages.config 303 | 304 | # Tabs Studio 305 | *.tss 306 | 307 | # Telerik's JustMock configuration file 308 | *.jmconfig 309 | 310 | # BizTalk build output 311 | *.btp.cs 312 | *.btm.cs 313 | *.odx.cs 314 | *.xsd.cs 315 | 316 | # OpenCover UI analysis results 317 | OpenCover/ 318 | 319 | # Azure Stream Analytics local run output 320 | ASALocalRun/ 321 | 322 | # MSBuild Binary and Structured Log 323 | *.binlog 324 | 325 | # NVidia Nsight GPU debugger configuration file 326 | *.nvuser 327 | 328 | # MFractors (Xamarin productivity tool) working folder 329 | .mfractor/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Robert 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Lib/ADL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/ADL.dll -------------------------------------------------------------------------------- /Lib/BIOSData/BIOSData.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/BIOSData/BIOSData.db -------------------------------------------------------------------------------- /Lib/BIOSData/BIOSData.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/BIOSData/BIOSData.txt -------------------------------------------------------------------------------- /Lib/BIOSData/SCEWIN.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/BIOSData/SCEWIN.exe -------------------------------------------------------------------------------- /Lib/BIOSData/SCEWIN_64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/BIOSData/SCEWIN_64.exe -------------------------------------------------------------------------------- /Lib/BIOSData/amifldrv32.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/BIOSData/amifldrv32.sys -------------------------------------------------------------------------------- /Lib/BIOSData/amifldrv64.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/BIOSData/amifldrv64.sys -------------------------------------------------------------------------------- /Lib/DeviceManagerDLL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/DeviceManagerDLL.dll -------------------------------------------------------------------------------- /Lib/FintekUSBDll.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/FintekUSBDll.dll -------------------------------------------------------------------------------- /Lib/ICCS_8/Class_ICCS_8.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/ICCS_8/Class_ICCS_8.dll -------------------------------------------------------------------------------- /Lib/ICCS_8/Interop.ICCProxyLib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/ICCS_8/Interop.ICCProxyLib.dll -------------------------------------------------------------------------------- /Lib/ICCS_9/Class_ICCS_9.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/ICCS_9/Class_ICCS_9.dll -------------------------------------------------------------------------------- /Lib/ICCS_9/Interop.ICCProxyLib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/ICCS_9/Interop.ICCProxyLib.dll -------------------------------------------------------------------------------- /Lib/MBAPI_x86.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/MBAPI_x86.dll -------------------------------------------------------------------------------- /Lib/NDA.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/NDA.dll -------------------------------------------------------------------------------- /Lib/NTIOLib.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/NTIOLib.sys -------------------------------------------------------------------------------- /Lib/NTIOLib_X64.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/NTIOLib_X64.sys -------------------------------------------------------------------------------- /Lib/SetupICCS_9.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/SetupICCS_9.exe -------------------------------------------------------------------------------- /Lib/USB_DLL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/USB_DLL.dll -------------------------------------------------------------------------------- /Lib/devcon.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/devcon.exe -------------------------------------------------------------------------------- /Lib/devcon64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vipeax/MSI-LED-Tool/03f1fdc97331c2e2f7826f00b38f924606a7df66/Lib/devcon64.exe -------------------------------------------------------------------------------- /MSI LED Tool.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSI LED Tool", "MSI LED Tool\MSI LED Tool.csproj", "{0D50CE12-9E68-49D2-8587-8792D0A373F2}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {0D50CE12-9E68-49D2-8587-8792D0A373F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {0D50CE12-9E68-49D2-8587-8792D0A373F2}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {0D50CE12-9E68-49D2-8587-8792D0A373F2}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {0D50CE12-9E68-49D2-8587-8792D0A373F2}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /MSI LED Tool/AdlGraphicsInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices; 2 | 3 | namespace MSI_LED_Tool 4 | { 5 | public struct AdlGraphicsInfo 6 | { 7 | internal int iAdapterIndex; 8 | internal bool IsPrimaryDisplay; 9 | [MarshalAs(UnmanagedType.BStr)] 10 | internal string DisplayName; 11 | [MarshalAs(UnmanagedType.BStr)] 12 | internal string Card_PNP; 13 | [MarshalAs(UnmanagedType.BStr)] 14 | internal string Card_pDeviceId; 15 | [MarshalAs(UnmanagedType.BStr)] 16 | internal string Card_pSubSystemId; 17 | [MarshalAs(UnmanagedType.BStr)] 18 | internal string Card_pRevisionId; 19 | [MarshalAs(UnmanagedType.BStr)] 20 | internal string Card_FullName; 21 | [MarshalAs(UnmanagedType.BStr)] 22 | internal string Card_BIOS_Date; 23 | [MarshalAs(UnmanagedType.BStr)] 24 | internal string Card_BIOS_PartNumber; 25 | [MarshalAs(UnmanagedType.BStr)] 26 | internal string Card_BIOS_Version; 27 | internal int GPU_Usage; 28 | internal int GPU_Clock_Current; 29 | internal int GPU_Clock_Max; 30 | internal int GPU_Temperature_Current; 31 | internal float GPU_Voltage_Current; 32 | internal int GPU_FanPercent_Current; 33 | internal int Memory_TotalSize; 34 | internal int Memory_Clock; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /MSI LED Tool/AnimationType.cs: -------------------------------------------------------------------------------- 1 | namespace MSI_LED_Tool 2 | { 3 | public enum AnimationType 4 | { 5 | NoAnimation = 1, 6 | Breathing = 2, 7 | Flashing = 3, 8 | DoubleFlashing = 4, 9 | Off = 5, 10 | TemperatureBased = 6 11 | } 12 | } -------------------------------------------------------------------------------- /MSI LED Tool/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MSI LED Tool/Constants.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace MSI_LED_Tool 4 | { 5 | internal class Constants 6 | { 7 | #region Vendors 8 | public const string VendorCodeNvidia = "10DE"; 9 | public const string VendorCodeAmd = "1002"; 10 | public const string SubVendorCodeMsi = "1462"; 11 | #endregion 12 | 13 | #region nVidia 14 | #region Pascal 15 | public const string DeviceCodeGtx1080Ti = "1B06"; 16 | public const string DeviceCodeGtx1080 = "1B80"; 17 | public const string DeviceCodeGtx1070Ti = "1B82"; 18 | public const string DeviceCodeGtx1070 = "1B81"; 19 | public const string DeviceCodeGtx1060With6G = "1C03"; 20 | public const string DeviceCodeGtx1060With3G = "1C02"; 21 | public const string DeviceCodeGtx1050 = "1C81"; 22 | public const string DeviceCodeGtx1050Ti = "1C82"; 23 | #endregion 24 | #region Maxwell 25 | public const string DeviceCodeGtx980Ti = "17C8"; 26 | public const string DeviceCodeGtx960 = "1401"; 27 | #endregion 28 | #endregion 29 | 30 | #region AMD 31 | #region Polaris 32 | public const string DeviceCodeRxPolaris = "67DF"; 33 | #endregion 34 | #endregion 35 | 36 | public static readonly List SupportedDeviceCodes = new List 37 | { 38 | DeviceCodeGtx1080Ti, 39 | DeviceCodeGtx1080, 40 | DeviceCodeGtx1070Ti, 41 | DeviceCodeGtx1070, 42 | DeviceCodeGtx1060With6G, 43 | DeviceCodeGtx1060With3G, 44 | DeviceCodeGtx1050Ti, 45 | DeviceCodeGtx1050, 46 | DeviceCodeGtx980Ti, 47 | DeviceCodeGtx960, 48 | DeviceCodeRxPolaris 49 | }; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /MSI LED Tool/JsonSerializer.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Runtime.Serialization.Json; 3 | using System.Text; 4 | 5 | namespace MSI_LED_Tool 6 | { 7 | public static class JsonSerializer where TType : class 8 | { 9 | public static string Serialize(TType instance) 10 | { 11 | var serializer = new DataContractJsonSerializer(typeof(TType)); 12 | using (var stream = new MemoryStream()) 13 | { 14 | serializer.WriteObject(stream, instance); 15 | return Encoding.Default.GetString(stream.ToArray()); 16 | } 17 | } 18 | 19 | public static TType DeSerialize(string json) 20 | { 21 | using (var stream = new MemoryStream(Encoding.Default.GetBytes(json))) 22 | { 23 | var serializer = new DataContractJsonSerializer(typeof(TType)); 24 | return serializer.ReadObject(stream) as TType; 25 | } 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /MSI LED Tool/LedSettings.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace MSI_LED_Tool 4 | { 5 | [DataContract] 6 | public class LedSettings 7 | { 8 | [DataMember] 9 | public AnimationType AnimationType { get; set; } 10 | 11 | [DataMember] 12 | public int R { get; set; } 13 | 14 | [DataMember] 15 | public int G { get; set; } 16 | 17 | [DataMember] 18 | public int B { get; set; } 19 | 20 | [DataMember] 21 | public int TemperatureUpperLimit { get; set; } 22 | 23 | [DataMember] 24 | public int TemperatureLowerLimit { get; set; } 25 | 26 | [DataMember] 27 | public bool OverwriteSecurityChecks { get; set; } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /MSI LED Tool/MSI LED Tool.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {0D50CE12-9E68-49D2-8587-8792D0A373F2} 8 | WinExe 9 | Properties 10 | MSI_LED_Tool 11 | MSI LED Tool 12 | v4.5.2 13 | 512 14 | true 15 | 16 | 17 | AnyCPU 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | AnyCPU 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | true 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 74 | -------------------------------------------------------------------------------- /MSI LED Tool/Manufacturer.cs: -------------------------------------------------------------------------------- 1 | namespace MSI_LED_Tool 2 | { 3 | public enum Manufacturer 4 | { 5 | Nvidia, 6 | AMD 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MSI LED Tool/NdaGraphicsInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices; 2 | 3 | namespace MSI_LED_Tool 4 | { 5 | public struct NdaGraphicsInfo 6 | { 7 | internal int iAdapterIndex; 8 | internal bool IsPrimaryDisplay; 9 | [MarshalAs(UnmanagedType.BStr)] 10 | internal string DisplayName; 11 | [MarshalAs(UnmanagedType.BStr)] 12 | internal string Card_PNP; 13 | [MarshalAs(UnmanagedType.BStr)] 14 | internal string Card_pDeviceId; 15 | [MarshalAs(UnmanagedType.BStr)] 16 | internal string Card_pSubSystemId; 17 | [MarshalAs(UnmanagedType.BStr)] 18 | internal string Card_pRevisionId; 19 | [MarshalAs(UnmanagedType.BStr)] 20 | internal string Card_FullName; 21 | [MarshalAs(UnmanagedType.BStr)] 22 | internal string Card_BIOS_Date; 23 | [MarshalAs(UnmanagedType.BStr)] 24 | internal string Card_BIOS_PartNumber; 25 | [MarshalAs(UnmanagedType.BStr)] 26 | internal string Card_BIOS_Version; 27 | internal int GPU_Usage; 28 | internal int GPU_Clock_Current; 29 | internal int GPU_Clock_Base; 30 | internal int GPU_Clock_Set; 31 | internal int GPU_Clock_Max; 32 | internal int GPU_Clock_Min; 33 | internal int VRAM_Usage; 34 | internal int VRAM_Clock_Current; 35 | internal int VRAM_Clock_Base; 36 | internal int VRAM_Clock_Max; 37 | internal int VRAM_Clock_Min; 38 | internal int GPU_Temperature_Current; 39 | internal float GPU_Voltage_Current; 40 | internal int GPU_FanPercent_Current; 41 | internal int Memory_TotalSize; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /MSI LED Tool/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Runtime.InteropServices; 7 | using System.Threading; 8 | using System.Windows.Forms; 9 | 10 | namespace MSI_LED_Tool 11 | { 12 | class Program 13 | { 14 | private const string SettingsFileName = "Settings.json"; 15 | 16 | [DllImport("Lib\\NDA.dll", CharSet = CharSet.Unicode)] 17 | public static extern bool NDA_Initialize(); 18 | 19 | [DllImport("Lib\\ADL.dll", CharSet = CharSet.Unicode)] 20 | public static extern bool ADL_Initialize(); 21 | 22 | [DllImport("Lib\\NDA.dll", CharSet = CharSet.Unicode)] 23 | private static extern bool NDA_GetGPUCounts(out long gpuCounts); 24 | 25 | [DllImport("Lib\\NDA.dll", CharSet = CharSet.Unicode)] 26 | private static extern bool NDA_GetGraphicsInfo(int iAdapterIndex, out NdaGraphicsInfo graphicsInfo); 27 | 28 | [DllImport("Lib\\NDA.dll", CharSet = CharSet.Unicode)] 29 | private static extern bool NDA_SetIlluminationParmColor_RGB(int iAdapterIndex, int cmd, int led1, int led2, int ontime, int offtime, int time, int darktime, int bright, int r, int g, int b, bool one = false); 30 | 31 | [DllImport("Lib\\ADL.dll", CharSet = CharSet.Unicode)] 32 | public static extern bool ADL_GetGPUCounts(out int gpuCounts); 33 | 34 | [DllImport("Lib\\ADL.dll", CharSet = CharSet.Unicode)] 35 | public static extern bool ADL_GetGraphicsInfo(int iAdapterIndex, out AdlGraphicsInfo graphicsInfo); 36 | 37 | [DllImport("Lib\\ADL.dll", CharSet = CharSet.Unicode)] 38 | public static extern bool ADL_SetIlluminationParm_RGB(int iAdapterIndex, int cmd, int led1, int led2, int ontime, int offtime, int time, int darktime, int bright, int r, int g, int b, bool one = false); 39 | 40 | private const int DefaultDelay = 2000; 41 | private const int NoAnimationDelay = 60000; 42 | 43 | private static Thread updateThreadFront; 44 | private static Thread updateThreadBack; 45 | private static Thread updateThreadSide; 46 | 47 | private static List adapterIndexes; 48 | 49 | private static bool vgaMutex; 50 | private static Color ledColor; 51 | private static AnimationType animationType; 52 | private static Manufacturer manufacturer; 53 | private static int[] temperatureLimits; 54 | private static bool overwriteSecurityChecks; 55 | 56 | private static Mutex mutex; 57 | private static NdaGraphicsInfo ndaGraphicsInfo; 58 | private static AdlGraphicsInfo adlGraphicsInfo; 59 | 60 | static void Main(string[] args) 61 | { 62 | mutex = new Mutex(); 63 | 64 | string settingsFile = $"{AppDomain.CurrentDomain.BaseDirectory}\\{SettingsFileName}"; 65 | 66 | if (File.Exists(settingsFile)) 67 | { 68 | using (var sr = new StreamReader(settingsFile)) 69 | { 70 | var settings = JsonSerializer.DeSerialize(sr.ReadToEnd()); 71 | 72 | if (settings != null) 73 | { 74 | ledColor = Color.FromArgb(255, settings.R, settings.G, settings.B); 75 | animationType = settings.AnimationType; 76 | 77 | if (settings.TemperatureLowerLimit < 0) 78 | { 79 | settings.TemperatureLowerLimit = 0; 80 | } 81 | 82 | if (settings.TemperatureUpperLimit > 100) 83 | { 84 | settings.TemperatureUpperLimit = 100; 85 | } 86 | 87 | if (settings.TemperatureUpperLimit <= settings.TemperatureLowerLimit) 88 | { 89 | settings.TemperatureUpperLimit = settings.TemperatureLowerLimit + 1; 90 | } 91 | 92 | temperatureLimits = new[] { settings.TemperatureLowerLimit, settings.TemperatureUpperLimit}; 93 | 94 | overwriteSecurityChecks = settings.OverwriteSecurityChecks; 95 | } 96 | } 97 | } 98 | else 99 | { 100 | using (var sw = new StreamWriter(settingsFile, false)) 101 | { 102 | sw.WriteLine( 103 | JsonSerializer.Serialize(new LedSettings 104 | { 105 | R = 255, 106 | G = 0, 107 | B = 0, 108 | AnimationType = AnimationType.NoAnimation, 109 | TemperatureUpperLimit = 85, 110 | TemperatureLowerLimit = 45, 111 | OverwriteSecurityChecks = false 112 | })); 113 | } 114 | } 115 | 116 | if (ledColor == null) 117 | { 118 | ledColor = Color.Red; 119 | animationType = AnimationType.NoAnimation; 120 | overwriteSecurityChecks = false; 121 | } 122 | 123 | adapterIndexes = new List(); 124 | 125 | long gpuCountNda = 0; 126 | 127 | if (NDA_Initialize()) 128 | { 129 | bool canGetGpuCount = NDA_GetGPUCounts(out gpuCountNda); 130 | if (canGetGpuCount == false) 131 | { 132 | return; 133 | } 134 | 135 | if (gpuCountNda > 0 && InitializeNvidiaAdapters(gpuCountNda)) 136 | { 137 | manufacturer = Manufacturer.Nvidia; 138 | } 139 | } 140 | 141 | if (gpuCountNda == 0 && ADL_Initialize()) 142 | { 143 | int gpuCountAdl; 144 | bool canGetGpuCount = ADL_GetGPUCounts(out gpuCountAdl); 145 | if (canGetGpuCount == false) 146 | { 147 | return; 148 | } 149 | 150 | if (gpuCountAdl > 0 && InitializeAmdAdapters(gpuCountAdl)) 151 | { 152 | manufacturer = Manufacturer.AMD; 153 | } 154 | } 155 | 156 | if (adapterIndexes.Count > 0) 157 | { 158 | updateThreadFront = new Thread(UpdateLedsFront); 159 | updateThreadSide = new Thread(UpdateLedsSide); 160 | updateThreadBack = new Thread(UpdateLedsBack); 161 | updateThreadFront.Start(); 162 | updateThreadSide.Start(); 163 | updateThreadBack.Start(); 164 | } 165 | else 166 | { 167 | MessageBox.Show( 168 | "No adapters found that are supported by this tool. Report a new issue with a GPU-Z screenshot if you want your card added.", 169 | "No supported adapter(s) found."); 170 | } 171 | 172 | while (true) 173 | { 174 | Thread.CurrentThread.Join(new TimeSpan(1, 0, 0)); 175 | } 176 | } 177 | 178 | private static bool InitializeNvidiaAdapters(long gpuCount) 179 | { 180 | for (int i = 0; i < gpuCount; i++) 181 | { 182 | NdaGraphicsInfo graphicsInfo; 183 | if (NDA_GetGraphicsInfo(i, out graphicsInfo) == false) 184 | { 185 | return false; 186 | } 187 | 188 | string vendorCode = graphicsInfo.Card_pDeviceId.Substring(4, 4).ToUpper(); 189 | string deviceCode = graphicsInfo.Card_pDeviceId.Substring(0, 4).ToUpper(); 190 | string subVendorCode = graphicsInfo.Card_pSubSystemId.Substring(4, 4).ToUpper(); 191 | 192 | if (overwriteSecurityChecks) 193 | { 194 | if (vendorCode.Equals(Constants.VendorCodeNvidia, StringComparison.OrdinalIgnoreCase)) 195 | { 196 | adapterIndexes.Add(i); 197 | } 198 | } 199 | else if (vendorCode.Equals(Constants.VendorCodeNvidia, StringComparison.OrdinalIgnoreCase) 200 | && subVendorCode.Equals(Constants.SubVendorCodeMsi, StringComparison.OrdinalIgnoreCase) 201 | && Constants.SupportedDeviceCodes.Any(dc => deviceCode.Equals(dc, StringComparison.OrdinalIgnoreCase))) 202 | { 203 | adapterIndexes.Add(i); 204 | } 205 | } 206 | 207 | return true; 208 | } 209 | 210 | private static bool InitializeAmdAdapters(int gpuCount) 211 | { 212 | for (int i = 0; i < gpuCount; i++) 213 | { 214 | AdlGraphicsInfo graphicsInfo; 215 | if (ADL_GetGraphicsInfo(i, out graphicsInfo) == false) 216 | { 217 | return false; 218 | } 219 | 220 | // PCI\VEN_1002&DEV_67DF&SUBSYS_34111462&REV_CF\4&25438C51&0&0008 221 | var pnpSegments = graphicsInfo.Card_PNP.Split('\\'); 222 | 223 | if (pnpSegments.Length < 2) 224 | { 225 | continue; 226 | } 227 | 228 | // VEN_1002&DEV_67DF&SUBSYS_34111462&REV_CF 229 | var codeSegments = pnpSegments[1].Split('&'); 230 | 231 | if (codeSegments.Length < 3) 232 | { 233 | continue; 234 | } 235 | 236 | string vendorCode = codeSegments[0].Substring(4, 4).ToUpper(); 237 | string deviceCode = codeSegments[1].Substring(4, 4).ToUpper(); 238 | string subVendorCode = codeSegments[2].Substring(11, 4).ToUpper(); 239 | 240 | if (overwriteSecurityChecks) 241 | { 242 | if (vendorCode.Equals(Constants.VendorCodeAmd, StringComparison.OrdinalIgnoreCase)) 243 | { 244 | adapterIndexes.Add(i); 245 | } 246 | } 247 | else if (vendorCode.Equals(Constants.VendorCodeAmd, StringComparison.OrdinalIgnoreCase) 248 | && subVendorCode.Equals(Constants.SubVendorCodeMsi, StringComparison.OrdinalIgnoreCase) 249 | && Constants.SupportedDeviceCodes.Any(dc => deviceCode.Equals(dc, StringComparison.OrdinalIgnoreCase))) 250 | { 251 | adapterIndexes.Add(i); 252 | } 253 | } 254 | 255 | return true; 256 | } 257 | 258 | private static void UpdateLedsFront() 259 | { 260 | while (true) 261 | { 262 | switch (animationType) 263 | { 264 | case AnimationType.NoAnimation: 265 | UpdateLeds(21, 4, 4); 266 | Thread.Sleep(NoAnimationDelay); 267 | break; 268 | case AnimationType.Breathing: 269 | UpdateLeds(27, 4, 7); 270 | break; 271 | case AnimationType.Flashing: 272 | UpdateLeds(28, 4, 0, 25, 100); 273 | break; 274 | case AnimationType.DoubleFlashing: 275 | UpdateLeds(30, 4, 0, 10, 10, 91); 276 | break; 277 | case AnimationType.Off: 278 | UpdateLeds(24, 4, 4); 279 | Thread.Sleep(NoAnimationDelay); 280 | break; 281 | case AnimationType.TemperatureBased: 282 | switch (manufacturer) 283 | { 284 | case Manufacturer.Nvidia: 285 | mutex.WaitOne(); 286 | if (NDA_GetGraphicsInfo(0, out ndaGraphicsInfo)) 287 | { 288 | int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0], 289 | temperatureLimits[1], ndaGraphicsInfo.GPU_Temperature_Current); 290 | ledColor = GetColorForDeltaTemperature(temperatureDelta); 291 | UpdateLeds(21, 4, 4); 292 | } 293 | mutex.ReleaseMutex(); 294 | break; 295 | case Manufacturer.AMD: 296 | mutex.WaitOne(); 297 | if (ADL_GetGraphicsInfo(0, out adlGraphicsInfo)) 298 | { 299 | int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0], 300 | temperatureLimits[1], adlGraphicsInfo.GPU_Temperature_Current); 301 | ledColor = GetColorForDeltaTemperature(temperatureDelta); 302 | UpdateLeds(21, 4, 4); 303 | } 304 | mutex.ReleaseMutex(); 305 | break; 306 | } 307 | break; 308 | } 309 | } 310 | } 311 | 312 | 313 | private static void UpdateLedsSide() 314 | { 315 | while (true) 316 | { 317 | switch (animationType) 318 | { 319 | case AnimationType.NoAnimation: 320 | UpdateLeds(21, 1, 4); 321 | Thread.Sleep(NoAnimationDelay); 322 | break; 323 | case AnimationType.Breathing: 324 | UpdateLeds(27, 1, 7); 325 | break; 326 | case AnimationType.Flashing: 327 | UpdateLeds(28, 1, 0, 25, 100); 328 | break; 329 | case AnimationType.DoubleFlashing: 330 | UpdateLeds(30, 1, 0, 10, 10, 91); 331 | break; 332 | case AnimationType.Off: 333 | UpdateLeds(24, 1, 4); 334 | Thread.Sleep(NoAnimationDelay); 335 | break; 336 | case AnimationType.TemperatureBased: 337 | switch (manufacturer) 338 | { 339 | case Manufacturer.Nvidia: 340 | mutex.WaitOne(); 341 | if (NDA_GetGraphicsInfo(0, out ndaGraphicsInfo)) 342 | { 343 | int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0], 344 | temperatureLimits[1], ndaGraphicsInfo.GPU_Temperature_Current); 345 | ledColor = GetColorForDeltaTemperature(temperatureDelta); 346 | UpdateLeds(21, 1, 4); 347 | } 348 | mutex.ReleaseMutex(); 349 | break; 350 | case Manufacturer.AMD: 351 | mutex.WaitOne(); 352 | if (ADL_GetGraphicsInfo(0, out adlGraphicsInfo)) 353 | { 354 | int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0], 355 | temperatureLimits[1], adlGraphicsInfo.GPU_Temperature_Current); 356 | ledColor = GetColorForDeltaTemperature(temperatureDelta); 357 | UpdateLeds(21, 1, 4); 358 | } 359 | mutex.ReleaseMutex(); 360 | break; 361 | } 362 | break; 363 | } 364 | } 365 | } 366 | 367 | private static void UpdateLedsBack() 368 | { 369 | while (true) 370 | { 371 | switch (animationType) 372 | { 373 | case AnimationType.NoAnimation: 374 | UpdateLeds(21, 2, 4); 375 | Thread.Sleep(NoAnimationDelay); 376 | break; 377 | case AnimationType.Breathing: 378 | UpdateLeds(27, 2, 7); 379 | break; 380 | case AnimationType.Flashing: 381 | UpdateLeds(28, 2, 0, 25, 100); 382 | break; 383 | case AnimationType.DoubleFlashing: 384 | UpdateLeds(30, 2, 0, 10, 10, 91); 385 | break; 386 | case AnimationType.Off: 387 | UpdateLeds(24, 2, 4); 388 | Thread.Sleep(NoAnimationDelay); 389 | break; 390 | case AnimationType.TemperatureBased: 391 | switch (manufacturer) 392 | { 393 | case Manufacturer.Nvidia: 394 | mutex.WaitOne(); 395 | if (NDA_GetGraphicsInfo(0, out ndaGraphicsInfo)) 396 | { 397 | int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0], 398 | temperatureLimits[1], ndaGraphicsInfo.GPU_Temperature_Current); 399 | ledColor = GetColorForDeltaTemperature(temperatureDelta); 400 | UpdateLeds(21, 2, 4); 401 | } 402 | mutex.ReleaseMutex(); 403 | break; 404 | case Manufacturer.AMD: 405 | mutex.WaitOne(); 406 | if (ADL_GetGraphicsInfo(0, out adlGraphicsInfo)) 407 | { 408 | int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0], 409 | temperatureLimits[1], adlGraphicsInfo.GPU_Temperature_Current); 410 | ledColor = GetColorForDeltaTemperature(temperatureDelta); 411 | UpdateLeds(21, 2, 4); 412 | } 413 | mutex.ReleaseMutex(); 414 | break; 415 | } 416 | break; 417 | } 418 | } 419 | } 420 | 421 | private static void UpdateLeds(int cmd, int ledId, int time, int ontime = 0, int offtime = 0, int darkTime = 0) 422 | { 423 | for (int i = 0; i < adapterIndexes.Count; i++) 424 | { 425 | Thread.CurrentThread.Join(10); 426 | for (int index = 0; vgaMutex && index < 100; ++index) 427 | { 428 | Thread.CurrentThread.Join(5); 429 | } 430 | vgaMutex = true; 431 | Thread.CurrentThread.Join(20); 432 | 433 | bool oneCall = animationType != AnimationType.NoAnimation; 434 | 435 | if (manufacturer == Manufacturer.Nvidia) 436 | { 437 | NDA_SetIlluminationParmColor_RGB(i, cmd, ledId, 0, ontime, offtime, time, darkTime, 0, ledColor.R, ledColor.G, ledColor.B, oneCall); 438 | } 439 | 440 | if (manufacturer == Manufacturer.AMD) 441 | { 442 | ADL_SetIlluminationParm_RGB(i, cmd, ledId, 0, ontime, offtime, time, darkTime, 0, ledColor.R, ledColor.G, ledColor.B, oneCall); 443 | } 444 | 445 | vgaMutex = false; 446 | } 447 | 448 | Thread.CurrentThread.Join(2000); 449 | } 450 | 451 | private static int CalculateTemperatureDeltaHunderdBased(int lowerLimit, int upperLimit, int current) 452 | { 453 | try 454 | { 455 | var difference = upperLimit - lowerLimit; 456 | var adjustedCurrent = current - lowerLimit; 457 | 458 | if (difference <= 0) 459 | { 460 | return 50; 461 | } 462 | 463 | if (adjustedCurrent <= 0) 464 | { 465 | return 0; 466 | } 467 | 468 | if (adjustedCurrent > upperLimit) 469 | { 470 | adjustedCurrent = upperLimit; 471 | } 472 | 473 | var delta = Convert.ToInt32(1.0f * adjustedCurrent / difference * 100); 474 | 475 | if (delta > 100) 476 | { 477 | delta = 100; 478 | } 479 | 480 | return delta; 481 | } 482 | catch 483 | { 484 | return 50; 485 | } 486 | } 487 | 488 | private static Color GetColorForDeltaTemperature(int x) 489 | { 490 | return Color.FromArgb(GetRedForDeltaTemperature(x), GetGreenForDeltaTemperature(x), 0); 491 | } 492 | 493 | private static int GetRedForDeltaTemperature(int x) 494 | { 495 | var percent = x/100.0f; 496 | var value = Convert.ToInt32(percent * 255 * 2); 497 | 498 | if (value > 255) 499 | { 500 | return 255; 501 | } 502 | 503 | return value; 504 | } 505 | 506 | private static int GetGreenForDeltaTemperature(int x) 507 | { 508 | var percent = x / 100.0f; 509 | var value = Convert.ToInt32((255 - percent * 255) * 2); 510 | 511 | if (value > 255) 512 | { 513 | return 255; 514 | } 515 | 516 | return value; 517 | } 518 | } 519 | } -------------------------------------------------------------------------------- /MSI LED Tool/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("MSI LED Tool")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("MSI LED Tool")] 12 | [assembly: AssemblyCopyright("Copyright © RvdBoorn 2018")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("0d50ce12-9e68-49d2-8587-8792d0a373f2")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.4.0.1")] 35 | [assembly: AssemblyFileVersion("1.4.0.1")] 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MSI-LED-Tool 2 | This is a tiny project to allow modification of the LEDs of a MSI Gaming X cards without the requirement of all the bloatware that the MSI tooling includes. Other MSI cards are very likely to work as well, but right now the code performs a check specifically for the device code of Pascal (GTX 1060/GTX 1070/GTX 1080), Maxwell (GTX 980Ti/GTX 960) and Polaris cards as well as the MSI brand subvendor code. 3 | 4 | It supports a fixed color, breathing mode, flashing mode and double flashing mode. If you desire a different effect or any custom mode and you aren't a developer, just [create a new issue](https://github.com/Vipeax/MSI-LED-Tool/issues/new) describing what you want. 5 | 6 | # Preview video 7 | https://www.youtube.com/watch?v=-cuow0x4VIk 8 | 9 | # Installation 10 | * To install the tool you place the "MSI LED Tool" executable, the "Settings.json" file and the included "Lib" folder in whichever folder you desire to be its location. 11 | * You have to point the path in the "regedit.reg" accordingly to your newly created and selected folder. 12 | * Open the Settings.json file to change the R(ed), G(reen), B(lue) variables to your desired color scheme and set the AnimationType variable to your desired animation type. "AnimationType":1 means no animation. You can disable device-ID checks by setting the "OverwriteSecurityChecks" setting to "true". When selecting the "Temperature Based" mode. The Upper- and LowerLimit options define the full green (lower) and full red (upper) numbers. So 45-85 means that anything from 45C and lower is 100% green and anything from 85C and upper is 100% red. It will then colorize from green to yellow to orange to red as your GPU temperature changes. 13 | * 1 = No Animation 14 | * 2 = Breathing 15 | * 3 = Flashing 16 | * 4 = Double Flashing 17 | * 5 = Disable LEDs 18 | * 6 = Temperature Based 19 | * Run the "MSI LED Tool" executable and if you like what you see, run the "regedit.reg" file to register the tool to startup upon Windows boot, after which it will automatically apply your configured settings. 20 | 21 | # Releases 22 | For bundled releases, see [the releases area](https://github.com/Vipeax/MSI-LED-Tool/releases). 23 | 24 | # Alternative projects 25 | * https://github.com/MinDBreaK/MSI-LED-Control --------------------------------------------------------------------------------