├── .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
--------------------------------------------------------------------------------