Merge branch 'release/v1.0.0'

This commit is contained in:
昌维
2020-06-25 11:56:06 +08:00
22 changed files with 1522 additions and 0 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,253 @@
THIRD PARTY LICENSE FILE
Contents:
A) SHA1
B) OpenSSL
C) ACE(tm)
D) LibTomCrypt
*****************************************************************************
A) The following software may be included in this product: RFC 3174 - US
Secure Hash Algorithm 1 (SHA1). Use of any of this software is governed by
terms of the license below:
*****************************************************************************
Full Copyright Statement
Copyright (c) The Internet Society (2001). All Rights Reserved.
This document and translations of it may be copied and furnished to others,
and derivative works that comment on or otherwise explain it or assist in its
implementation may be prepared, copied, published and distributed, in whole
or in part, without restriction of any kind, provided that the above
copyright notice and this paragraph are included on all such copies and
derivative works. However, this document itself may not be modified in any
way, such as by removing the copyright notice or references to the Internet
Society or other Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for copyrights
defined in the Internet Standards process must be followed, or as required to
translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked
by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an "AS IS"
basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE
DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY
RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
PARTICULAR PURPOSE.
*****************************************************************************
B) The following software may be included in this product: OpenSSL. Use of
any of this software is governed by terms of the license below:
*****************************************************************************
The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
the OpenSSL License and the original SSLeay license apply to the toolkit.
See below for the actual license texts. Actually both licenses are BSD-style
Open Source licenses. In case of any license issues related to OpenSSL please
contact openssl-core@openssl.org.
OpenSSL License
====================================================================
Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software must
display the following acknowledgment: "This product includes software
developed by the OpenSSL Project for use in the OpenSSL Toolkit.
(http://www.openssl.org/)"
4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
endorse or promote products derived from this software without prior written
permission. For written permission, please contact openssl-core@openssl.org.
5. Products derived from this software may not be called "OpenSSL" nor may
"OpenSSL" appear in their names without prior written permission of the
OpenSSL Project.
6. Redistributions of any form whatsoever must retain the following
acknowledgment: "This product includes software developed by the OpenSSL
Project for use in the OpenSSL Toolkit (http://www.openssl.org/)"
THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
NO EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
====================================================================
This product includes cryptographic software written by Eric Young
(eay@cryptsoft.com). This product includes software written by Tim Hudson
(tjh@cryptsoft.com).
Original SSLeay License
-----------------------
Copyright (c) 1995-1998 Eric Young (eay@cryptsoft.com)
All rights reserved.
This package is an SSL implementation written by Eric Young
(eay@cryptsoft.com). The implementation was written so as to conform with
Netscapes SSL.
This library is free for commercial and non-commercial use as long as the
following conditions are adhered to. The following conditions apply to all
code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code;
not just the SSL code. The SSL documentation included with this distribution
is covered by the same copyright terms except that the holder is Tim Hudson
(tjh@cryptsoft.com).
Copyright remains Eric Young's, and as such any Copyright notices in the code
are not to be removed. If this package is used in a product, Eric Young
should be given attribution as the author of the parts of the library used.
This can be in the form of a textual message at program startup or in
documentation (online or textual) provided with the package.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the copyright notice, this list
of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software must
display the following acknowledgement: "This product includes cryptographic
software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic'
can be left out if the routines from the library being used are not
cryptographic related :-).
4. If you include any Windows specific code (or a derivative thereof) from
the apps directory (application code) you must include an acknowledgement:
"This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The license and distribution terms for any publicly available version or
derivative of this code cannot be changed. i.e. this code cannot simply be
copied and put under another distribution license [including the GNU Public
License.]
*****************************************************************************
C) The following software may be included in this product: ACE(tm). Use of any
of this software is governed by terms of the license below:
*****************************************************************************
Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM), and CoSMIC(TM)
ACE(TM), TAO(TM), CIAO(TM), and CoSMIC(TM) (henceforth referred to as "DOC
software") are copyrighted by Douglas C. Schmidt and his research group at
Washington University, University of California, Irvine, and Vanderbilt
University, Copyright (c) 1993-2005, all rights reserved. Since DOC software is
open-source, freely available software, you are free to use, modify, copy,
and distribute--perpetually and irrevocably--the DOC software source code and
object code produced from the source, as well as copy and distribute modified
versions of this software. You must, however, include this copyright
statement along with code built using DOC software.
You can use DOC software in commercial and/or binary software releases and
are under no obligation to redistribute any of your source code that is built
using DOC software. Note, however, that you may not do anything to the DOC
software code, such as copyrighting it yourself or claiming authorship of the
DOC software code, that will prevent DOC software from being distributed
freely using an open-source development model. You needn't inform anyone that
you're using DOC software in your software, though we encourage you to let us
know so we can promote your project in the DOC software success stories.
The ACE, TAO, CIAO, and CoSMIC web sites are maintained by the DOC Group at
the Institute for Software Integrated Systems (ISIS) and the Center for
Distributed Object Computing of Washington University, St. Louis for the
development of open-source software as part of the open-source software
community. By submitting comments, suggestions, code, code snippets,
techniques (including that of usage) and algorithms (collectively
``Submissions''), submitters acknowledge that they have the right to do so,
that any such Submissions are given freely and unreservedly, and that they
waive any claims to copyright or ownership. In addition, submitters
acknowledge that any such Submission might become part of the copyright
maintained on the overall body of code that comprises the DOC software. By
making a Submission, submitter agrees to these terms. Moreover, submitters
acknowledge that the incorporation or modification of such Submissions is
entirely at the discretion of the moderators of the open-source DOC software
projects or their designees.
Submissions are provided by the submitter ``as is'' with no warranties
whatsoever, including any warranty of merchantability, noninfringement of
third party intellectual property, or fitness for any particular purpose. In
no event shall the submitter be liable for any direct, indirect, special,
exemplary, punitive, or consequential damages, including without limitation,
lost profits, even if advised of the possibility of such damages. Likewise,
DOC software is provided as is with no warranties of any kind, including the
warranties of design, merchantability, and fitness for a particular purpose,
noninfringement, or arising from a course of dealing, usage or trade
practice. Washington University, UC Irvine, Vanderbilt University, their
employees, and students shall have no liability with respect to the
infringement of copyrights, trade secrets or any patents by DOC software or
any part thereof. Moreover, in no event will Washington University, UC
Irvine, or Vanderbilt University, their employees, or students be liable for
any lost revenue or profits or other special, indirect and consequential
damages.
DOC software is provided with no support and without any obligation on the
part of Washington University, UC Irvine, Vanderbilt University, their
employees, or students to assist in its use, correction, modification, or
enhancement. A number of companies around the world provide commercial
support for DOC software, however. DOC software is Y2K-compliant, as long as
the underlying OS platform is Y2K-compliant.
The names ACE(TM), TAO(TM), CIAO(TM), CoSMIC(TM), Washington University, UC Irvine,
and Vanderbilt University, may not be used to endorse or promote products or
services derived from this source without express written permission from
Washington University, UC Irvine, or Vanderbilt University. Further, products
or services derived from this source may not be called ACE(TM), TAO(TM), CIAO(TM),
or CoSMIC(TM) nor may the name Washington University, UC Irvine, or Vanderbilt
University appear in their names, without express written permission from
Washington University, UC Irvine, and Vanderbilt University.
*****************************************************************************
D) The following software may be included in this product: LibTomCrypt,
Author: Tom St. Denis. Use of any of this software is licensed under
PublicDomain. For more information, please visit http://libtomcrypt.org/.
*****************************************************************************
Copyright and Licensing Information for LibTomCrypt
LibTomCrypt is a fairly comprehensive, modular and portable cryptographic
toolkit that provides developers with a vast array of well known published
block ciphers, one-way hash functions, chaining modes, pseudo-random number
generators, public key cryptography and a plethora of other routines.
LibTomCrypt has been designed from the ground up to be very simple to use. It
has a modular and standard API that allows new ciphers, hashes and PRNGs to
be added or removed without change to the overall end application. It
features easy to use functions and a complete user manual which has many
source snippet examples.
LibTomCrypt is free for all purposes under the public domain. This includes
commercial use, redistribution and even branching.
@@ -0,0 +1,17 @@
[parameter]
ip=INADDR_ANY
port=623
session_timeout=30
power_off_timeout=50
#debug=off
#logpath=.
#sdrcache=enable
#sdrcache_path=.
#sol_loss_silent=0
#sol_loss_threshold=10
#set_boot_option=auto
#retry_count=10
#retry_interval=2
#user_interface=command
#max_session=1
#local_authentication=remote
@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29709.97
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dell_fans_controller", "dell_fans_controller\dell_fans_controller.csproj", "{01F9EA05-3303-4446-8E37-7B43C28238DC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{01F9EA05-3303-4446-8E37-7B43C28238DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{01F9EA05-3303-4446-8E37-7B43C28238DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{01F9EA05-3303-4446-8E37-7B43C28238DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{01F9EA05-3303-4446-8E37-7B43C28238DC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {40800FCE-106D-4C48-A549-E3CF823099A6}
EndGlobalSection
EndGlobal
@@ -0,0 +1,418 @@
namespace dell_fans_controller
{
partial class frmMain
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.grpMain = new System.Windows.Forms.GroupBox();
this.lblPassword = new System.Windows.Forms.Label();
this.txtPassword = new System.Windows.Forms.TextBox();
this.lblUser = new System.Windows.Forms.Label();
this.txtUser = new System.Windows.Forms.TextBox();
this.btnVisitDellService = new System.Windows.Forms.Button();
this.lblIp = new System.Windows.Forms.Label();
this.txtIp = new System.Windows.Forms.TextBox();
this.trkBarSpeed = new System.Windows.Forms.TrackBar();
this.btnReset = new System.Windows.Forms.Button();
this.btnSet = new System.Windows.Forms.Button();
this.nbrUpDownSpeed = new System.Windows.Forms.NumericUpDown();
this.lblTip = new System.Windows.Forms.Label();
this.lnkRepo = new System.Windows.Forms.LinkLabel();
this.label1 = new System.Windows.Forms.Label();
this.lnkMyWebsite = new System.Windows.Forms.LinkLabel();
this.label2 = new System.Windows.Forms.Label();
this.lstViewSensor = new System.Windows.Forms.ListView();
this.colKey = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colUnit = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colFaultThresholdMin = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colWarningThresholdMin = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colWarningThresholdMax = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colFaultThresholdMax = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colExtra = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.nbrUpDownAutoRefresh = new System.Windows.Forms.NumericUpDown();
this.lblAutoRefresh = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.btnRefreshNow = new System.Windows.Forms.Button();
this.grpMain.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.trkBarSpeed)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nbrUpDownSpeed)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nbrUpDownAutoRefresh)).BeginInit();
this.SuspendLayout();
//
// grpMain
//
this.grpMain.Controls.Add(this.lblPassword);
this.grpMain.Controls.Add(this.txtPassword);
this.grpMain.Controls.Add(this.lblUser);
this.grpMain.Controls.Add(this.txtUser);
this.grpMain.Controls.Add(this.btnVisitDellService);
this.grpMain.Controls.Add(this.lblIp);
this.grpMain.Controls.Add(this.txtIp);
this.grpMain.Controls.Add(this.trkBarSpeed);
this.grpMain.Controls.Add(this.btnReset);
this.grpMain.Controls.Add(this.btnSet);
this.grpMain.Controls.Add(this.nbrUpDownSpeed);
this.grpMain.Location = new System.Drawing.Point(12, 12);
this.grpMain.Name = "grpMain";
this.grpMain.Size = new System.Drawing.Size(600, 234);
this.grpMain.TabIndex = 1;
this.grpMain.TabStop = false;
this.grpMain.Text = "Fans Speed Control";
//
// lblPassword
//
this.lblPassword.AutoSize = true;
this.lblPassword.Location = new System.Drawing.Point(332, 37);
this.lblPassword.Name = "lblPassword";
this.lblPassword.Size = new System.Drawing.Size(53, 12);
this.lblPassword.TabIndex = 11;
this.lblPassword.Text = "Password";
//
// txtPassword
//
this.txtPassword.Location = new System.Drawing.Point(391, 34);
this.txtPassword.Name = "txtPassword";
this.txtPassword.PasswordChar = '*';
this.txtPassword.Size = new System.Drawing.Size(100, 21);
this.txtPassword.TabIndex = 10;
this.txtPassword.Text = "root";
this.txtPassword.LostFocus += new System.EventHandler(this.TxtPassword_LostFocus);
//
// lblUser
//
this.lblUser.AutoSize = true;
this.lblUser.Location = new System.Drawing.Point(172, 37);
this.lblUser.Name = "lblUser";
this.lblUser.Size = new System.Drawing.Size(29, 12);
this.lblUser.TabIndex = 9;
this.lblUser.Text = "User";
//
// txtUser
//
this.txtUser.Location = new System.Drawing.Point(207, 34);
this.txtUser.Name = "txtUser";
this.txtUser.Size = new System.Drawing.Size(100, 21);
this.txtUser.TabIndex = 8;
this.txtUser.Text = "root";
this.txtUser.LostFocus += new System.EventHandler(this.TxtUser_LostFocus);
//
// btnVisitDellService
//
this.btnVisitDellService.Location = new System.Drawing.Point(47, 72);
this.btnVisitDellService.Name = "btnVisitDellService";
this.btnVisitDellService.Size = new System.Drawing.Size(213, 21);
this.btnVisitDellService.TabIndex = 7;
this.btnVisitDellService.Text = "Visit Dell iDRAC WEB Console";
this.btnVisitDellService.UseVisualStyleBackColor = true;
this.btnVisitDellService.Click += new System.EventHandler(this.btnVisitDellService_Click);
//
// lblIp
//
this.lblIp.AutoSize = true;
this.lblIp.Location = new System.Drawing.Point(15, 37);
this.lblIp.Name = "lblIp";
this.lblIp.Size = new System.Drawing.Size(17, 12);
this.lblIp.TabIndex = 6;
this.lblIp.Text = "IP";
//
// txtIp
//
this.txtIp.Location = new System.Drawing.Point(47, 34);
this.txtIp.Name = "txtIp";
this.txtIp.Size = new System.Drawing.Size(100, 21);
this.txtIp.TabIndex = 5;
this.txtIp.Text = "192.168.0.1";
this.txtIp.LostFocus += new System.EventHandler(this.TxtIp_LostFocus);
//
// trkBarSpeed
//
this.trkBarSpeed.Location = new System.Drawing.Point(17, 116);
this.trkBarSpeed.Maximum = 100;
this.trkBarSpeed.Name = "trkBarSpeed";
this.trkBarSpeed.Size = new System.Drawing.Size(500, 45);
this.trkBarSpeed.TabIndex = 4;
this.trkBarSpeed.Scroll += new System.EventHandler(this.trkBarSpeed_Scroll);
//
// btnReset
//
this.btnReset.Location = new System.Drawing.Point(300, 167);
this.btnReset.Name = "btnReset";
this.btnReset.Size = new System.Drawing.Size(200, 40);
this.btnReset.TabIndex = 3;
this.btnReset.Text = "Reset to Auto Mode";
this.btnReset.UseVisualStyleBackColor = true;
this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
//
// btnSet
//
this.btnSet.Location = new System.Drawing.Point(41, 167);
this.btnSet.Name = "btnSet";
this.btnSet.Size = new System.Drawing.Size(200, 40);
this.btnSet.TabIndex = 2;
this.btnSet.Text = "Set Speed";
this.btnSet.UseVisualStyleBackColor = true;
this.btnSet.Click += new System.EventHandler(this.btnSet_Click);
//
// nbrUpDownSpeed
//
this.nbrUpDownSpeed.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.nbrUpDownSpeed.Location = new System.Drawing.Point(533, 116);
this.nbrUpDownSpeed.Name = "nbrUpDownSpeed";
this.nbrUpDownSpeed.Size = new System.Drawing.Size(50, 21);
this.nbrUpDownSpeed.TabIndex = 1;
this.nbrUpDownSpeed.ValueChanged += new System.EventHandler(this.nbrUpDownSpeed_ValueChanged);
//
// lblTip
//
this.lblTip.AutoSize = true;
this.lblTip.Location = new System.Drawing.Point(13, 267);
this.lblTip.Name = "lblTip";
this.lblTip.Size = new System.Drawing.Size(485, 36);
this.lblTip.TabIndex = 2;
this.lblTip.Text = "拖动上面的滑块为您需要的百分比数值,则服务器风扇转速将会固定为您指定的百分比数值\r\n(注意:风扇实际转速 = 风扇最高转速 * 该百分比数值,\r\n戴尔原厂标配12" +
"V电压规格的风扇最高转速通常为 12000 RPM";
//
// lnkRepo
//
this.lnkRepo.AutoSize = true;
this.lnkRepo.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
this.lnkRepo.Location = new System.Drawing.Point(10, 640);
this.lnkRepo.Name = "lnkRepo";
this.lnkRepo.Size = new System.Drawing.Size(281, 12);
this.lnkRepo.TabIndex = 3;
this.lnkRepo.TabStop = true;
this.lnkRepo.Text = "https://github.com/cw1997/dell_fans_controller";
this.lnkRepo.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkRepo_LinkClicked);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(13, 324);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(557, 24);
this.label1.TabIndex = 4;
this.label1.Text = "若需要恢复到自动转速模式,点击上面的“Reset to auto mode”即可\r\n自动转速模式下,由服务器内部的传感器根据温度情况自动调整转速,这也是戴尔服务器" +
"的出厂默认模式";
//
// lnkMyWebsite
//
this.lnkMyWebsite.AutoSize = true;
this.lnkMyWebsite.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
this.lnkMyWebsite.Location = new System.Drawing.Point(399, 640);
this.lnkMyWebsite.Name = "lnkMyWebsite";
this.lnkMyWebsite.Size = new System.Drawing.Size(113, 12);
this.lnkMyWebsite.TabIndex = 5;
this.lnkMyWebsite.TabStop = true;
this.lnkMyWebsite.Text = "http://changwei.me";
this.lnkMyWebsite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkMyWebsite_LinkClicked);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(523, 640);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(89, 12);
this.label2.TabIndex = 6;
this.label2.Text = "Code By cw1997";
//
// lstViewSensor
//
this.lstViewSensor.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.colKey,
this.colValue,
this.colUnit,
this.colStatus,
this.colFaultThresholdMin,
this.colWarningThresholdMin,
this.colWarningThresholdMax,
this.colFaultThresholdMax,
this.colExtra});
this.lstViewSensor.FullRowSelect = true;
this.lstViewSensor.GridLines = true;
this.lstViewSensor.HideSelection = false;
this.lstViewSensor.Location = new System.Drawing.Point(12, 395);
this.lstViewSensor.Name = "lstViewSensor";
this.lstViewSensor.Size = new System.Drawing.Size(600, 226);
this.lstViewSensor.TabIndex = 7;
this.lstViewSensor.UseCompatibleStateImageBehavior = false;
this.lstViewSensor.View = System.Windows.Forms.View.Details;
//
// colKey
//
this.colKey.Text = "Key";
this.colKey.Width = 100;
//
// colValue
//
this.colValue.Text = "Value";
this.colValue.Width = 100;
//
// colUnit
//
this.colUnit.Text = "Unit";
//
// colStatus
//
this.colStatus.Text = "Status";
//
// colFaultThresholdMin
//
this.colFaultThresholdMin.Text = "FaultThresholdMin";
this.colFaultThresholdMin.Width = 78;
//
// colWarningThresholdMin
//
this.colWarningThresholdMin.Text = "WarningThresholdMin";
this.colWarningThresholdMin.Width = 79;
//
// colWarningThresholdMax
//
this.colWarningThresholdMax.Text = "WarningThresholdMax";
this.colWarningThresholdMax.Width = 80;
//
// colFaultThresholdMax
//
this.colFaultThresholdMax.Text = "FaultThresholdMax";
this.colFaultThresholdMax.Width = 74;
//
// colExtra
//
this.colExtra.Text = "Extra";
//
// nbrUpDownAutoRefresh
//
this.nbrUpDownAutoRefresh.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.nbrUpDownAutoRefresh.Location = new System.Drawing.Point(132, 368);
this.nbrUpDownAutoRefresh.Name = "nbrUpDownAutoRefresh";
this.nbrUpDownAutoRefresh.Size = new System.Drawing.Size(50, 21);
this.nbrUpDownAutoRefresh.TabIndex = 12;
this.nbrUpDownAutoRefresh.Tag = " TODO: by cw1997 2020-06-24 22:58:37";
this.nbrUpDownAutoRefresh.Value = new decimal(new int[] {
20,
0,
0,
0});
this.nbrUpDownAutoRefresh.Visible = false;
//
// lblAutoRefresh
//
this.lblAutoRefresh.AutoSize = true;
this.lblAutoRefresh.Location = new System.Drawing.Point(13, 370);
this.lblAutoRefresh.Name = "lblAutoRefresh";
this.lblAutoRefresh.Size = new System.Drawing.Size(113, 12);
this.lblAutoRefresh.TabIndex = 12;
this.lblAutoRefresh.Text = "Auto Refresh Delay";
this.lblAutoRefresh.Visible = false;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(188, 370);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(53, 12);
this.label3.TabIndex = 13;
this.label3.Text = "(second)";
this.label3.Visible = false;
//
// btnRefreshNow
//
this.btnRefreshNow.Location = new System.Drawing.Point(433, 366);
this.btnRefreshNow.Name = "btnRefreshNow";
this.btnRefreshNow.Size = new System.Drawing.Size(179, 21);
this.btnRefreshNow.TabIndex = 12;
this.btnRefreshNow.Text = "Refresh Now";
this.btnRefreshNow.UseVisualStyleBackColor = true;
this.btnRefreshNow.Click += new System.EventHandler(this.btnRefreshNow_Click);
//
// frmMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(624, 661);
this.Controls.Add(this.btnRefreshNow);
this.Controls.Add(this.label3);
this.Controls.Add(this.lblAutoRefresh);
this.Controls.Add(this.nbrUpDownAutoRefresh);
this.Controls.Add(this.lstViewSensor);
this.Controls.Add(this.label2);
this.Controls.Add(this.lnkMyWebsite);
this.Controls.Add(this.label1);
this.Controls.Add(this.lnkRepo);
this.Controls.Add(this.lblTip);
this.Controls.Add(this.grpMain);
this.HelpButton = true;
this.MaximizeBox = false;
this.Name = "frmMain";
this.Text = "Dell Fans Speed Controller";
this.Load += new System.EventHandler(this.frmMain_Load);
this.grpMain.ResumeLayout(false);
this.grpMain.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.trkBarSpeed)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nbrUpDownSpeed)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nbrUpDownAutoRefresh)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.GroupBox grpMain;
private System.Windows.Forms.TrackBar trkBarSpeed;
private System.Windows.Forms.Button btnReset;
private System.Windows.Forms.Button btnSet;
private System.Windows.Forms.NumericUpDown nbrUpDownSpeed;
private System.Windows.Forms.Label lblTip;
private System.Windows.Forms.LinkLabel lnkRepo;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.LinkLabel lnkMyWebsite;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button btnVisitDellService;
private System.Windows.Forms.Label lblIp;
private System.Windows.Forms.TextBox txtIp;
private System.Windows.Forms.Label lblPassword;
private System.Windows.Forms.TextBox txtPassword;
private System.Windows.Forms.Label lblUser;
private System.Windows.Forms.TextBox txtUser;
private System.Windows.Forms.ListView lstViewSensor;
private System.Windows.Forms.ColumnHeader colValue;
private System.Windows.Forms.ColumnHeader colUnit;
private System.Windows.Forms.ColumnHeader colStatus;
private System.Windows.Forms.ColumnHeader colFaultThresholdMin;
private System.Windows.Forms.ColumnHeader colWarningThresholdMin;
private System.Windows.Forms.ColumnHeader colWarningThresholdMax;
private System.Windows.Forms.ColumnHeader colFaultThresholdMax;
private System.Windows.Forms.ColumnHeader colExtra;
private System.Windows.Forms.Label lblAutoRefresh;
private System.Windows.Forms.NumericUpDown nbrUpDownAutoRefresh;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Button btnRefreshNow;
private System.Windows.Forms.ColumnHeader colKey;
}
}
@@ -0,0 +1,207 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace dell_fans_controller
{
public partial class frmMain : Form
{
private static string version = "v1.0.0";
private static string currentPath = Application.StartupPath; // System.Environment.CurrentDirectory;
private static string configFileName = "\\config.ini";
private static string explorer = "explorer";
private static string ipmitoolPath = currentPath + "\\Dell\\SysMgt\\bmc\\ipmitool.exe";
private static string configFilePath = currentPath + configFileName;
private static string defaultIp = "127.0.0.1";
private static string defaultUser = "root";
private static string defaultPassword = "calvin";
private static string defaultConfigSection = "ipmi";
private static string execute(string parameter)
{
Process process = null;
string result = string.Empty;
try
{
process = new Process();
process.StartInfo.FileName = "cmd.exe";
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.RedirectStandardInput = true;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardError = true;
process.Start();
process.StandardInput.WriteLine(parameter + "& exit");
                process.StandardInput.AutoFlush = true;
result = process.StandardOutput.ReadToEnd();
process.WaitForExit();
process.Close();
return result;
}
catch (Exception ex)
{
Console.WriteLine("ExceptionOccurred:{ 0},{ 1}", ex.Message, ex.StackTrace.ToString());
return null;
}
}
private void saveConfig()
{
string ip = txtIp.Text;
string user = txtUser.Text;
string password = txtPassword.Text;
IniHelper.Write(defaultConfigSection, "ip", ip, configFilePath);
IniHelper.Write(defaultConfigSection, "user", user, configFilePath);
IniHelper.Write(defaultConfigSection, "password", password, configFilePath);
}
public frmMain()
{
InitializeComponent();
if (File.Exists(configFilePath))
{
string ip = IniHelper.Read(defaultConfigSection, "ip", defaultIp, configFilePath);
string user = IniHelper.Read(defaultConfigSection, "user", defaultUser, configFilePath);
string password = IniHelper.Read(defaultConfigSection, "password", defaultPassword, configFilePath);
txtIp.Text = ip;
txtUser.Text = user;
txtPassword.Text = password;
}
else
{
IniHelper.Write(defaultConfigSection, "ip", defaultIp, configFilePath);
IniHelper.Write(defaultConfigSection, "user", defaultUser, configFilePath);
IniHelper.Write(defaultConfigSection, "password", defaultPassword, configFilePath);
txtIp.Text = defaultIp;
txtUser.Text = defaultUser;
txtPassword.Text = defaultPassword;
}
}
private void nbrUpDownSpeed_ValueChanged(object sender, EventArgs e)
{
trkBarSpeed.Value = (int)nbrUpDownSpeed.Value;
}
private void btnReset_Click(object sender, EventArgs e)
{
string ip = txtIp.Text;
string user = txtUser.Text;
string password = txtPassword.Text;
string parametersReset = string.Format("-I lanplus -H {0} -U {1} -P {2} raw 0x30 0x30 0x01 0x01", ip, user, password);
string fullExecuteReset = ipmitoolPath + " " + parametersReset;
execute(fullExecuteReset);
}
private void btnSet_Click(object sender, EventArgs e)
{
string ip = txtIp.Text;
string user = txtUser.Text;
string password = txtPassword.Text;
string percent = nbrUpDownSpeed.Text;
int percentNum = int.Parse(percent);
// string format = "%s/Dell/SysMgt/bmc/ipmitool.exe -I lanplus -H %s -U %s -P %s raw 0x30 0x30 0x01";
string formatDisableAutoMode = "-I lanplus -H {0} -U {1} -P {2} raw 0x30 0x30 0x01 0x00";
string parametersDisableAutoMode = string.Format(formatDisableAutoMode, ip, user, password);
string fullExecuteDisableAutoMode = ipmitoolPath + " " + parametersDisableAutoMode;
string resultDisableAutoMode = execute(fullExecuteDisableAutoMode);
// format = "%s/Dell/SysMgt/bmc/ipmitool.exe -I lanplus -H %s -U %s -P %s raw 0x30 0x30 0x02 0xff 0x%02x";
string formatSetSpeed = "-I lanplus -H {0} -U {1} -P {2} raw 0x30 0x30 0x02 0xff 0x{3:x2}";
string parametersSetSpeed = string.Format(formatSetSpeed, ip, user, password, percentNum);
string fullExecuteSetSpeed = ipmitoolPath + " " + parametersSetSpeed;
string resultSetSpeed = execute(fullExecuteSetSpeed);
// MessageBox.Show(resultDisableAutoMode + "-" + resultSetSpeed);
//string cmdFormat = "/k \"{0} {1}\" & \"{2} {3}\"";
//string cmdParameters = string.Format(cmdFormat, ipmitoolPath, parametersDisableAutoMode, ipmitoolPath, parametersSetSpeed);
//Process.Start("cmd", cmdParameters);
}
private void lnkRepo_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start(explorer, lnkRepo.Text);
}
private void lnkMyWebsite_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start(explorer, lnkMyWebsite.Text);
}
private void btnVisitDellService_Click(object sender, EventArgs e)
{
Process.Start(explorer, "http://" + txtIp.Text);
}
private void trkBarSpeed_Scroll(object sender, EventArgs e)
{
nbrUpDownSpeed.Value = trkBarSpeed.Value;
}
private void btnRefreshNow_Click(object sender, EventArgs e)
{
string ip = txtIp.Text;
string user = txtUser.Text;
string password = txtPassword.Text;
string formatSensor = "-I lanplus -H {0} -U {1} -P {2} sensor";
string parametersSensor = string.Format(formatSensor, ip, user, password);
string fullExecuteSensor = ipmitoolPath + " " + parametersSensor;
string result = execute(fullExecuteSensor);
result = result.Replace("\r\n", "\n");
string[] sensorList = result.Split('\n', '\r');
lstViewSensor.Items.Clear();
foreach (var item in sensorList) {
if (item.Contains("Temp") || item.Contains("RPM") || item.Contains("Voltage") || item.Contains("Current")) {
lstViewSensor.Items.Add(new ListViewItem(item.Split('|')));
}
}
}
private void TxtIp_LostFocus(object sender, EventArgs e)
{
saveConfig();
}
private void TxtUser_LostFocus(object sender, EventArgs e)
{
saveConfig();
}
private void TxtPassword_LostFocus(object sender, EventArgs e)
{
saveConfig();
}
private void frmMain_Load(object sender, EventArgs e)
{
this.Text += " " + version;
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,90 @@
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace dell_fans_controller
{
public class IniHelper
{
public IniHelper()
{
}
/// <summary>
/// 为INI文件中指定的节点取得字符串
/// </summary>
/// <param name="lpAppName">欲在其中查找关键字的节点名称</param>
/// <param name="lpKeyName">欲获取的项名</param>
/// <param name="lpDefault">指定的项没有找到时返回的默认值</param>
/// <param name="lpReturnedString">指定一个字串缓冲区,长度至少为nSize</param>
/// <param name="nSize">指定装载到lpReturnedString缓冲区的最大字符数量</param>
/// <param name="lpFileName">INI文件完整路径</param>
/// <returns>复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中止字符</returns>
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);
/// <summary>
/// 修改INI文件中内容
/// </summary>
/// <param name="lpApplicationName">欲在其中写入的节点名称</param>
/// <param name="lpKeyName">欲设置的项名</param>
/// <param name="lpString">要写入的新字符串</param>
/// <param name="lpFileName">INI文件完整路径</param>
/// <returns>非零表示成功,零表示失败</returns>
[DllImport("kernel32")]
private static extern int WritePrivateProfileString(string lpApplicationName, string lpKeyName, string lpString, string lpFileName);
/// <summary>
/// 读取INI文件值
/// </summary>
/// <param name="section">节点名</param>
/// <param name="key">键</param>
/// <param name="def">未取到值时返回的默认值</param>
/// <param name="filePath">INI文件完整路径</param>
/// <returns>读取的值</returns>
public static string Read(string section, string key, string def, string filePath)
{
StringBuilder sb = new StringBuilder(1024);
GetPrivateProfileString(section, key, def, sb, 1024, filePath);
return sb.ToString();
}
/// <summary>
/// 写INI文件值
/// </summary>
/// <param name="section">欲在其中写入的节点名称</param>
/// <param name="key">欲设置的项名</param>
/// <param name="value">要写入的新字符串</param>
/// <param name="filePath">INI文件完整路径</param>
/// <returns>非零表示成功,零表示失败</returns>
public static int Write(string section, string key, string value, string filePath)
{
//CheckPath(filePath);
return WritePrivateProfileString(section, key, value, filePath);
}
/// <summary>
/// 删除节
/// </summary>
/// <param name="section">节点名</param>
/// <param name="filePath">INI文件完整路径</param>
/// <returns>非零表示成功,零表示失败</returns>
public static int DeleteSection(string section, string filePath)
{
return Write(section, null, null, filePath);
}
/// <summary>
/// 删除键的值
/// </summary>
/// <param name="section">节点名</param>
/// <param name="key">键名</param>
/// <param name="filePath">INI文件完整路径</param>
/// <returns>非零表示成功,零表示失败</returns>
public static int DeleteKey(string section, string key, string filePath)
{
return Write(section, key, null, filePath);
}
}
}
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace dell_fans_controller
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
}
}
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("dell_fans_controller")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("dell_fans_controller")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("01f9ea05-3303-4446-8e37-7b43c28238dc")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本: 4.0.30319.42000
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace dell_fans_controller.Properties
{
/// <summary>
/// 强类型资源类,用于查找本地化字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// 返回此类使用的缓存 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("dell_fans_controller.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 覆盖当前线程的 CurrentUICulture 属性
/// 使用此强类型的资源类的资源查找。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace dell_fans_controller.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{01F9EA05-3303-4446-8E37-7B43C28238DC}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>dell_fans_controller</RootNamespace>
<AssemblyName>dell_fans_controller</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>1</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>974FCA397D2202D377050D9C0E46AD199904D5B5</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>dell_fans_controller_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="FormMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormMain.Designer.cs">
<DependentUpon>FormMain.cs</DependentUpon>
</Compile>
<Compile Include="IniHelper.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="FormMain.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="dell_fans_controller_TemporaryKey.pfx" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>