diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ff94bb --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# NEU-IPGW + + +This is the program designed to easily pass NEU ip gateway. + + + diff --git a/ipgw_new.sln b/ipgw_new.sln new file mode 100644 index 0000000..a73dc39 --- /dev/null +++ b/ipgw_new.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.24720.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ipgw_new", "ipgw_new\ipgw_new.csproj", "{5D2ED149-E3E8-4C19-A46D-021867637EF9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5D2ED149-E3E8-4C19-A46D-021867637EF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D2ED149-E3E8-4C19-A46D-021867637EF9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D2ED149-E3E8-4C19-A46D-021867637EF9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D2ED149-E3E8-4C19-A46D-021867637EF9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ipgw_new/App.config b/ipgw_new/App.config new file mode 100644 index 0000000..d0feca6 --- /dev/null +++ b/ipgw_new/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/ipgw_new/ConfigForm.Designer.cs b/ipgw_new/ConfigForm.Designer.cs new file mode 100644 index 0000000..c17829b --- /dev/null +++ b/ipgw_new/ConfigForm.Designer.cs @@ -0,0 +1,219 @@ +namespace ipgw_new +{ + partial class ConfigForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigForm)); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.pwdBox = new System.Windows.Forms.TextBox(); + this.uidBox = new System.Windows.Forms.TextBox(); + this.linkOnStartCheckBox = new System.Windows.Forms.CheckBox(); + this.exitRadioButton = new System.Windows.Forms.RadioButton(); + this.minimumRadioButton = new System.Windows.Forms.RadioButton(); + this.label3 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.noneRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.minOnStartCheckBox = new System.Windows.Forms.CheckBox(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(33, 74); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(37, 15); + this.label2.TabIndex = 13; + this.label2.Text = "密码"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(18, 29); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(52, 15); + this.label1.TabIndex = 12; + this.label1.Text = "用户名"; + // + // button1 + // + this.button1.AutoSize = true; + this.button1.Location = new System.Drawing.Point(36, 298); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(77, 25); + this.button1.TabIndex = 11; + this.button1.Text = "保存配置"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // pwdBox + // + this.pwdBox.Location = new System.Drawing.Point(86, 69); + this.pwdBox.Name = "pwdBox"; + this.pwdBox.PasswordChar = '*'; + this.pwdBox.Size = new System.Drawing.Size(161, 25); + this.pwdBox.TabIndex = 10; + // + // uidBox + // + this.uidBox.Location = new System.Drawing.Point(86, 26); + this.uidBox.Name = "uidBox"; + this.uidBox.Size = new System.Drawing.Size(161, 25); + this.uidBox.TabIndex = 9; + // + // linkOnStartCheckBox + // + this.linkOnStartCheckBox.AutoSize = true; + this.linkOnStartCheckBox.Location = new System.Drawing.Point(38, 114); + this.linkOnStartCheckBox.Name = "linkOnStartCheckBox"; + this.linkOnStartCheckBox.Size = new System.Drawing.Size(164, 19); + this.linkOnStartCheckBox.TabIndex = 14; + this.linkOnStartCheckBox.Text = "启动程序时自动连接"; + this.linkOnStartCheckBox.UseVisualStyleBackColor = true; + // + // exitRadioButton + // + this.exitRadioButton.AutoSize = true; + this.exitRadioButton.Location = new System.Drawing.Point(6, 61); + this.exitRadioButton.Name = "exitRadioButton"; + this.exitRadioButton.Size = new System.Drawing.Size(88, 19); + this.exitRadioButton.TabIndex = 15; + this.exitRadioButton.TabStop = true; + this.exitRadioButton.Text = "退出程序"; + this.exitRadioButton.UseVisualStyleBackColor = true; + // + // minimumRadioButton + // + this.minimumRadioButton.AutoSize = true; + this.minimumRadioButton.Location = new System.Drawing.Point(6, 36); + this.minimumRadioButton.Name = "minimumRadioButton"; + this.minimumRadioButton.Size = new System.Drawing.Size(118, 19); + this.minimumRadioButton.TabIndex = 16; + this.minimumRadioButton.TabStop = true; + this.minimumRadioButton.Text = "最小化至托盘"; + this.minimumRadioButton.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(18, 174); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(127, 15); + this.label3.TabIndex = 17; + this.label3.Text = "单击关闭按钮时:"; + // + // panel1 + // + this.panel1.Controls.Add(this.noneRadioButton); + this.panel1.Controls.Add(this.minimumRadioButton); + this.panel1.Controls.Add(this.exitRadioButton); + this.panel1.Location = new System.Drawing.Point(83, 196); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(132, 96); + this.panel1.TabIndex = 18; + // + // noneRadioButton + // + this.noneRadioButton.AutoSize = true; + this.noneRadioButton.Location = new System.Drawing.Point(6, 11); + this.noneRadioButton.Name = "noneRadioButton"; + this.noneRadioButton.Size = new System.Drawing.Size(88, 19); + this.noneRadioButton.TabIndex = 17; + this.noneRadioButton.TabStop = true; + this.noneRadioButton.Text = "始终询问"; + this.noneRadioButton.UseVisualStyleBackColor = true; + // + // cancelButton + // + this.cancelButton.AutoSize = true; + this.cancelButton.Location = new System.Drawing.Point(170, 298); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(77, 25); + this.cancelButton.TabIndex = 19; + this.cancelButton.Text = "取消"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.button2_Click); + // + // minOnStartCheckBox + // + this.minOnStartCheckBox.AutoSize = true; + this.minOnStartCheckBox.Location = new System.Drawing.Point(38, 141); + this.minOnStartCheckBox.Name = "minOnStartCheckBox"; + this.minOnStartCheckBox.Size = new System.Drawing.Size(209, 19); + this.minOnStartCheckBox.TabIndex = 20; + this.minOnStartCheckBox.Text = "启动程序时自动隐藏至托盘"; + this.minOnStartCheckBox.UseVisualStyleBackColor = true; + // + // ConfigForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(282, 381); + this.ControlBox = false; + this.Controls.Add(this.minOnStartCheckBox); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.panel1); + this.Controls.Add(this.label3); + this.Controls.Add(this.linkOnStartCheckBox); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.button1); + this.Controls.Add(this.pwdBox); + this.Controls.Add(this.uidBox); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ConfigForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "设置"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox pwdBox; + private System.Windows.Forms.TextBox uidBox; + private System.Windows.Forms.CheckBox linkOnStartCheckBox; + private System.Windows.Forms.RadioButton exitRadioButton; + private System.Windows.Forms.RadioButton minimumRadioButton; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.RadioButton noneRadioButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.CheckBox minOnStartCheckBox; + } +} \ No newline at end of file diff --git a/ipgw_new/ConfigForm.cs b/ipgw_new/ConfigForm.cs new file mode 100644 index 0000000..ef0a306 --- /dev/null +++ b/ipgw_new/ConfigForm.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ipgw_new +{ + public partial class ConfigForm : Form + { + private ConfigHelper ch; + private ipgwConfig myconfig; + /// + /// 配置更改参数类 + /// + public class ConfigChangedEventArgs : EventArgs + { + public ipgwConfig myconfig { get; set; } + } + public delegate void ConfigChangedEventHandler(object sender, ConfigChangedEventArgs e); + public event ConfigChangedEventHandler ConfigChanged; + public ConfigForm() + { + InitializeComponent(); + this.ch = new ConfigHelper(); + //检查是否为首次启动 + if (ch.Check()) + { + this.myconfig = ch.LoadConfig(); + this.cancelButton.Enabled = true; + this.uidBox.Text = myconfig.uid; + this.pwdBox.Text = myconfig.pwd; + this.linkOnStartCheckBox.Checked = (myconfig.linkOnStart == "true"); + this.minOnStartCheckBox.Checked = (myconfig.minOnStart == "true"); + switch (myconfig.onClosing) + { + case "none": + this.noneRadioButton.Checked = true; + break; + case "exit": + this.exitRadioButton.Checked = true; + break; + case "minimum": + this.minimumRadioButton.Checked = true; + break; + } + } + else + { + this.cancelButton.Enabled = false; + this.myconfig = new ipgwConfig(); + } + } + + private void button1_Click(object sender, EventArgs e) + { + this.myconfig.uid = this.uidBox.Text; + this.myconfig.pwd = this.pwdBox.Text; + this.myconfig.linkOnStart = this.linkOnStartCheckBox.Checked ? "true" : "false"; + this.myconfig.minOnStart = this.minOnStartCheckBox.Checked ? "true" : "false"; + if (this.exitRadioButton.Checked) + this.myconfig.onClosing = "exit"; + else if (this.minimumRadioButton.Checked) + this.myconfig.onClosing = "minimum"; + else + this.myconfig.onClosing = "none"; + + ConfigChangedEventArgs e1 = new ConfigChangedEventArgs(); + e1.myconfig = this.myconfig; + //触发事件改变主窗体配置 + OnConfigChanged(e1); + //保存配置到文件 + ch.SaveConfig(this.myconfig); + + MessageBox.Show("保存成功"); + this.Close(); + } + /// + /// 触发事件的方法 + /// + /// + protected virtual void OnConfigChanged(ConfigChangedEventArgs e) + { + if (ConfigChanged != null) + ConfigChanged(this, e); + } + + private void button2_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/ipgw_new/ConfigForm.resx b/ipgw_new/ConfigForm.resx new file mode 100644 index 0000000..0d8165d --- /dev/null +++ b/ipgw_new/ConfigForm.resx @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + \ No newline at end of file diff --git a/ipgw_new/ConfigHelper.cs b/ipgw_new/ConfigHelper.cs new file mode 100644 index 0000000..b7d3bc4 --- /dev/null +++ b/ipgw_new/ConfigHelper.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; + +namespace ipgw_new +{ + /// + /// 读取或保存配置 + /// + class ConfigHelper + { + private string appdata; + public ConfigHelper() + { + this.appdata = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); + this.CreateDirectory(); + } + private void CreateDirectory() + { + if (!Directory.Exists(appdata + "/2645"))//如果不存在就创建2645文件夹 + { + Directory.CreateDirectory(appdata + "/2645"); + } + if (!Directory.Exists(appdata + "/2645/ipgw_new"))//如果不存在就创建ipgw_new文件夹 + { + Directory.CreateDirectory(appdata + "/2645/ipgw_new"); + } + } + public bool Check() + { + return File.Exists(appdata + "/2645/ipgw_new/ipgw.config"); + } + public bool SaveConfig(ipgwConfig myconfig) + { + XmlDocument xmldoc = new XmlDocument(); + xmldoc.CreateXmlDeclaration("1.0", "utf-8", null); + XmlElement root = xmldoc.CreateElement("ipgw"); + XmlElement node = xmldoc.CreateElement("uid"); + node.InnerText = myconfig.uid; + root.AppendChild(node); + node = xmldoc.CreateElement("pwd"); + node.InnerText = myconfig.pwd; + root.AppendChild(node); + node = xmldoc.CreateElement("linkOnStart"); + node.InnerText = myconfig.linkOnStart; + root.AppendChild(node); + node = xmldoc.CreateElement("minOnStart"); + node.InnerText = myconfig.minOnStart; + root.AppendChild(node); + node = xmldoc.CreateElement("onClosing"); + node.InnerText = myconfig.onClosing; + root.AppendChild(node); + + xmldoc.AppendChild(root); + try + { + xmldoc.Save(appdata + "/2645/ipgw_new/ipgw.config"); + } + catch(Exception e) + { + return false; + } + return true; + } + public ipgwConfig LoadConfig() + { + XmlDocument xmldoc = new XmlDocument(); + ipgwConfig myconfig = new ipgwConfig(); + xmldoc.Load(appdata + "/2645/ipgw_new/ipgw.config"); + XmlNode root = xmldoc.SelectSingleNode(xmldoc.DocumentElement.Name); + myconfig.uid = root.SelectSingleNode("uid").InnerText; + myconfig.pwd = root.SelectSingleNode("pwd").InnerText; + myconfig.linkOnStart = root.SelectSingleNode("linkOnStart").InnerText; + myconfig.minOnStart = root.SelectSingleNode("minOnStart").InnerText; + myconfig.onClosing = root.SelectSingleNode("onClosing").InnerText; + return myconfig; + } + } +} diff --git a/ipgw_new/MainForm.Designer.cs b/ipgw_new/MainForm.Designer.cs new file mode 100644 index 0000000..350a785 --- /dev/null +++ b/ipgw_new/MainForm.Designer.cs @@ -0,0 +1,202 @@ +namespace ipgw_new +{ + partial class MainForm + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.断开网络ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.连接网络ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.获取信息ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.显示窗口ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.退出ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.infoLable = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // notifyIcon1 + // + this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1; + this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); + this.notifyIcon1.Text = "IP控制网关"; + this.notifyIcon1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.断开网络ToolStripMenuItem, + this.连接网络ToolStripMenuItem, + this.获取信息ToolStripMenuItem, + this.toolStripSeparator1, + this.显示窗口ToolStripMenuItem, + this.退出ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(145, 140); + // + // 断开网络ToolStripMenuItem + // + this.断开网络ToolStripMenuItem.Name = "断开网络ToolStripMenuItem"; + this.断开网络ToolStripMenuItem.Size = new System.Drawing.Size(144, 26); + this.断开网络ToolStripMenuItem.Text = "断开网络"; + this.断开网络ToolStripMenuItem.Click += new System.EventHandler(this.断开网络ToolStripMenuItem_Click); + // + // 连接网络ToolStripMenuItem + // + this.连接网络ToolStripMenuItem.Name = "连接网络ToolStripMenuItem"; + this.连接网络ToolStripMenuItem.Size = new System.Drawing.Size(144, 26); + this.连接网络ToolStripMenuItem.Text = "连接网络"; + this.连接网络ToolStripMenuItem.Click += new System.EventHandler(this.连接网络ToolStripMenuItem_Click); + // + // 获取信息ToolStripMenuItem + // + this.获取信息ToolStripMenuItem.Name = "获取信息ToolStripMenuItem"; + this.获取信息ToolStripMenuItem.Size = new System.Drawing.Size(144, 26); + this.获取信息ToolStripMenuItem.Text = "获取信息"; + this.获取信息ToolStripMenuItem.Click += new System.EventHandler(this.获取信息ToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(141, 6); + // + // 显示窗口ToolStripMenuItem + // + this.显示窗口ToolStripMenuItem.Name = "显示窗口ToolStripMenuItem"; + this.显示窗口ToolStripMenuItem.Size = new System.Drawing.Size(144, 26); + this.显示窗口ToolStripMenuItem.Text = "显示窗口"; + this.显示窗口ToolStripMenuItem.Click += new System.EventHandler(this.显示窗口ToolStripMenuItem_Click); + // + // 退出ToolStripMenuItem + // + this.退出ToolStripMenuItem.Name = "退出ToolStripMenuItem"; + this.退出ToolStripMenuItem.Size = new System.Drawing.Size(144, 26); + this.退出ToolStripMenuItem.Text = "退出"; + this.退出ToolStripMenuItem.Click += new System.EventHandler(this.退出ToolStripMenuItem_Click); + // + // button2 + // + this.button2.AutoSize = true; + this.button2.Location = new System.Drawing.Point(267, 70); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(77, 25); + this.button2.TabIndex = 4; + this.button2.Text = "断开网络"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.AutoSize = true; + this.button3.Location = new System.Drawing.Point(267, 113); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(77, 25); + this.button3.TabIndex = 5; + this.button3.Text = "连接网络"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button4 + // + this.button4.AutoSize = true; + this.button4.Location = new System.Drawing.Point(267, 156); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(77, 25); + this.button4.TabIndex = 6; + this.button4.Text = "刷新信息"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // infoLable + // + this.infoLable.AutoSize = true; + this.infoLable.Font = new System.Drawing.Font("宋体", 10F); + this.infoLable.Location = new System.Drawing.Point(12, 70); + this.infoLable.Name = "infoLable"; + this.infoLable.Size = new System.Drawing.Size(112, 17); + this.infoLable.TabIndex = 9; + this.infoLable.Text = "欢迎使用ipgw"; + // + // button1 + // + this.button1.AutoSize = true; + this.button1.Location = new System.Drawing.Point(267, 26); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(77, 25); + this.button1.TabIndex = 10; + this.button1.Text = "设置"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(366, 213); + this.Controls.Add(this.button1); + this.Controls.Add(this.infoLable); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "MainForm"; + this.Text = "ipgw"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.NotifyIcon notifyIcon1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 显示窗口ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 退出ToolStripMenuItem; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Label infoLable; + private System.Windows.Forms.ToolStripMenuItem 断开网络ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 连接网络ToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem 获取信息ToolStripMenuItem; + private System.Windows.Forms.Button button1; + } +} + diff --git a/ipgw_new/MainForm.cs b/ipgw_new/MainForm.cs new file mode 100644 index 0000000..1d6fb68 --- /dev/null +++ b/ipgw_new/MainForm.cs @@ -0,0 +1,245 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ipgw_new +{ + public partial class MainForm : Form + { + private ConfigHelper ch; + private ipgwConfig myconfig; + private httpHelper hh; + private onClosingForm.onClosingEventArgs tempE; + private bool onClosingShown = false; + /// + /// 相应设置窗口改变设置事件 + /// + /// + /// + protected void ConfigChanged(object sender, ConfigForm.ConfigChangedEventArgs e) + { + this.myconfig = e.myconfig; + } + protected void onClosing(object sender, onClosingForm.onClosingEventArgs e) + { + this.tempE = e; + this.onClosingShown = true; + if(e.remember) + { + this.myconfig.onClosing = e.choice; + ch.SaveConfig(this.myconfig); + } + if (e.choice == "exit") + { + this.notifyIcon1.Visible = false; + this.Close(); + } + else + { + this.WindowState = FormWindowState.Minimized; + this.Visible = false; + this.notifyIcon1.Visible = true; + } + } + public MainForm() + { + InitializeComponent(); + this.ch = new ConfigHelper(); + this.myconfig = new ipgwConfig(); + this.hh = new httpHelper(); + this.tempE = new onClosingForm.onClosingEventArgs(); + //检查是否为首次启动 + if(ch.Check()) + { + this.myconfig = ch.LoadConfig(); + } + else + { + MessageBox.Show("欢迎使用IP控制网关!在开始之前,请进行简单的配置。", "欢迎", MessageBoxButtons.OK, MessageBoxIcon.Information); + this.button1_Click(new object(), new EventArgs()); + } + //若需要,自动最小化 + if(this.myconfig.minOnStart == "true") + { + this.Visible = false; + this.ShowInTaskbar = false; + this.WindowState = FormWindowState.Minimized; + this.notifyIcon1.Visible = true; + } + //若需要,进行自动连接 + if(this.myconfig.linkOnStart == "true") + { + this.hh.Logout(this.myconfig.uid, this.myconfig.pwd); + this.连接网络ToolStripMenuItem_Click(new object(), new EventArgs()); + this.获取信息ToolStripMenuItem_Click(new object(), new EventArgs()); + } + } + + /// + /// 退出前隐藏托盘图标防止残影 + /// + /// + /// + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + //判断是否需要弹出确认框 + if (!this.onClosingShown && this.myconfig.onClosing == "none") + { + onClosingForm f = new onClosingForm(this.myconfig); + f.onClosing += new onClosingForm.onClosingEventHandler(this.onClosing); + f.ShowDialog(); + } + //记住了选项 + if(this.myconfig.onClosing == "minimum") + { + this.WindowState = FormWindowState.Minimized; + this.Visible = false; + this.notifyIcon1.Visible = true; + e.Cancel = true; + return; + } + if (this.myconfig.onClosing == "exit") + { + e.Cancel = false; + return; + } + + //没有记住选项 + if (tempE.choice == "minimum") + { + this.onClosingShown = false; + e.Cancel = true; + } + else + e.Cancel = false; + } + + private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) + { + this.onClosingShown = true; + this.tempE.choice = "exit"; + this.myconfig.onClosing = "exit"; + this.Close(); + } + + private void 显示窗口ToolStripMenuItem_Click(object sender, EventArgs e) + { + this.ShowInTaskbar = true; + this.Visible = true; + this.WindowState = FormWindowState.Normal; + this.notifyIcon1.Visible = false; + } + + /// + /// 最小化隐藏窗口并显示托盘图标 + /// + /// + /// + private void Form1_SizeChanged(object sender, EventArgs e) + { + if(this.WindowState == FormWindowState.Minimized) + { + this.Visible = false; + this.notifyIcon1.Visible = true; + } + } + + private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) + { + if(e.Button == MouseButtons.Left) + { + this.显示窗口ToolStripMenuItem_Click(new object(), new EventArgs()); + } + } + + private void button2_Click(object sender, EventArgs e) + { + this.notifyIcon1.Text = "IP控制网关-已断开"; + if (this.hh.Logout(myconfig.uid, myconfig.pwd)) + MessageBox.Show("网络已断开", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + else + MessageBox.Show("网络断开失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + private void button3_Click(object sender, EventArgs e) + { + LoginResponse t = this.hh.Login(myconfig.uid, myconfig.pwd); + if (t.isSuccess) + { + MessageBox.Show("网络已连接", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + this.button4_Click(sender, e); + } + else + MessageBox.Show("网络连接失败," + t.info, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + private void button4_Click(object sender, EventArgs e) + { + InfoResponse t = this.hh.GetInfo(); + if (t.isSuccess) + { + string info = "已用流量:\t" + + (t.flowG == "0G" ? t.flowM : t.flowG + " " + t.flowM) + + "\r\n已用时长:\t" + t.time + + "\r\n账户余额:\t" + t.balance + + "\r\n当前IP地址:\t" + t.myip; + this.infoLable.Text = info; + this.notifyIcon1.Text = "IP控制网关-已用" + (t.flowG == "0G" ? t.flowM : t.flowG + " " + t.flowM); + } + else + MessageBox.Show("信息获取失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + private void 断开网络ToolStripMenuItem_Click(object sender, EventArgs e) + { + this.notifyIcon1.Text = "IP控制网关-已断开"; + if (this.hh.Logout(myconfig.uid, myconfig.pwd)) + this.notifyIcon1.ShowBalloonTip(5000, "网络已断开", "网络已断开", ToolTipIcon.Info); + else + this.notifyIcon1.ShowBalloonTip(5000, "网络断开失败", "网络断开失败", ToolTipIcon.Error); + } + + private void 连接网络ToolStripMenuItem_Click(object sender, EventArgs e) + { + LoginResponse t = this.hh.Login(myconfig.uid, myconfig.pwd); + if (t.isSuccess) + { + this.notifyIcon1.ShowBalloonTip(5000, "网络已连接", "网络已连接", ToolTipIcon.Info); + 获取信息ToolStripMenuItem_Click(sender, e); + } + else + this.notifyIcon1.ShowBalloonTip(5000, "网络连接失败", t.info, ToolTipIcon.Error); + } + + private void 获取信息ToolStripMenuItem_Click(object sender, EventArgs e) + { + InfoResponse t = this.hh.GetInfo(); + if (t.isSuccess) + { + string info = "已用流量:\t" + + (t.flowG == "0G" ? t.flowM : t.flowG + " " + t.flowM) + + "\r\n已用时长:\t" + t.time + + "\r\n账户余额:\t" + t.balance + + "\r\n当前IP地址:\t" + t.myip; + this.infoLable.Text = info; + this.notifyIcon1.Text = "IP控制网关-已用" + (t.flowG == "0G" ? t.flowM : t.flowG + " " + t.flowM); + this.notifyIcon1.ShowBalloonTip(5000, "账号信息", info, ToolTipIcon.Info); + } + else + this.notifyIcon1.ShowBalloonTip(5000, "信息获取失败", "信息获取失败", ToolTipIcon.Error); + } + + private void button1_Click(object sender, EventArgs e) + { + ConfigForm cf = new ConfigForm(); + cf.ConfigChanged += new ConfigForm.ConfigChangedEventHandler(ConfigChanged); + cf.ShowDialog(); + } + } +} diff --git a/ipgw_new/MainForm.resx b/ipgw_new/MainForm.resx new file mode 100644 index 0000000..f85f8d3 --- /dev/null +++ b/ipgw_new/MainForm.resx @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 157, 17 + + + + + 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 + + + \ No newline at end of file diff --git a/ipgw_new/Program.cs b/ipgw_new/Program.cs new file mode 100644 index 0000000..496958f --- /dev/null +++ b/ipgw_new/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ipgw_new +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/ipgw_new/Properties/AssemblyInfo.cs b/ipgw_new/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7ec3a4b --- /dev/null +++ b/ipgw_new/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("NEU-IPGW")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("NEU-IPGW")] +[assembly: AssemblyCopyright("Copyright © 2645 Studio 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("5d2ed149-e3e8-4c19-a46d-021867637ef9")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ipgw_new/Properties/Resources.Designer.cs b/ipgw_new/Properties/Resources.Designer.cs new file mode 100644 index 0000000..7847eac --- /dev/null +++ b/ipgw_new/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace ipgw_new.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 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() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ipgw_new.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 使用此强类型资源类,为所有资源查找 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找类似于 (Icon) 的 System.Drawing.Icon 类型的本地化资源。 + /// + internal static System.Drawing.Icon ipgw { + get { + object obj = ResourceManager.GetObject("ipgw", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/ipgw_new/Properties/Resources.resx b/ipgw_new/Properties/Resources.resx new file mode 100644 index 0000000..62e1b11 --- /dev/null +++ b/ipgw_new/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\resources\ipgw.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ipgw_new/Properties/Settings.Designer.cs b/ipgw_new/Properties/Settings.Designer.cs new file mode 100644 index 0000000..04c1df0 --- /dev/null +++ b/ipgw_new/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace ipgw_new.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.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; + } + } + } +} diff --git a/ipgw_new/Properties/Settings.settings b/ipgw_new/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/ipgw_new/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ipgw_new/Resources/ipgw.ico b/ipgw_new/Resources/ipgw.ico new file mode 100644 index 0000000..4afbb43 Binary files /dev/null and b/ipgw_new/Resources/ipgw.ico differ diff --git a/ipgw_new/httpHelper.cs b/ipgw_new/httpHelper.cs new file mode 100644 index 0000000..9a85871 --- /dev/null +++ b/ipgw_new/httpHelper.cs @@ -0,0 +1,216 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Diagnostics; +using System.Text; +using System.Threading.Tasks; +using System.IO; + +namespace ipgw_new +{ + /// + /// 连接网络返回结构体 + /// + struct LoginResponse + { + public bool isSuccess; + public string info; + public LoginResponse(bool isSuccess, string info) + { + this.isSuccess = isSuccess; + this.info = info; + } + }; + /// + /// 查询信息返回结构体 + /// + struct InfoResponse + { + public bool isSuccess; + public string flowG; + public string flowM; + public string time; + public string balance; + public string myip; + public InfoResponse(bool isSuccess = false) + { + this.isSuccess = isSuccess; + flowM = flowG = time = balance = myip = ""; + } + public InfoResponse(bool isSuccess, string[] myinfo) + { + this.isSuccess = isSuccess; + //格式化流量 + UInt64 flow = Convert.ToUInt64(myinfo[0]); + this.flowG = (flow / 1024 / 1024 / 1024).ToString() + "G"; + UInt64 uflowG = flow / 1024 / 1024 / 1024; + flow -= uflowG * 1024 * 1024 * 1024; + this.flowM = (flow / 1024 / 1024).ToString() + "M"; + //格式化时间 + TimeSpan mytime = new TimeSpan(0, 0, Convert.ToInt32(myinfo[1])); + this.time = mytime.Hours + "时" + mytime.Minutes + "分" + mytime.Seconds + "秒"; + + this.balance = "¥" + myinfo[2]; + + this.myip = myinfo[5]; + } + }; + class httpHelper + { + private CookieContainer myCookieContainer; + private string loginurl = "http://ipgw.neu.edu.cn:801/srun_portal_pc.php"; + private string logouturl = "http://ipgw.neu.edu.cn:801/include/auth_action.php"; + private string infourl = "http://ipgw.neu.edu.cn:801/include/auth_action.php"; + public httpHelper() + { + this.myCookieContainer = new CookieContainer(); + } + /// + /// 断开网络 + /// + /// 用户名 + /// 密码 + /// 是否成功 + public bool Logout(string uid, string pwd) + { + string postString = "username=" + uid + + "&password=" + pwd + "&action=logout&ajax=1"; + byte[] postData = Encoding.GetEncoding("GB2312").GetBytes(postString); + + HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(logouturl); + myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; + myHttpWebRequest.ContentLength = postData.Length; + myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"; + myHttpWebRequest.Accept = "*/*"; + myHttpWebRequest.Method = "POST"; + + try + { + myHttpWebRequest.GetRequestStream().Write(postData, 0, postData.Length); + } + catch(Exception ex) + { + return false; + } + + HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); + StreamReader streamReader = new StreamReader(myHttpWebResponse.GetResponseStream()); + string responseContent = streamReader.ReadToEnd(); + myHttpWebResponse.Close(); + streamReader.Close(); + Debug.WriteLine(responseContent); + + if (responseContent.Contains("网络已断开")) + return true; + else + return false; + } + + /// + /// 连接网络,获取信息,并保存Cookie + /// + /// + /// + /// 返回的信息 + public LoginResponse Login(string uid, string pwd) + { + string postString = "username=" + uid + "&password=" + pwd + + "&action=login&ac_id=1&user_ip=&nas_ip=&user_mac=&url=&save_me=0"; + byte[] postData = Encoding.GetEncoding("GB2312").GetBytes(postString); + + HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(loginurl); + myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; + myHttpWebRequest.ContentLength = postData.Length; + myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"; + myHttpWebRequest.Accept = "*/*"; + myHttpWebRequest.Method = "POST"; + myHttpWebRequest.CookieContainer = myCookieContainer; + + try + { + myHttpWebRequest.GetRequestStream().Write(postData, 0, postData.Length); + } + catch (Exception ex) + { + LoginResponse t = new LoginResponse(false, ex.ToString()); + return t; + } + + HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); + StreamReader streamReader = new StreamReader(myHttpWebResponse.GetResponseStream()); + string responseContent = streamReader.ReadToEnd(); + myHttpWebResponse.Close(); + streamReader.Close(); + Debug.WriteLine(responseContent); + Debug.WriteLine(myCookieContainer.GetCookieHeader(myHttpWebRequest.RequestUri)); + + if (responseContent.Contains("网络已连接")) + { + LoginResponse t = new LoginResponse(true, "网络已连接"); + return t; + } + else + { + string error = ""; + if (responseContent.Contains("E2531")) + error = "用户不存在"; + else if (responseContent.Contains("E2553")) + error = "密码错误"; + else if (responseContent.Contains("E2620")) + error = "您已经在线了"; + else if (responseContent.Contains("E2616")) + error = "您已欠费"; + else + error = "未知错误"; + LoginResponse t = new LoginResponse(false, error); + return t; + } + } + + public InfoResponse GetInfo() + { + Random myRandom = new Random(); + double k = myRandom.NextDouble() * (100000 + 1); + string postString = "k=" + k.ToString() + + "&action=get_online_info&key=" + k.ToString() + "&async=false"; + byte[] postData = Encoding.GetEncoding("GB2312").GetBytes(postString); + + HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(infourl); + myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; + myHttpWebRequest.ContentLength = postData.Length; + myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"; + myHttpWebRequest.Accept = "*/*"; + myHttpWebRequest.Method = "POST"; + myHttpWebRequest.CookieContainer = myCookieContainer; + + try + { + myHttpWebRequest.GetRequestStream().Write(postData, 0, postData.Length); + } + catch (Exception ex) + { + InfoResponse t1 = new InfoResponse(false); + return t1; + } + + HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); + StreamReader streamReader = new StreamReader(myHttpWebResponse.GetResponseStream()); + string responseContent = streamReader.ReadToEnd(); + myHttpWebResponse.Close(); + streamReader.Close(); + Debug.WriteLine(responseContent); + + if(responseContent == "not_online") + { + InfoResponse t1 = new InfoResponse(false); + return t1; + } + else + { + InfoResponse t = new InfoResponse(true, responseContent.Split(',')); + return t; + } + } + } +} diff --git a/ipgw_new/ipgw.ico b/ipgw_new/ipgw.ico new file mode 100644 index 0000000..4afbb43 Binary files /dev/null and b/ipgw_new/ipgw.ico differ diff --git a/ipgw_new/ipgwConfig.cs b/ipgw_new/ipgwConfig.cs new file mode 100644 index 0000000..bef113e --- /dev/null +++ b/ipgw_new/ipgwConfig.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ipgw_new +{ + /// + /// 配置类 + /// + public class ipgwConfig + { + /// + /// 用户名 + /// + public string uid { get; set; } + /// + /// 密码 + /// + public string pwd { get; set; } + /// + /// 启动时连接,true或false + /// + public string linkOnStart { get; set; } + /// + /// 启动时最小化至托盘,true或false + /// + public string minOnStart { get; set; } + /// + /// 关闭按钮的动作,none,exit或minimum + /// + public string onClosing { get; set; } + /// + /// 空构造 + /// + public ipgwConfig() + { + this.onClosing = "none"; + } + } +} diff --git a/ipgw_new/ipgw_new.csproj b/ipgw_new/ipgw_new.csproj new file mode 100644 index 0000000..2b0bd8d --- /dev/null +++ b/ipgw_new/ipgw_new.csproj @@ -0,0 +1,122 @@ + + + + + Debug + AnyCPU + {5D2ED149-E3E8-4C19-A46D-021867637EF9} + WinExe + Properties + ipgw_new + ipgw_new + v4.5.1 + 512 + true + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + ipgw.ico + + + + + + + + + + + + + + + + + Form + + + ConfigForm.cs + + + + Form + + + MainForm.cs + + + + + Form + + + onClosingForm.cs + + + + + ConfigForm.cs + + + MainForm.cs + + + onClosingForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + \ No newline at end of file diff --git a/ipgw_new/onClosingForm.Designer.cs b/ipgw_new/onClosingForm.Designer.cs new file mode 100644 index 0000000..76e462c --- /dev/null +++ b/ipgw_new/onClosingForm.Designer.cs @@ -0,0 +1,94 @@ +namespace ipgw_new +{ + partial class onClosingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(onClosingForm)); + this.exitButton = new System.Windows.Forms.Button(); + this.minimumButton = new System.Windows.Forms.Button(); + this.rememberCheckBox = new System.Windows.Forms.CheckBox(); + this.SuspendLayout(); + // + // exitButton + // + this.exitButton.AutoSize = true; + this.exitButton.Location = new System.Drawing.Point(24, 23); + this.exitButton.Name = "exitButton"; + this.exitButton.Size = new System.Drawing.Size(77, 25); + this.exitButton.TabIndex = 0; + this.exitButton.Text = "直接关闭"; + this.exitButton.UseVisualStyleBackColor = true; + this.exitButton.Click += new System.EventHandler(this.exitButton_Click); + // + // minimumButton + // + this.minimumButton.AutoSize = true; + this.minimumButton.Location = new System.Drawing.Point(151, 23); + this.minimumButton.Name = "minimumButton"; + this.minimumButton.Size = new System.Drawing.Size(113, 25); + this.minimumButton.TabIndex = 1; + this.minimumButton.Text = "最小化至托盘"; + this.minimumButton.UseVisualStyleBackColor = true; + this.minimumButton.Click += new System.EventHandler(this.minimumButton_Click); + // + // rememberCheckBox + // + this.rememberCheckBox.AutoSize = true; + this.rememberCheckBox.Location = new System.Drawing.Point(151, 69); + this.rememberCheckBox.Name = "rememberCheckBox"; + this.rememberCheckBox.Size = new System.Drawing.Size(119, 19); + this.rememberCheckBox.TabIndex = 2; + this.rememberCheckBox.Text = "记住我的选择"; + this.rememberCheckBox.UseVisualStyleBackColor = true; + // + // onClosingForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(320, 134); + this.ControlBox = false; + this.Controls.Add(this.rememberCheckBox); + this.Controls.Add(this.minimumButton); + this.Controls.Add(this.exitButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "onClosingForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "确认关闭吗?"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button exitButton; + private System.Windows.Forms.Button minimumButton; + private System.Windows.Forms.CheckBox rememberCheckBox; + } +} \ No newline at end of file diff --git a/ipgw_new/onClosingForm.cs b/ipgw_new/onClosingForm.cs new file mode 100644 index 0000000..1b0b3b1 --- /dev/null +++ b/ipgw_new/onClosingForm.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ipgw_new +{ + public partial class onClosingForm : Form + { + private ipgwConfig myconfig; + public class onClosingEventArgs : EventArgs + { + public bool remember { get; set; } + public string choice { get; set; } + } + public delegate void onClosingEventHandler(object sender, onClosingEventArgs e); + public event onClosingEventHandler onClosing; + public onClosingForm(ipgwConfig myconfig) + { + InitializeComponent(); + this.myconfig = myconfig; + } + /// + /// 触发事件的方法 + /// + /// + protected virtual void OnonClosing(onClosingEventArgs e) + { + if (onClosing != null) + onClosing(this, e); + } + + private void exitButton_Click(object sender, EventArgs e) + { + onClosingEventArgs e1 = new onClosingEventArgs(); + e1.choice = "exit"; + e1.remember = rememberCheckBox.Checked; + OnonClosing(e1); + this.Close(); + } + + private void minimumButton_Click(object sender, EventArgs e) + { + onClosingEventArgs e1 = new onClosingEventArgs(); + e1.choice = "minimum"; + e1.remember = rememberCheckBox.Checked; + OnonClosing(e1); + this.Close(); + } + } +} diff --git a/ipgw_new/onClosingForm.resx b/ipgw_new/onClosingForm.resx new file mode 100644 index 0000000..0d8165d --- /dev/null +++ b/ipgw_new/onClosingForm.resx @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + \ No newline at end of file