diff --git a/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControl.exe.deploy b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControl.exe.deploy new file mode 100644 index 0000000..fcc6fbe Binary files /dev/null and b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControl.exe.deploy differ diff --git a/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.application b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.application new file mode 100644 index 0000000..2519994 --- /dev/null +++ b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.application @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + VkRZQnzKQEa58EWCSMCnhF2twvcxNIaA5jlw/pXOw4M= + + + +IlEmX+XiACqQR57sLOnsM6L/3C5obRyg3qA4sDiB7YY=o8YpfToFaricuRaoJMNZw1bu1yrysCHRjbgMf7CA5/0VQMXpwkIJJYvbgNry32OFDh+gUZRgo0qOa9TAsjuMqGXeNQ6Vt3zsi5IMRCDVRSxHyPQkO/6C5qCVwwZiWOCMN9Fl+8pI7PwddulgffSIu8kUgIHwBlPOkRYkQwFHuSI=5MKxtgy2OnwQkhPWJIUe+WAonYu1QrYEI1GHlcONac2hHNnHXm04iEy76UikGsXLc13KX90AH5VmNl0Jt/hRb9pqb6mC9Hd+jzov5G8TDC77HHtJO81G91vT1CfMD6JZekbTCH5tE4vGk8bXiaMB+XS0cMVLA12tu8x3KatNQpk=AQABCN=LAPTOP-IU9A729Q\bow33pse2i08O+Tm2DU9lNWKb8jxz8D3uiNRp0At8cJy+9bY=oQSz0KTHddVr48+OepgcQXcfLZ496ypQdRFAyWvx+ms1tUi57UgOUggILmnUq0ltplFYnaUt6j4g78CIKPTiWCQy7T/WExnmHz84ywoStLHbk6uvLtYQzHyiDnf/E8CgdMGko+uwyNhNOSSjjY67vSvTnNUBNgRrr56JR7fDl4w=5MKxtgy2OnwQkhPWJIUe+WAonYu1QrYEI1GHlcONac2hHNnHXm04iEy76UikGsXLc13KX90AH5VmNl0Jt/hRb9pqb6mC9Hd+jzov5G8TDC77HHtJO81G91vT1CfMD6JZekbTCH5tE4vGk8bXiaMB+XS0cMVLA12tu8x3KatNQpk=AQABMIIB7TCCAVagAwIBAgIQWy5fl7XivKNF8WyXgF7H9DANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDHioATABBAFAAVABPAFAALQBJAFUAOQBBADcAMgA5AFEAXABiAG8AdwAzADMwHhcNMjQwNTE4MDUzMTIxWhcNMjUwNTE4MTEzMTIxWjA1MTMwMQYDVQQDHioATABBAFAAVABPAFAALQBJAFUAOQBBADcAMgA5AFEAXABiAG8AdwAzADMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOTCsbYMtjp8EJIT1iSFHvlgKJ2LtUK2BCNRh5XDjWnNoRzZx15tOIhMu+lIpBrFy3Ndyl/dAB+VZjZdCbf4UW/aam+pgvR3fo86L+RvEwwu+xx7STvNRvdb09QnzA+iWXpG0wh+bROLxpPG14mjAfl0tHDFSwNdrbvMdymrTUKZAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAY6EwQVMqSprcsUwrU+DB5jz0aYLWX6iD0Cuq2r+SPbAXaEkPzUOypV155rwOGMeh0jZKF4Jc5EgiYh1njyxQHee4T16pi0uoQ7fQHQQ+MnfoO/wHrG2/yoi6fHbpgMQKz3dQ1UfZkoV2QZgHu9xJAMdAg9QmIJYDsjvZWChIYPw= \ No newline at end of file diff --git a/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.exe.config.deploy b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.exe.config.deploy new file mode 100644 index 0000000..5403b3c --- /dev/null +++ b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.exe.config.deploy @@ -0,0 +1,24 @@ + + + + +
+ + + + + + + + + 90 + + + True + + + True + + + + \ No newline at end of file diff --git a/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.exe.deploy b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.exe.deploy new file mode 100644 index 0000000..ab26f59 Binary files /dev/null and b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.exe.deploy differ diff --git a/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.exe.manifest b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.exe.manifest new file mode 100644 index 0000000..594a38d --- /dev/null +++ b/Application Files/AsusFanControlGUI_1_0_0_0/AsusFanControlGUI.exe.manifest @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FqD0p9nxsDK7WrtWEpMKmKxGkVZOX7mhBSS6lLiRHv4= + + + + + + + + + + + + shphuvPjl0LqLcE6eGOcOhm27GlVvrWTzu7aZv0u2No= + + + + + + + + + + xzkEIINUne4CANLFpsrdbpDMwHsfvt56VutYVsDnnFA= + + + + + + + + + AGoE/lNX3bWI7MYm49XrYQ1clZaPz8GSZmIatT5AySI= + + +58vzrrWfF/f/ZzVtfc8J+Ik/tBmhZ/LslB3BaqZzp5o=gBGqEmUWJ8hV8Se0gquUg48FAlug3VPGbQdos/GbbV8BfxzSUl2W9s28ZgDdZ3e3WHnRkNXvWK9JgU+wdVFqOgdgPJiY4cf3gMFYDCzLef6yHXlR4mTCEY6d+R8A8jlVYjkTkBRsAmJ3HMewQStpInf7Ica0HeEMJAjkHZE+S6c=5MKxtgy2OnwQkhPWJIUe+WAonYu1QrYEI1GHlcONac2hHNnHXm04iEy76UikGsXLc13KX90AH5VmNl0Jt/hRb9pqb6mC9Hd+jzov5G8TDC77HHtJO81G91vT1CfMD6JZekbTCH5tE4vGk8bXiaMB+XS0cMVLA12tu8x3KatNQpk=AQABCN=LAPTOP-IU9A729Q\bow33SQjkLc0bSvtTDP63aP0aWLpD3Mi9Mv4JyxTtM8rSOo4=u1eQvSEGiTnIFmdhQqXG9V+AKxUTrpupAIs5WCywE29Bc5VyH7NAWa2G1UHsRROSqhwj/ObXfk5NIWEU6QV7UoOtmu70o2ZRi/HcGmMM6fxWBGbeB31hk4SVC74pkgj7ty1W0xN+IeLS1sGnu2dS4q0VGfuAON5fcDCgG0yq8W8=5MKxtgy2OnwQkhPWJIUe+WAonYu1QrYEI1GHlcONac2hHNnHXm04iEy76UikGsXLc13KX90AH5VmNl0Jt/hRb9pqb6mC9Hd+jzov5G8TDC77HHtJO81G91vT1CfMD6JZekbTCH5tE4vGk8bXiaMB+XS0cMVLA12tu8x3KatNQpk=AQABMIIB7TCCAVagAwIBAgIQWy5fl7XivKNF8WyXgF7H9DANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDHioATABBAFAAVABPAFAALQBJAFUAOQBBADcAMgA5AFEAXABiAG8AdwAzADMwHhcNMjQwNTE4MDUzMTIxWhcNMjUwNTE4MTEzMTIxWjA1MTMwMQYDVQQDHioATABBAFAAVABPAFAALQBJAFUAOQBBADcAMgA5AFEAXABiAG8AdwAzADMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOTCsbYMtjp8EJIT1iSFHvlgKJ2LtUK2BCNRh5XDjWnNoRzZx15tOIhMu+lIpBrFy3Ndyl/dAB+VZjZdCbf4UW/aam+pgvR3fo86L+RvEwwu+xx7STvNRvdb09QnzA+iWXpG0wh+bROLxpPG14mjAfl0tHDFSwNdrbvMdymrTUKZAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAY6EwQVMqSprcsUwrU+DB5jz0aYLWX6iD0Cuq2r+SPbAXaEkPzUOypV155rwOGMeh0jZKF4Jc5EgiYh1njyxQHee4T16pi0uoQ7fQHQQ+MnfoO/wHrG2/yoi6fHbpgMQKz3dQ1UfZkoV2QZgHu9xJAMdAg9QmIJYDsjvZWChIYPw= \ No newline at end of file diff --git a/Application Files/AsusFanControlGUI_1_0_0_0/propeller.ico.deploy b/Application Files/AsusFanControlGUI_1_0_0_0/propeller.ico.deploy new file mode 100644 index 0000000..9800eff Binary files /dev/null and b/Application Files/AsusFanControlGUI_1_0_0_0/propeller.ico.deploy differ diff --git a/AsusFanControlGUI.application b/AsusFanControlGUI.application new file mode 100644 index 0000000..2519994 --- /dev/null +++ b/AsusFanControlGUI.application @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + VkRZQnzKQEa58EWCSMCnhF2twvcxNIaA5jlw/pXOw4M= + + + +IlEmX+XiACqQR57sLOnsM6L/3C5obRyg3qA4sDiB7YY=o8YpfToFaricuRaoJMNZw1bu1yrysCHRjbgMf7CA5/0VQMXpwkIJJYvbgNry32OFDh+gUZRgo0qOa9TAsjuMqGXeNQ6Vt3zsi5IMRCDVRSxHyPQkO/6C5qCVwwZiWOCMN9Fl+8pI7PwddulgffSIu8kUgIHwBlPOkRYkQwFHuSI=5MKxtgy2OnwQkhPWJIUe+WAonYu1QrYEI1GHlcONac2hHNnHXm04iEy76UikGsXLc13KX90AH5VmNl0Jt/hRb9pqb6mC9Hd+jzov5G8TDC77HHtJO81G91vT1CfMD6JZekbTCH5tE4vGk8bXiaMB+XS0cMVLA12tu8x3KatNQpk=AQABCN=LAPTOP-IU9A729Q\bow33pse2i08O+Tm2DU9lNWKb8jxz8D3uiNRp0At8cJy+9bY=oQSz0KTHddVr48+OepgcQXcfLZ496ypQdRFAyWvx+ms1tUi57UgOUggILmnUq0ltplFYnaUt6j4g78CIKPTiWCQy7T/WExnmHz84ywoStLHbk6uvLtYQzHyiDnf/E8CgdMGko+uwyNhNOSSjjY67vSvTnNUBNgRrr56JR7fDl4w=5MKxtgy2OnwQkhPWJIUe+WAonYu1QrYEI1GHlcONac2hHNnHXm04iEy76UikGsXLc13KX90AH5VmNl0Jt/hRb9pqb6mC9Hd+jzov5G8TDC77HHtJO81G91vT1CfMD6JZekbTCH5tE4vGk8bXiaMB+XS0cMVLA12tu8x3KatNQpk=AQABMIIB7TCCAVagAwIBAgIQWy5fl7XivKNF8WyXgF7H9DANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDHioATABBAFAAVABPAFAALQBJAFUAOQBBADcAMgA5AFEAXABiAG8AdwAzADMwHhcNMjQwNTE4MDUzMTIxWhcNMjUwNTE4MTEzMTIxWjA1MTMwMQYDVQQDHioATABBAFAAVABPAFAALQBJAFUAOQBBADcAMgA5AFEAXABiAG8AdwAzADMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOTCsbYMtjp8EJIT1iSFHvlgKJ2LtUK2BCNRh5XDjWnNoRzZx15tOIhMu+lIpBrFy3Ndyl/dAB+VZjZdCbf4UW/aam+pgvR3fo86L+RvEwwu+xx7STvNRvdb09QnzA+iWXpG0wh+bROLxpPG14mjAfl0tHDFSwNdrbvMdymrTUKZAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAY6EwQVMqSprcsUwrU+DB5jz0aYLWX6iD0Cuq2r+SPbAXaEkPzUOypV155rwOGMeh0jZKF4Jc5EgiYh1njyxQHee4T16pi0uoQ7fQHQQ+MnfoO/wHrG2/yoi6fHbpgMQKz3dQ1UfZkoV2QZgHu9xJAMdAg9QmIJYDsjvZWChIYPw= \ No newline at end of file diff --git a/AsusFanControlGUI/AsusFanControlGUI.csproj b/AsusFanControlGUI/AsusFanControlGUI.csproj index aa68de8..896cf4f 100644 --- a/AsusFanControlGUI/AsusFanControlGUI.csproj +++ b/AsusFanControlGUI/AsusFanControlGUI.csproj @@ -12,6 +12,22 @@ 512 true true + false + C:\Users\bow33\Documents\GitHub\AsusFanControlEnhanced\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 1 + 1.0.0.%2a + false + true + true AnyCPU @@ -55,6 +71,18 @@ propeller.ico + + 3896F9A71C1385218E0E436CCCE1201230675364 + + + AsusFanControlGUI_TemporaryKey.pfx + + + true + + + true + @@ -89,6 +117,7 @@ True Resources.resx + SettingsSingleFileGenerator Settings.Designer.cs @@ -111,5 +140,17 @@ + + + False + Microsoft .NET Framework 4.7.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + \ No newline at end of file diff --git a/AsusFanControlGUI/Form1.Designer.cs b/AsusFanControlGUI/Form1.Designer.cs index 7f0f2fd..764bc85 100644 --- a/AsusFanControlGUI/Form1.Designer.cs +++ b/AsusFanControlGUI/Form1.Designer.cs @@ -35,7 +35,6 @@ this.label2 = new System.Windows.Forms.Label(); this.button1 = new System.Windows.Forms.Button(); this.labelRPM = new System.Windows.Forms.Label(); - this.checkBoxTurnOn = new System.Windows.Forms.CheckBox(); this.labelCPUTemp = new System.Windows.Forms.Label(); this.button2 = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); @@ -44,16 +43,24 @@ this.toolStripMenuItemTurnOffControlOnExit = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemForbidUnsafeSettings = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemCheckForUpdates = new System.Windows.Forms.ToolStripMenuItem(); + this.label5 = new System.Windows.Forms.Label(); + this.pictureBoxFanCurve = new System.Windows.Forms.PictureBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fanControl = new System.Windows.Forms.RadioButton(); + this.fanCurveControl = new System.Windows.Forms.RadioButton(); ((System.ComponentModel.ISupportInitialize)(this.trackBarFanSpeed)).BeginInit(); this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxFanCurve)).BeginInit(); + this.groupBox1.SuspendLayout(); this.SuspendLayout(); // // trackBarFanSpeed // - this.trackBarFanSpeed.Location = new System.Drawing.Point(12, 62); + this.trackBarFanSpeed.Location = new System.Drawing.Point(17, 54); + this.trackBarFanSpeed.Margin = new System.Windows.Forms.Padding(4); this.trackBarFanSpeed.Maximum = 100; this.trackBarFanSpeed.Name = "trackBarFanSpeed"; - this.trackBarFanSpeed.Size = new System.Drawing.Size(300, 45); + this.trackBarFanSpeed.Size = new System.Drawing.Size(400, 56); this.trackBarFanSpeed.TabIndex = 0; this.trackBarFanSpeed.Value = 100; this.trackBarFanSpeed.KeyUp += new System.Windows.Forms.KeyEventHandler(this.trackBarFanSpeed_KeyUp); @@ -62,35 +69,39 @@ // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 110); + this.label1.Location = new System.Drawing.Point(13, 401); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(73, 13); + this.label1.Size = new System.Drawing.Size(88, 16); this.label1.TabIndex = 1; this.label1.Text = "Current value:"; // // labelValue // this.labelValue.AutoSize = true; - this.labelValue.Location = new System.Drawing.Point(91, 110); + this.labelValue.Location = new System.Drawing.Point(118, 401); + this.labelValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.labelValue.Name = "labelValue"; - this.labelValue.Size = new System.Drawing.Size(10, 13); + this.labelValue.Size = new System.Drawing.Size(11, 16); this.labelValue.TabIndex = 2; this.labelValue.Text = "-"; // // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(40, 139); + this.label2.Location = new System.Drawing.Point(50, 437); + this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(71, 13); + this.label2.Size = new System.Drawing.Size(85, 16); this.label2.TabIndex = 3; this.label2.Text = "Current RPM:"; // // button1 // - this.button1.Location = new System.Drawing.Point(12, 134); + this.button1.Location = new System.Drawing.Point(13, 431); + this.button1.Margin = new System.Windows.Forms.Padding(4); this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(22, 23); + this.button1.Size = new System.Drawing.Size(29, 28); this.button1.TabIndex = 4; this.button1.Text = "↻"; this.button1.UseVisualStyleBackColor = true; @@ -99,37 +110,29 @@ // labelRPM // this.labelRPM.AutoSize = true; - this.labelRPM.Location = new System.Drawing.Point(117, 139); + this.labelRPM.Location = new System.Drawing.Point(153, 437); + this.labelRPM.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.labelRPM.Name = "labelRPM"; - this.labelRPM.Size = new System.Drawing.Size(10, 13); + this.labelRPM.Size = new System.Drawing.Size(11, 16); this.labelRPM.TabIndex = 5; this.labelRPM.Text = "-"; // - // checkBoxTurnOn - // - this.checkBoxTurnOn.AutoSize = true; - this.checkBoxTurnOn.Location = new System.Drawing.Point(12, 37); - this.checkBoxTurnOn.Name = "checkBoxTurnOn"; - this.checkBoxTurnOn.Size = new System.Drawing.Size(116, 17); - this.checkBoxTurnOn.TabIndex = 6; - this.checkBoxTurnOn.Text = "Turn on fan control"; - this.checkBoxTurnOn.UseVisualStyleBackColor = true; - this.checkBoxTurnOn.CheckedChanged += new System.EventHandler(this.checkBoxTurnOn_CheckedChanged); - // // labelCPUTemp // this.labelCPUTemp.AutoSize = true; - this.labelCPUTemp.Location = new System.Drawing.Point(141, 168); + this.labelCPUTemp.Location = new System.Drawing.Point(185, 473); + this.labelCPUTemp.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.labelCPUTemp.Name = "labelCPUTemp"; - this.labelCPUTemp.Size = new System.Drawing.Size(10, 13); + this.labelCPUTemp.Size = new System.Drawing.Size(11, 16); this.labelCPUTemp.TabIndex = 9; this.labelCPUTemp.Text = "-"; // // button2 // - this.button2.Location = new System.Drawing.Point(12, 163); + this.button2.Location = new System.Drawing.Point(13, 467); + this.button2.Margin = new System.Windows.Forms.Padding(4); this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(22, 23); + this.button2.Size = new System.Drawing.Size(29, 28); this.button2.TabIndex = 8; this.button2.Text = "↻"; this.button2.UseVisualStyleBackColor = true; @@ -138,20 +141,22 @@ // label4 // this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(40, 168); + this.label4.Location = new System.Drawing.Point(50, 473); + this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(95, 13); + this.label4.Size = new System.Drawing.Size(116, 16); this.label4.TabIndex = 7; this.label4.Text = "Current CPU temp:"; // // menuStrip1 // + this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripMenuItem1, this.toolStripMenuItemCheckForUpdates}); this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(324, 24); + this.menuStrip1.Size = new System.Drawing.Size(510, 28); this.menuStrip1.TabIndex = 10; this.menuStrip1.Text = "menuStrip1"; // @@ -161,14 +166,14 @@ this.toolStripMenuItemTurnOffControlOnExit, this.toolStripMenuItemForbidUnsafeSettings}); this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(72, 20); + this.toolStripMenuItem1.Size = new System.Drawing.Size(89, 24); this.toolStripMenuItem1.Text = "Advanced"; // // toolStripMenuItemTurnOffControlOnExit // this.toolStripMenuItemTurnOffControlOnExit.CheckOnClick = true; this.toolStripMenuItemTurnOffControlOnExit.Name = "toolStripMenuItemTurnOffControlOnExit"; - this.toolStripMenuItemTurnOffControlOnExit.Size = new System.Drawing.Size(196, 22); + this.toolStripMenuItemTurnOffControlOnExit.Size = new System.Drawing.Size(244, 26); this.toolStripMenuItemTurnOffControlOnExit.Text = "Turn off control on exit"; this.toolStripMenuItemTurnOffControlOnExit.CheckedChanged += new System.EventHandler(this.toolStripMenuItemTurnOffControlOnExit_CheckedChanged); // @@ -176,40 +181,103 @@ // this.toolStripMenuItemForbidUnsafeSettings.CheckOnClick = true; this.toolStripMenuItemForbidUnsafeSettings.Name = "toolStripMenuItemForbidUnsafeSettings"; - this.toolStripMenuItemForbidUnsafeSettings.Size = new System.Drawing.Size(196, 22); + this.toolStripMenuItemForbidUnsafeSettings.Size = new System.Drawing.Size(244, 26); this.toolStripMenuItemForbidUnsafeSettings.Text = "Forbid unsafe settings"; this.toolStripMenuItemForbidUnsafeSettings.CheckedChanged += new System.EventHandler(this.toolStripMenuItemForbidUnsafeSettings_CheckedChanged); // // toolStripMenuItemCheckForUpdates // this.toolStripMenuItemCheckForUpdates.Name = "toolStripMenuItemCheckForUpdates"; - this.toolStripMenuItemCheckForUpdates.Size = new System.Drawing.Size(115, 20); + this.toolStripMenuItemCheckForUpdates.Size = new System.Drawing.Size(142, 24); this.toolStripMenuItemCheckForUpdates.Text = "Check for updates"; this.toolStripMenuItemCheckForUpdates.Click += new System.EventHandler(this.toolStripMenuItemCheckForUpdates_Click); // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(341, 28); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(76, 16); + this.label5.TabIndex = 13; + this.label5.Text = "PWM value"; + // + // pictureBoxFanCurve + // + this.pictureBoxFanCurve.Location = new System.Drawing.Point(13, 184); + this.pictureBoxFanCurve.Name = "pictureBoxFanCurve"; + this.pictureBoxFanCurve.Size = new System.Drawing.Size(477, 203); + this.pictureBoxFanCurve.TabIndex = 0; + this.pictureBoxFanCurve.TabStop = false; + this.pictureBoxFanCurve.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBoxFanCurve_Paint); + this.pictureBoxFanCurve.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBoxFanCurve_MouseClick); + this.pictureBoxFanCurve.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.pictureBoxFanCurve_MouseDoubleClick); + this.pictureBoxFanCurve.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBoxFanCurve_MouseDown); + this.pictureBoxFanCurve.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBoxFanCurve_MouseMove); + this.pictureBoxFanCurve.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBoxFanCurve_MouseUp); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.fanControl); + this.groupBox1.Controls.Add(this.fanCurveControl); + this.groupBox1.Controls.Add(this.trackBarFanSpeed); + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Location = new System.Drawing.Point(12, 32); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(486, 146); + this.groupBox1.TabIndex = 14; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + // + // fanControl + // + this.fanControl.AutoSize = true; + this.fanControl.Location = new System.Drawing.Point(20, 27); + this.fanControl.Name = "fanControl"; + this.fanControl.Size = new System.Drawing.Size(137, 20); + this.fanControl.TabIndex = 15; + this.fanControl.Text = "Turn on fan control"; + this.fanControl.UseVisualStyleBackColor = true; + this.fanControl.CheckedChanged += new System.EventHandler(this.radioButton2_CheckedChanged); + // + // fanCurveControl + // + this.fanCurveControl.AutoSize = true; + this.fanCurveControl.Location = new System.Drawing.Point(20, 108); + this.fanCurveControl.Name = "fanCurveControl"; + this.fanCurveControl.Size = new System.Drawing.Size(130, 20); + this.fanCurveControl.TabIndex = 14; + this.fanCurveControl.Text = "Turn on fan curve"; + this.fanCurveControl.UseVisualStyleBackColor = true; + this.fanCurveControl.CheckedChanged += new System.EventHandler(this.fanCurve_CheckedChanged); + // // Form1 // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(324, 198); + this.ClientSize = new System.Drawing.Size(510, 523); + this.Controls.Add(this.pictureBoxFanCurve); this.Controls.Add(this.labelCPUTemp); this.Controls.Add(this.button2); this.Controls.Add(this.label4); - this.Controls.Add(this.checkBoxTurnOn); this.Controls.Add(this.labelRPM); this.Controls.Add(this.button1); this.Controls.Add(this.label2); this.Controls.Add(this.labelValue); this.Controls.Add(this.label1); - this.Controls.Add(this.trackBarFanSpeed); this.Controls.Add(this.menuStrip1); + this.Controls.Add(this.groupBox1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MainMenuStrip = this.menuStrip1; + this.Margin = new System.Windows.Forms.Padding(4); this.Name = "Form1"; this.Text = "Asus Fan Control"; + this.Load += new System.EventHandler(this.Form1_Load); ((System.ComponentModel.ISupportInitialize)(this.trackBarFanSpeed)).EndInit(); this.menuStrip1.ResumeLayout(false); this.menuStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxFanCurve)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -223,7 +291,6 @@ private System.Windows.Forms.Label label2; private System.Windows.Forms.Button button1; private System.Windows.Forms.Label labelRPM; - private System.Windows.Forms.CheckBox checkBoxTurnOn; private System.Windows.Forms.Label labelCPUTemp; private System.Windows.Forms.Button button2; private System.Windows.Forms.Label label4; @@ -232,6 +299,11 @@ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemTurnOffControlOnExit; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemForbidUnsafeSettings; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemCheckForUpdates; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.PictureBox pictureBoxFanCurve; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton fanCurveControl; + private System.Windows.Forms.RadioButton fanControl; } } diff --git a/AsusFanControlGUI/Form1.cs b/AsusFanControlGUI/Form1.cs index cb742bd..d4eeabd 100644 --- a/AsusFanControlGUI/Form1.cs +++ b/AsusFanControlGUI/Form1.cs @@ -14,6 +14,7 @@ namespace AsusFanControlGUI { public partial class Form1 : Form { + private System.Windows.Forms.Timer timer; AsusControl asusControl = new AsusControl(); int fanSpeed = 0; @@ -24,7 +25,25 @@ namespace AsusFanControlGUI toolStripMenuItemTurnOffControlOnExit.Checked = Properties.Settings.Default.turnOffControlOnExit; toolStripMenuItemForbidUnsafeSettings.Checked = Properties.Settings.Default.forbidUnsafeSettings; - trackBarFanSpeed.Value = Properties.Settings.Default.fanSpeed; + //trackBarFanSpeed.Value = Properties.Settings.Default.fanSpeed; + } + + private void Form1_Load(object sender, EventArgs e) + { + // Create and start the timer + timer = new System.Windows.Forms.Timer(); + timer.Interval = 1000; // 1000 milliseconds = 1 second + timer.Tick += Timer_Tick; + timer.Start(); + } + + private void Timer_Tick(object sender, EventArgs e) + { + // Update fan speeds + labelRPM.Text = string.Join(" ", asusControl.GetFanSpeeds()); + + // Update CPU temperature + labelCPUTemp.Text = $"{asusControl.Thermal_Read_Cpu_Temperature()}"; } private void OnProcessExit(object sender, EventArgs e) @@ -50,13 +69,12 @@ namespace AsusFanControlGUI System.Diagnostics.Process.Start("https://github.com/Karmel0x/AsusFanControl/releases"); } - private void setFanSpeed() + private void setFanSpeed(int value, bool isTurnedOn) { - var value = trackBarFanSpeed.Value; Properties.Settings.Default.fanSpeed = value; Properties.Settings.Default.Save(); - if (!checkBoxTurnOn.Checked) + if (!isTurnedOn) value = 0; if (value == 0) @@ -68,15 +86,9 @@ namespace AsusFanControlGUI return; fanSpeed = value; - asusControl.SetFanSpeeds(value); } - private void checkBoxTurnOn_CheckedChanged(object sender, EventArgs e) - { - setFanSpeed(); - } - private void trackBarFanSpeed_MouseCaptureChanged(object sender, EventArgs e) { if (Properties.Settings.Default.forbidUnsafeSettings) @@ -87,7 +99,7 @@ namespace AsusFanControlGUI trackBarFanSpeed.Value = 99; } - setFanSpeed(); + setFanSpeed(trackBarFanSpeed.Value, fanControl.Checked); } private void trackBarFanSpeed_KeyUp(object sender, KeyEventArgs e) @@ -107,5 +119,320 @@ namespace AsusFanControlGUI { labelCPUTemp.Text = $"{asusControl.Thermal_Read_Cpu_Temperature()}"; } + + + + + // My Code: + private Point maxPoint; + private Point minPoint; + + private void pictureBoxFanCurve_Paint(object sender, PaintEventArgs e) + { + // Draw the fan curve graph + Graphics g = e.Graphics; + + // Set up the graph dimensions + int padding = 20; + int graphWidth = pictureBoxFanCurve.Width - 2 * padding; + int graphHeight = pictureBoxFanCurve.Height - 2 * padding; + + // Draw the temperature axis and labels + int tempMin = 30; + int tempMax = 100; + int tempInterval = 10; + + g.DrawLine(Pens.Black, padding, pictureBoxFanCurve.Height - padding, pictureBoxFanCurve.Width - padding, pictureBoxFanCurve.Height - padding); + + for (int temp = tempMin; temp <= tempMax; temp += tempInterval) + { + int x = padding + (temp - tempMin) * graphWidth / (tempMax - tempMin); + g.DrawLine(Pens.Black, x, pictureBoxFanCurve.Height - padding - 5, x, pictureBoxFanCurve.Height - padding + 5); + g.DrawString(temp.ToString(), DefaultFont, Brushes.Black, x - 10, pictureBoxFanCurve.Height - padding + 10); + } + + g.DrawString("Temperature (°C)", DefaultFont, Brushes.Black, pictureBoxFanCurve.Width / 2 - 40, pictureBoxFanCurve.Height - padding + 20); + + // Draw the fan speed axis and labels + int speedMin = 0; + int speedMax = 100; + int speedInterval = 20; + + g.DrawLine(Pens.Black, padding, padding, padding, pictureBoxFanCurve.Height - padding); + + for (int speed = speedMin; speed <= speedMax; speed += speedInterval) + { + int y = pictureBoxFanCurve.Height - padding - speed * graphHeight / speedMax; + g.DrawLine(Pens.Black, padding - 5, y, padding + 5, y); + g.DrawString(speed.ToString(), DefaultFont, Brushes.Black, 5, y - 10); + } + + g.DrawString("Fan Speed (%)", DefaultFont, Brushes.Black, padding - 10, padding - 20, new StringFormat(StringFormatFlags.DirectionVertical)); + + // Draw the fan curve points + foreach (Point point in fanCurvePoints.Values) + { + int x = padding + (point.X - tempMin) * graphWidth / (tempMax - tempMin); + int y = pictureBoxFanCurve.Height - padding - point.Y * graphHeight / speedMax; + g.FillEllipse(Brushes.Green, x - 3, y - 3, 12, 12); + } + + // Draw the maximum and minimum temperature points + int maxX = padding + (maxPoint.X - tempMin) * graphWidth / (tempMax - tempMin); + int maxY = pictureBoxFanCurve.Height - padding - maxPoint.Y * graphHeight / speedMax; + g.FillEllipse(Brushes.Red, maxX - 5, maxY - 5, 10, 10); + + int minX = padding + (minPoint.X - tempMin) * graphWidth / (tempMax - tempMin); + int minY = pictureBoxFanCurve.Height - padding - minPoint.Y * graphHeight / speedMax; + g.FillEllipse(Brushes.Yellow, minX - 5, minY - 5, 10, 10); + + // Draw lines connecting the fan curve points + if (fanCurvePoints.Count >= 2) + { + Point[] graphPoints = fanCurvePoints.Values + .OrderBy(p => p.X) + .Select(p => new Point( + padding + (p.X - tempMin) * graphWidth / (tempMax - tempMin), + pictureBoxFanCurve.Height - padding - p.Y * graphHeight / speedMax + )) + .ToArray(); + + using (Pen thickPen = new Pen(Color.Black, 3)) + { + g.DrawLines(Pens.Black, graphPoints); + } + } + } + + private void pictureBoxFanCurve_MouseDoubleClick(object sender, MouseEventArgs e) + { + + // Set up the graph dimensions + int padding = 20; + int graphWidth = pictureBoxFanCurve.Width - 2 * padding; + int graphHeight = pictureBoxFanCurve.Height - 2 * padding; + + // Define the temperature and fan speed ranges + int tempMin = 30; + int tempMax = 100; + int speedMin = 0; + int speedMax = 100; + + // Convert the mouse coordinates to graph coordinates + int temperature = tempMin + (e.X - padding) * (tempMax - tempMin) / graphWidth; + int fanSpeed = speedMax - (e.Y - padding) * speedMax / graphHeight; + + // Check if a point with the same y-axis already exists + if (fanCurvePoints.Values.Any(p => p.Y == fanSpeed)) + { + return; // Do not add the new point + } + + if (fanCurvePoints.Count >= 15) + { + MessageBox.Show("Maximum number of points reached."); + return; + } + + // Generate a unique ID for the new point + int newID = fanCurvePoints.Count > 0 ? fanCurvePoints.Keys.Max() + 1 : 1; + + // Add a new point to the fan curve + Point newPoint = new Point(temperature, fanSpeed); + fanCurvePoints[newID] = newPoint; + + pictureBoxFanCurve.Invalidate(); // Redraw the graph + } + + private int selectedPointId = 0; + + private (int temperature, int fanSpeed) mousePosition(Point e) + { + // Set up the graph dimensions + int padding = 20; + int graphWidth = pictureBoxFanCurve.Width - 2 * padding; + int graphHeight = pictureBoxFanCurve.Height - 2 * padding; + + // Define the temperature and fan speed ranges + int tempMin = 30; + int tempMax = 100; + int speedMin = 0; + int speedMax = 100; + + // Convert the mouse coordinates to graph coordinates + int temperature = tempMin + (e.X - padding) * (tempMax - tempMin) / graphWidth; + int fanSpeed = speedMax - (e.Y - padding) * speedMax / graphHeight; + + return (temperature, fanSpeed); + } + + + private void pictureBoxFanCurve_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + (int temperature, int fanSpeed) = mousePosition(e.Location); + + var nearestPoints = fanCurvePoints + .OrderBy(p => Distance(p.Value, new Point(temperature, fanSpeed))); + + var reachablePoint = nearestPoints + .FirstOrDefault(p => Distance(p.Value, new Point(temperature, fanSpeed)) <= 20); + + if (reachablePoint.Value != Point.Empty) + { + fanCurvePoints.Remove(reachablePoint.Key); + Console.WriteLine($"Point ID: {reachablePoint.Key} deleted."); + pictureBoxFanCurve.Invalidate(); + } + } + + + + } + + private void pictureBoxFanCurve_MouseDown(object sender, MouseEventArgs e) + { + Console.Write("MouseDown: "); + + if (e.Button == MouseButtons.Left) + { + Console.WriteLine(e.Button); + + // Get mouse position + (int temperature, int fanSpeed) = mousePosition(e.Location); + + + var nearestPoints = fanCurvePoints + .OrderBy(p => Distance(p.Value, new Point(temperature, fanSpeed))); + + var reachablePoint = nearestPoints + .FirstOrDefault(p => Distance(p.Value, new Point(temperature, fanSpeed)) <= 20); + + if (reachablePoint.Value != Point.Empty) + { + selectedPointId = reachablePoint.Key; + Console.WriteLine($"Distance: {Distance(reachablePoint.Value, new Point(temperature, fanSpeed))}"); + } + else + { + selectedPointId = 0; + } + } + } + + private void pictureBoxFanCurve_MouseMove(object sender, MouseEventArgs e) + { + if (selectedPointId != 0) + { + // Console.Write("MouseMove, Key: "); + + // Get mouse location on grid + (int temperature, int fanSpeed) = mousePosition(e.Location); + fanCurvePoints[selectedPointId] = new Point(temperature, fanSpeed); + pictureBoxFanCurve.Invalidate(); // Redraw the graph + } + } + + private void pictureBoxFanCurve_MouseUp(object sender, MouseEventArgs e) + { + selectedPointId = 0; + + // fanCurvePoints.ToList().ForEach(point => Console.Write($"ID: {point.Key}, X: {point.Value.X}, Y: {point.Value.Y}")); + // Console.WriteLine(); + } + + private double Distance(Point p1, Point p2) + { + int dx = p1.X - p2.X; + int dy = p1.Y - p2.Y; + return Math.Sqrt(dx * dx + dy * dy); + } + + private Dictionary fanCurvePoints = new Dictionary(); + + private Timer fanCurveTimer; // Declare the timer as a class-level variable + + bool isControlYeilded = false; + private void fanCurve_CheckedChanged(object sender, EventArgs e) + { + if (fanCurveControl.Checked) + { + // Start a timer to read the temperature and update the fan speed every 3 seconds + fanCurveTimer = new Timer(); + fanCurveTimer.Interval = 1000; // 3 seconds + fanCurveTimer.Tick += (s, args) => + { + // Read the current temperature + ulong currentTemp = asusControl.Thermal_Read_Cpu_Temperature(); // Implement the ReadTemperature method to get the current temperature + + // Find the fan curve points that bracket the current temperature + KeyValuePair lowerPoint = fanCurvePoints.OrderByDescending(p => p.Value.X).FirstOrDefault(p => (ulong)p.Value.X <= currentTemp); + KeyValuePair upperPoint = fanCurvePoints.OrderBy(p => p.Value.X).FirstOrDefault(p => (ulong)p.Value.X >= currentTemp); + + // Calculate the fan speed based on linear interpolation between the bracket points + int fanSpeed; + // Check if the current temperature is within the range of the fan curve points + if ((ulong)lowerPoint.Key == 0 || (ulong)upperPoint.Key == 0) + { + // Temperature is outside the range, yield control to the system + if (!isControlYeilded) + { + asusControl.SetFanSpeeds(0); + isControlYeilded = true; + } + } + else if (lowerPoint.Value.X == upperPoint.Value.X) + { + isControlYeilded = false; + fanSpeed = lowerPoint.Value.Y; + } + else + { + isControlYeilded = false; + + double ratio = (currentTemp - (ulong)lowerPoint.Value.X) / (double)(upperPoint.Value.X - lowerPoint.Value.X); + fanSpeed = (int)(lowerPoint.Value.Y + (upperPoint.Value.Y - lowerPoint.Value.Y) * ratio); + + + // Apply hysteresis to prevent rapid fan speed changes + int hysteresis = 2; // Adjust the hysteresis value as needed + if (fanSpeed > lastFanSpeed + hysteresis || fanSpeed < lastFanSpeed - hysteresis) + { + // Update the fan speed + fanSpeed = Math.Max(1, Math.Min(100, fanSpeed)); + setFanSpeed(fanSpeed, true); // Implement the SetFanSpeed method to control the fan speed + lastFanSpeed = fanSpeed; + } + } + }; + fanCurveTimer.Start(); + } + else + { + // Stop the timer when the fan curve is unchecked + if (fanCurveTimer != null) + { + fanCurveTimer.Stop(); + fanCurveTimer.Dispose(); + fanCurveTimer = null; + } + } + } + + // Keep track of the last fan speed to apply hysteresis + private int lastFanSpeed = 0; + + private void radioButton2_CheckedChanged(object sender, EventArgs e) + { + if (fanControl.Checked) + { + setFanSpeed(trackBarFanSpeed.Value, fanCurveControl.Checked); + } + + } + + } + } diff --git a/setup.exe b/setup.exe new file mode 100644 index 0000000..4ccf8b5 Binary files /dev/null and b/setup.exe differ