From e802bf72e3e9b79dd729311173d9860aa8b44a66 Mon Sep 17 00:00:00 2001 From: seerge Date: Thu, 16 Feb 2023 22:52:39 +0100 Subject: [PATCH] Initial commit, basic functionality --- GHelper.csproj | 1 + Program.cs | 78 +++++++++++++++++------ Resources/eco.ico | Bin 0 -> 9662 bytes Resources/icons8-charging-battery-48.png | Bin 0 -> 421 bytes Resources/icons8-laptop-48.png | Bin 0 -> 260 bytes Resources/icons8-speed-48.png | Bin 0 -> 885 bytes Resources/icons8-video-card-48.png | Bin 0 -> 400 bytes Resources/ultimate.ico | Bin 0 -> 9662 bytes Settings.cs | 19 +++--- 9 files changed, 68 insertions(+), 30 deletions(-) create mode 100644 Resources/eco.ico create mode 100644 Resources/icons8-charging-battery-48.png create mode 100644 Resources/icons8-laptop-48.png create mode 100644 Resources/icons8-speed-48.png create mode 100644 Resources/icons8-video-card-48.png create mode 100644 Resources/ultimate.ico diff --git a/GHelper.csproj b/GHelper.csproj index 716b5e53..e6ddf7ee 100644 --- a/GHelper.csproj +++ b/GHelper.csproj @@ -29,6 +29,7 @@ + diff --git a/Program.cs b/Program.cs index cbe0b7aa..a408c652 100644 --- a/Program.cs +++ b/Program.cs @@ -1,7 +1,6 @@ using System; using System.Windows.Forms; -using System.Text.Json; using System.Management; using Microsoft.Win32.TaskScheduler; using System.Diagnostics; @@ -9,10 +8,12 @@ using System.Reflection.Emit; using System.Runtime.InteropServices; using System.Reflection; -using System.Diagnostics; - using GHelper; using System.Dynamic; +using System.IO; +using System.Xml.Linq; + +using Newtonsoft.Json; public class ASUSWmi { @@ -87,15 +88,61 @@ public class ASUSWmi } +} + +public class AppConfig +{ + + string appPath; + string configFile; + + public dynamic Config = new ExpandoObject(); + + public AppConfig() { + + appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+"\\GHelper"; + configFile = appPath + "\\config.json"; + + if (!System.IO.Directory.Exists(appPath)) + System.IO.Directory.CreateDirectory(appPath); + + if (File.Exists(configFile)) + { + string text = File.ReadAllText(configFile); + Config = JsonConvert.DeserializeObject(text); + } else + { + Config.performance_mode = 0; + string jsonString = JsonConvert.SerializeObject(Config); + File.WriteAllText(configFile, jsonString); + } + + } + + public int getConfig (string name) + { + var propertyInfo = Config.GetType().GetProperty(name); + return propertyInfo.GetValue(Config, null); + } + + public void setConfig(string name, int value) + { + ((IDictionary)Config).TryAdd(name, value); + string jsonString = JsonConvert.SerializeObject(Config); + File.WriteAllText(configFile, jsonString); + } + + + } static class Program { - static NotifyIcon trayIcon; + public static NotifyIcon trayIcon; public static ASUSWmi wmi; - public static dynamic config = new System.Dynamic.ExpandoObject(); + public static AppConfig config; public static SettingsForm settingsForm; @@ -111,6 +158,8 @@ static class Program trayIcon.MouseClick += TrayIcon_MouseClick; ; + config = new AppConfig(); + wmi = new ASUSWmi(); wmi.SubscribeToEvents(WatcherEventArrived); @@ -124,41 +173,32 @@ static class Program settingsForm.FormClosed += SettingsForm_FormClosed; - config.PerformanceMode = 0; - Application.Run(); } public static int GetGPUMode () { + int eco = wmi.DeviceGet(ASUSWmi.GPUEco); int mux = wmi.DeviceGet(ASUSWmi.GPUMux); int GpuMode; if (mux == 0) - { GpuMode = ASUSWmi.GPUModeUltimate; - } else { if (eco == 1) - { GpuMode = ASUSWmi.GPUModeEco; - } else - { GpuMode = ASUSWmi.GPUModeStandard; - } if (mux != 1) - { settingsForm.Disable_Ultimate(); - } } - config.gpu_mode = GpuMode; + config.setConfig ("gpu_mode",GpuMode); return GpuMode; @@ -193,9 +233,7 @@ static class Program if (e.Button == MouseButtons.Left) { if (settingsForm.Visible) - { - settingsForm.Hide(); - } else + settingsForm.Hide(); else { settingsForm.Show(); settingsForm.Activate(); @@ -208,7 +246,7 @@ static class Program { settingsForm.BeginInvoke(delegate { - settingsForm.SetPerformanceMode(config.PerformanceMode + 1); + settingsForm.SetPerformanceMode(config.getConfig("performance_mode") + 1); }); } diff --git a/Resources/eco.ico b/Resources/eco.ico new file mode 100644 index 0000000000000000000000000000000000000000..30e965da52e300754bfa616631569d666cf63378 GIT binary patch literal 9662 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 literal 0 HcmV?d00001 diff --git a/Resources/icons8-charging-battery-48.png b/Resources/icons8-charging-battery-48.png new file mode 100644 index 0000000000000000000000000000000000000000..2787256681cb29595c83558f8092bb6ab46e0bca GIT binary patch literal 421 zcmV;W0b2fvP)eF>(8q@LRTC1RYtsYZ zGU7hknph3p27La@0USHP74R9MZVg=EL5dYS1YRT5u3`mnhR%R{VC8wscYzz=EA>c; zhuq_S^y8Xi;0{=L)IR~1xdVurIQ6Kv&~Pqf%SabNat06`hg%&FpL#1DJ2!quLkQ67 zO%27WC#g5_Cb^^XT93{Y0V?1;Wq?*Mz%*jLt%7Ael(;OmpPnpIvF?+FoH&AGcXEq%jQ#52Ks=()78&qol`;+ E02GE>#Q*>R literal 0 HcmV?d00001 diff --git a/Resources/icons8-speed-48.png b/Resources/icons8-speed-48.png new file mode 100644 index 0000000000000000000000000000000000000000..5edf6652251c5acf87015ced9eaec437e3b16fa5 GIT binary patch literal 885 zcmV-*1B(2KP)RCt{2ncquPK@`V7rbT5%nfah@AyI!oLHLwL}11Wv02vRPb&lb5FGRwc z3@^%>U!~0#&YS{9fLFjQ@Ev#u3~raDh>iO9@R#W?@;Wl3mHnymP=|t3!BrDNU7un&cinZJk?#lA%X`9f+3j+1pv#~r zZrCC+p4G->=l3b&qXs)!7YBw6ilTn2iJOG{Z{UOj`AA#mlBI~mV%(r8!m5bp4x|gR z?-7+_jU)L;wk$=o8OC3_IPlq^xJem*?cjjzsN)j$tunX8(sIYbRR32f<1W?5RI}GQ zRGV34ey!y`h{c>iQ4ND{o(?oQ=*?&jdpR&+P~4`BzwrzqQ&L8ni0~|8yJ7s3ZxZiO z#z!2JI4e)0QU2}n{XDF!v)4C?`wfa0N+_dAW`|EgADP#B ztuezK@un1uofhNu%ACG3IPg%h-(b1zcepqp8m5mi&75erzXl}#MSI}7WqAnGzW}Yc zW-#zmJK}bap2#GNzyZZ>lWg7fc{vgwBi}T2BZJy5cxZjPgye^Sl>|n$Ot=vL)UZiGt|8V+ks?J3{(bxbizB;svumMi00000 LNkvXXu0mjf3MrVF literal 0 HcmV?d00001 diff --git a/Resources/icons8-video-card-48.png b/Resources/icons8-video-card-48.png new file mode 100644 index 0000000000000000000000000000000000000000..afffe0961b30413f2b1c066ff73e0ec98e9b98b2 GIT binary patch literal 400 zcmV;B0dM|^P))NFs0%IPS9J*bm}Zr4U#KI`GbJ<2-FFRuf`B)_6po< uXkTGWi5hqtL!k7#HYT>1GMP+<$=CwcabTvS7KDWW0000(P!A4z?3 zFzAC1P{9fBOa zz1`~~-M6oz7>y=d3}Xzl4DE&v!}=I&O)fFKW}r^9fi}hVbq($s)x|#^w_D7k)#OIQ zQNsm;a`2axA2y)dbVHMYzUon^P^%t6{HhfMyy z50g(B_8LNY+-SXhHr6OZo(`$}eOr^y7>*cjlvAzk*$)^yONXlbeH)Y5fPQKn`)1Y0 zZp?j}4%hMbbxjU6d~c|kOG}GXC`irC4tyuCp1!ONew(%)()hCnu#SSqgdcqS_m@VD zkVcP|CQXtiPnMp3T6*+RX}|zirw(1%H|{o6o)KO6QyznTjJ+U;KfE7)SeiLgTDMO6 z;RosGpQYb^bNJ;K>Bk?XEnB2F-;^GE%*{^?da&osj=3dusK&p))nhNt<<9s62TC($ zNZ)-YUA(B=bmfY)f4?+uo-}Nj(<5Xot8>u6xmlGz`7!33>@;NZhx-E$NFRM9oj+fl z_O)x$)vMLZ{`p7RxzqU;>mzTxxcmc?$+cXvf1FP&!g-$AAKdT1Us|(9f=4ppE4y|{ zD^^JFyd%B+wzPP$w0X01{J4Zp$+TyWGNPyoQ`R26ZyotjlFt( zR^s2(bQJ!~3vq2KfBa_15NZ4N^4P4$<;&f^NqJU#Uxp3FkC%=dDfe^stn}P-ZoYiI z6v=to(x=a{68}QsEd04w5SyoRVBD!w-Ja-2{`On9--mMd{WBMH=SujUPt1WY&ya8& zQz)D(@o#QE4S()Nne7>K)ha)lbosL5fL>W`(XASW4wb(8s@&hfgYKLQu*Iu|!kH5P zrl!O2Uy{dx@xK1LJl?Tm(i2Z)uRFNlbF{6*ph422MN(&{>yv#r(1+Ubc}vChd*6NQ z;J-GHKQRF3s864N?#{2YcI-p*=SyFF;p~j9llbyWY2Uu`8NphbGe=_IO6xPu@95oo zONoC&Lr?f;?mhSpwmx~%vzI>pINkR66t+Bfu3SIl8)rrU|Md+G_ayk=Qx|{MLYnWB zPwd9N5}JrVh@sN@Ow5V#?^)u{Tv%C0qWrq~!;kTwLx;+2h}AgD(%RwQoWEPQx;>YD zHx1jiNedUcm?U8RuEpmq75%@d=?MJW(|C~Y*C9UZ6TUlqcy?@$-x1@XOBSfZ7y;a| z*Ah5;{_I7TH!F)jWpLrF^6Ae%rI%k0n(x#(${RDK{5AIcGXHb%4?4f5OzFBNnU9Aa z3btEG4{U*-BU3o0<;UmO*%E)wV(X*DkbBp~2R3c;GvLlJ=7jhxaPEtoxs$!|hBRS9 z&HRaRnv?rKv5@688i(xppf9r(UuhxEb=?rs2|Wco2KeS1Y4vL9z4xTI-f}U*h7HnB zKb6l~uQ~Au_x-dvtKh=js>uLlQgQ#}3wbdXn9Sr)IpYz}aF022#P5T!Yi-1_mcw$+?@RJhs4_c^;hZWQFrzd->?p_d7$0l zz*`P)Iz=0M@+Q0RCqJ&kTM=(YLHwx)7xpIB=_8Lwy{F=reJ%$+e8iIB3b-dxD>zaJZ@PE8LdmT7W zM|nPQt4LM(Q^&V4$s2a=xoma(m^Vvex4PcXy^hx2>wyjGdW)`8FZ`CdujVtJ9x~Pb zzLM|5BtFPG3VzqMy0y*)dmj5nn!kHmUgq+rqV?y&9x&6uUVP0^E5Ee*oz@p;&TIq! zN0?{#n)v(5alhS6_A~H*o}A~G4Qagc@@Wh21%~3=vPnN&hzzoSWk-x*Ko4S(=>}p# z;@ZsjFDpkM>aZUW>$V!24fItxOvvxL`1_6-GX`&`@Zb)_I~Z?CYYpfHIt=ZGSqAE~ z7#agdP?oRr`|c?6vX$SB?(dV3qxs$N-^o_SON{S% md0ENd>*e+IdYA05JGRU5*iPr8sHM~F) Program.config).ContainsKey("gpu_mode")) { - CurrentGPU = Program.config.gpu_mode; - } - - if (CurrentGPU == GPUMode) { return; } + if (CurrentGPU == GPUMode) + return; var restart = false; var changed = false; @@ -168,9 +166,7 @@ namespace GHelper } if (changed) - { - Program.config.gpu_mode = GPUMode; - } + Program.config.setConfig("gpu_mode", GPUMode); if (restart) { @@ -193,14 +189,17 @@ namespace GHelper case ASUSWmi.GPUModeEco: buttonEco.BackColor = colorActive; groupGPU.Text = "GPU Mode: Eco (iGPU only)"; + Program.trayIcon.Icon = new System.Drawing.Icon("Resources/eco.ico"); break; case ASUSWmi.GPUModeUltimate: buttonUltimate.BackColor = colorActive; groupGPU.Text = "GPU Mode: Ultimate (dGPU exclusive)"; + Program.trayIcon.Icon = new System.Drawing.Icon("Resources/ultimate.ico"); break; default: buttonStandard.BackColor = colorActive; groupGPU.Text = "GPU Mode: Eco (iGPU and dGPU)"; + Program.trayIcon.Icon = new System.Drawing.Icon("Resources/standard.ico"); break; } }