diff --git a/PortProxyGUI - NET/About.cs b/PortProxyGUI - NET/About.cs index de4243c..8106a60 100644 --- a/PortProxyGUI - NET/About.cs +++ b/PortProxyGUI - NET/About.cs @@ -1,6 +1,5 @@ using System; using System.Diagnostics; -using System.Reflection; using System.Windows.Forms; namespace PortProxyGUI diff --git a/PortProxyGUI - NET/PortProxyGUI - NET.csproj b/PortProxyGUI - NET/PortProxyGUI - NET.csproj index c371f90..fb2f641 100644 --- a/PortProxyGUI - NET/PortProxyGUI - NET.csproj +++ b/PortProxyGUI - NET/PortProxyGUI - NET.csproj @@ -25,6 +25,7 @@ <ApplicationRevision>0</ApplicationRevision> <ApplicationVersion>1.0.0.%2a</ApplicationVersion> <UseApplicationTrust>false</UseApplicationTrust> + <PublishWizardCompleted>true</PublishWizardCompleted> <BootstrapperEnabled>true</BootstrapperEnabled> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> @@ -52,6 +53,21 @@ <PropertyGroup> <ApplicationIcon>icon.ico</ApplicationIcon> </PropertyGroup> + <PropertyGroup> + <ManifestCertificateThumbprint>BEF27898E4C102E806F3241497048E740EC39033</ManifestCertificateThumbprint> + </PropertyGroup> + <PropertyGroup> + <ManifestKeyFile>PortProxyGUI - NET_TemporaryKey.pfx</ManifestKeyFile> + </PropertyGroup> + <PropertyGroup> + <GenerateManifests>false</GenerateManifests> + </PropertyGroup> + <PropertyGroup> + <SignManifests>true</SignManifests> + </PropertyGroup> + <PropertyGroup> + <TargetZone>LocalIntranet</TargetZone> + </PropertyGroup> <ItemGroup> <Reference Include="System" /> <Reference Include="System.Core" /> @@ -70,11 +86,11 @@ <Compile Include="About.Designer.cs"> <DependentUpon>About.cs</DependentUpon> </Compile> - <Compile Include="NewProxy.cs"> + <Compile Include="SetProxyForm.cs"> <SubType>Form</SubType> </Compile> - <Compile Include="NewProxy.Designer.cs"> - <DependentUpon>NewProxy.cs</DependentUpon> + <Compile Include="SetProxyForm.Designer.cs"> + <DependentUpon>SetProxyForm.cs</DependentUpon> </Compile> <Compile Include="PortProxyGUI.cs"> <SubType>Form</SubType> @@ -90,11 +106,11 @@ <EmbeddedResource Include="About.zh-CN.resx"> <DependentUpon>About.cs</DependentUpon> </EmbeddedResource> - <EmbeddedResource Include="NewProxy.resx"> - <DependentUpon>NewProxy.cs</DependentUpon> + <EmbeddedResource Include="SetProxyForm.resx"> + <DependentUpon>SetProxyForm.cs</DependentUpon> </EmbeddedResource> - <EmbeddedResource Include="NewProxy.zh-CN.resx"> - <DependentUpon>NewProxy.cs</DependentUpon> + <EmbeddedResource Include="SetProxyForm.zh-CN.resx"> + <DependentUpon>SetProxyForm.cs</DependentUpon> </EmbeddedResource> <EmbeddedResource Include="PortProxyGUI.resx"> <DependentUpon>PortProxyGUI.cs</DependentUpon> diff --git a/PortProxyGUI - NET/PortProxyGUI.Designer.cs b/PortProxyGUI - NET/PortProxyGUI.Designer.cs index 182071b..ad33b70 100644 --- a/PortProxyGUI - NET/PortProxyGUI.Designer.cs +++ b/PortProxyGUI - NET/PortProxyGUI.Designer.cs @@ -37,12 +37,13 @@ this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_Refresh = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); // @@ -61,6 +62,8 @@ this.listView1.Name = "listView1"; this.listView1.UseCompatibleStateImageBehavior = false; this.listView1.View = System.Windows.Forms.View.Details; + this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick); + this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick); this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp); // // columnHeader1 @@ -86,45 +89,51 @@ // contextMenuStrip1 // this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem1, - this.toolStripMenuItem2, + this.toolStripMenuItem_New, + this.toolStripMenuItem_Modify, + this.toolStripMenuItem_Delete, this.toolStripSeparator1, - this.toolStripMenuItem3, + this.toolStripMenuItem_Refresh, this.toolStripSeparator2, - this.toolStripMenuItem4}); + this.toolStripMenuItem_About}); this.contextMenuStrip1.Name = "contextMenuStrip1"; resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1"); this.contextMenuStrip1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.contextMenuStrip1_MouseClick); // - // toolStripMenuItem1 + // toolStripMenuItem_New // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); + this.toolStripMenuItem_New.Name = "toolStripMenuItem_New"; + resources.ApplyResources(this.toolStripMenuItem_New, "toolStripMenuItem_New"); // - // toolStripMenuItem2 + // toolStripMenuItem_Modify // - this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - resources.ApplyResources(this.toolStripMenuItem2, "toolStripMenuItem2"); + this.toolStripMenuItem_Modify.Name = "toolStripMenuItem_Modify"; + resources.ApplyResources(this.toolStripMenuItem_Modify, "toolStripMenuItem_Modify"); + // + // toolStripMenuItem_Delete + // + this.toolStripMenuItem_Delete.Name = "toolStripMenuItem_Delete"; + resources.ApplyResources(this.toolStripMenuItem_Delete, "toolStripMenuItem_Delete"); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); // - // toolStripMenuItem3 + // toolStripMenuItem_Refresh // - this.toolStripMenuItem3.Name = "toolStripMenuItem3"; - resources.ApplyResources(this.toolStripMenuItem3, "toolStripMenuItem3"); + this.toolStripMenuItem_Refresh.Name = "toolStripMenuItem_Refresh"; + resources.ApplyResources(this.toolStripMenuItem_Refresh, "toolStripMenuItem_Refresh"); // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); // - // toolStripMenuItem4 + // toolStripMenuItem_About // - this.toolStripMenuItem4.Name = "toolStripMenuItem4"; - resources.ApplyResources(this.toolStripMenuItem4, "toolStripMenuItem4"); + this.toolStripMenuItem_About.Name = "toolStripMenuItem_About"; + resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About"); // // PortProxyGUI // @@ -144,15 +153,16 @@ private System.Windows.Forms.ColumnHeader columnHeader1; private System.Windows.Forms.ColumnHeader columnHeader2; private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete; private System.Windows.Forms.ColumnHeader columnHeader3; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh; private System.Windows.Forms.ColumnHeader columnHeader4; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About; private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify; } } diff --git a/PortProxyGUI - NET/PortProxyGUI.cs b/PortProxyGUI - NET/PortProxyGUI.cs index 308b6a5..90218f2 100644 --- a/PortProxyGUI - NET/PortProxyGUI.cs +++ b/PortProxyGUI - NET/PortProxyGUI.cs @@ -10,12 +10,15 @@ namespace PortProxyGUI { public partial class PortProxyGUI : Form { - public NewProxy NewProxyForm; + public SetProxyForm SetProxyForm; public About AboutForm; + private ListViewColumnSorter lvwColumnSorter; public PortProxyGUI() { InitializeComponent(); + lvwColumnSorter = new ListViewColumnSorter(); + listView1.ListViewItemSorter = lvwColumnSorter; } private void PortProxyGUI_Load(object sender, EventArgs e) @@ -34,10 +37,23 @@ namespace PortProxyGUI var listenPort = subItems[2].Text; var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}"); } - RefreshProxyList(); } + private void SetProxyForUpdate(SetProxyForm form) + { + var item = listView1.SelectedItems.OfType<ListViewItem>().FirstOrDefault(); + { + var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray(); + var type = subItems[0].Text; + var listenOn = subItems[1].Text; + var listenPort = subItems[2].Text; + var connectTo = subItems[3].Text; + var connectPort = subItems[4].Text; + form.UseUpdateMode(type, listenOn, listenPort, connectTo, connectPort); + } + } + public void RefreshProxyList() { var output = CmdRunner.Execute("netsh interface portproxy show all"); @@ -88,19 +104,22 @@ namespace PortProxyGUI switch (selected.Text) { - case string s when s == toolStripMenuItem1.Text: - if (NewProxyForm == null) - { - NewProxyForm = new NewProxy(this); - NewProxyForm.Show(); - } - else NewProxyForm.Show(); + case string s when s == toolStripMenuItem_New.Text: + if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this); + SetProxyForm.UseNormalMode(); + SetProxyForm.Show(); break; - case string s when s == toolStripMenuItem3.Text: RefreshProxyList(); break; - case string s when s == toolStripMenuItem2.Text: DeleteSelectedProxies(); break; + case string s when s == toolStripMenuItem_Modify.Text: + if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this); + SetProxyForUpdate(SetProxyForm); + SetProxyForm.Show(); + break; - case string s when s == toolStripMenuItem4.Text: + case string s when s == toolStripMenuItem_Refresh.Text: RefreshProxyList(); break; + case string s when s == toolStripMenuItem_Delete.Text: DeleteSelectedProxies(); break; + + case string s when s == toolStripMenuItem_About.Text: if (AboutForm == null) { AboutForm = new About(this); @@ -116,10 +135,50 @@ namespace PortProxyGUI { if (sender is ListView _sender) { - if (e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any()) - toolStripMenuItem2.Enabled = true; - else toolStripMenuItem2.Enabled = false; + var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(); + toolStripMenuItem_Delete.Enabled = selectAny; + toolStripMenuItem_Modify.Enabled = selectAny; } } + + private void listView1_DoubleClick(object sender, EventArgs e) + { + if (sender is ListView _sender) + { + var selectAny = _sender.SelectedItems.OfType<ListViewItem>().Any(); + if (selectAny) + { + if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this); + SetProxyForUpdate(SetProxyForm); + SetProxyForm.Show(); + } + } + } + + private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) + { + // Determine if clicked column is already the column that is being sorted. + if (e.Column == lvwColumnSorter.SortColumn) + { + // Reverse the current sort direction for this column. + if (lvwColumnSorter.Order == SortOrder.Ascending) + { + lvwColumnSorter.Order = SortOrder.Descending; + } + else + { + lvwColumnSorter.Order = SortOrder.Ascending; + } + } + else + { + // Set the column number that is to be sorted; default to ascending. + lvwColumnSorter.SortColumn = e.Column; + lvwColumnSorter.Order = SortOrder.Ascending; + } + + // Perform the sort with these new sort options. + listView1.Sort(); + } } } diff --git a/PortProxyGUI - NET/PortProxyGUI.resx b/PortProxyGUI - NET/PortProxyGUI.resx index 9ca12d2..d4d4a1a 100644 --- a/PortProxyGUI - NET/PortProxyGUI.resx +++ b/PortProxyGUI - NET/PortProxyGUI.resx @@ -149,8 +149,44 @@ <value>17, 17</value> </metadata> <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_New.Text" xml:space="preserve"> + <value>New</value> + </data> + <data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_Modify.Text" xml:space="preserve"> + <value>Modify</value> + </data> + <data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_Delete.Text" xml:space="preserve"> + <value>Delete</value> + </data> + <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing"> + <value>177, 6</value> + </data> + <data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_Refresh.Text" xml:space="preserve"> + <value>Refresh</value> + </data> + <data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing"> + <value>177, 6</value> + </data> + <data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_About.Text" xml:space="preserve"> + <value>About</value> + </data> <data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing"> - <value>121, 104</value> + <value>181, 148</value> </data> <data name=">>contextMenuStrip1.Name" xml:space="preserve"> <value>contextMenuStrip1</value> @@ -186,36 +222,6 @@ <data name=">>listView1.ZOrder" xml:space="preserve"> <value>1</value> </data> - <data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing"> - <value>120, 22</value> - </data> - <data name="toolStripMenuItem1.Text" xml:space="preserve"> - <value>New</value> - </data> - <data name="toolStripMenuItem2.Size" type="System.Drawing.Size, System.Drawing"> - <value>120, 22</value> - </data> - <data name="toolStripMenuItem2.Text" xml:space="preserve"> - <value>Delete</value> - </data> - <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing"> - <value>117, 6</value> - </data> - <data name="toolStripMenuItem3.Size" type="System.Drawing.Size, System.Drawing"> - <value>120, 22</value> - </data> - <data name="toolStripMenuItem3.Text" xml:space="preserve"> - <value>Refresh</value> - </data> - <data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing"> - <value>117, 6</value> - </data> - <data name="toolStripMenuItem4.Size" type="System.Drawing.Size, System.Drawing"> - <value>120, 22</value> - </data> - <data name="toolStripMenuItem4.Text" xml:space="preserve"> - <value>About</value> - </data> <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <value>True</value> </metadata> @@ -2422,16 +2428,22 @@ <data name=">>columnHeader5.Type" xml:space="preserve"> <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>toolStripMenuItem1.Name" xml:space="preserve"> - <value>toolStripMenuItem1</value> + <data name=">>toolStripMenuItem_New.Name" xml:space="preserve"> + <value>toolStripMenuItem_New</value> </data> - <data name=">>toolStripMenuItem1.Type" xml:space="preserve"> + <data name=">>toolStripMenuItem_New.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>toolStripMenuItem2.Name" xml:space="preserve"> - <value>toolStripMenuItem2</value> + <data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve"> + <value>toolStripMenuItem_Modify</value> </data> - <data name=">>toolStripMenuItem2.Type" xml:space="preserve"> + <data name=">>toolStripMenuItem_Modify.Type" xml:space="preserve"> + <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve"> + <value>toolStripMenuItem_Delete</value> + </data> + <data name=">>toolStripMenuItem_Delete.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> <data name=">>toolStripSeparator1.Name" xml:space="preserve"> @@ -2440,10 +2452,10 @@ <data name=">>toolStripSeparator1.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>toolStripMenuItem3.Name" xml:space="preserve"> - <value>toolStripMenuItem3</value> + <data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve"> + <value>toolStripMenuItem_Refresh</value> </data> - <data name=">>toolStripMenuItem3.Type" xml:space="preserve"> + <data name=">>toolStripMenuItem_Refresh.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> <data name=">>toolStripSeparator2.Name" xml:space="preserve"> @@ -2452,10 +2464,10 @@ <data name=">>toolStripSeparator2.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>toolStripMenuItem4.Name" xml:space="preserve"> - <value>toolStripMenuItem4</value> + <data name=">>toolStripMenuItem_About.Name" xml:space="preserve"> + <value>toolStripMenuItem_About</value> </data> - <data name=">>toolStripMenuItem4.Type" xml:space="preserve"> + <data name=">>toolStripMenuItem_About.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> <data name=">>$this.Name" xml:space="preserve"> diff --git a/PortProxyGUI - NET/PortProxyGUI.zh-CN.resx b/PortProxyGUI - NET/PortProxyGUI.zh-CN.resx index 6653a22..575a979 100644 --- a/PortProxyGUI - NET/PortProxyGUI.zh-CN.resx +++ b/PortProxyGUI - NET/PortProxyGUI.zh-CN.resx @@ -164,7 +164,7 @@ <data name="listView1.Location" type="System.Drawing.Point, System.Drawing"> <value>0, 0</value> </data> - <data name="toolStripMenuItem2.Text" xml:space="preserve"> + <data name="toolStripMenuItem_Delete.Text" xml:space="preserve"> <value>删除</value> </data> <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing"> @@ -179,7 +179,7 @@ <data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"> <value>3, 2, 3, 2</value> </data> - <data name="toolStripMenuItem1.Text" xml:space="preserve"> + <data name="toolStripMenuItem_New.Text" xml:space="preserve"> <value>新建</value> </data> <data name=">>toolStripMenuItem1.Type" xml:space="preserve"> @@ -191,7 +191,7 @@ <data name=">>columnHeader1.Name" xml:space="preserve"> <value>columnHeader1</value> </data> - <data name="toolStripMenuItem3.Text" xml:space="preserve"> + <data name="toolStripMenuItem_Refresh.Text" xml:space="preserve"> <value>刷新</value> </data> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing"> @@ -243,7 +243,7 @@ <data name=">>toolStripSeparator1.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name="toolStripMenuItem4.Text" xml:space="preserve"> + <data name="toolStripMenuItem_About.Text" xml:space="preserve"> <value>关于</value> </data> <data name=">>toolStripMenuItem2.Name" xml:space="preserve"> @@ -309,4 +309,7 @@ <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib"> <value>zh-Hans</value> </data> + <data name="toolStripMenuItem_Modify.Text" xml:space="preserve"> + <value>修改</value> + </data> </root> \ No newline at end of file diff --git a/PortProxyGUI - NET/Properties/AssemblyInfo.cs b/PortProxyGUI - NET/Properties/AssemblyInfo.cs index 23a6dc3..2d3f136 100644 --- a/PortProxyGUI - NET/Properties/AssemblyInfo.cs +++ b/PortProxyGUI - NET/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.3.0")] -[assembly: AssemblyFileVersion("1.0.3.0")] +[assembly: AssemblyVersion("1.0.5.0")] +[assembly: AssemblyFileVersion("1.0.5.0")] diff --git a/PortProxyGUI - NET/NewProxy.Designer.cs b/PortProxyGUI - NET/SetProxyForm.Designer.cs similarity index 87% rename from PortProxyGUI - NET/NewProxy.Designer.cs rename to PortProxyGUI - NET/SetProxyForm.Designer.cs index b5ea27d..8fbfe1b 100644 --- a/PortProxyGUI - NET/NewProxy.Designer.cs +++ b/PortProxyGUI - NET/SetProxyForm.Designer.cs @@ -1,6 +1,6 @@ namespace PortProxyGUI { - partial class NewProxy + partial class SetProxyForm { /// <summary> /// Required designer variable. @@ -28,14 +28,14 @@ /// </summary> private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NewProxy)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SetProxyForm)); this.label1 = new System.Windows.Forms.Label(); this.textBox_listenOn = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.textBox_connectTo = new System.Windows.Forms.TextBox(); this.textBox_connectPort = new System.Windows.Forms.TextBox(); this.label3 = new System.Windows.Forms.Label(); - this.button1 = new System.Windows.Forms.Button(); + this.button_submit = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.textBox_listenPort = new System.Windows.Forms.TextBox(); @@ -72,12 +72,12 @@ resources.ApplyResources(this.label3, "label3"); this.label3.Name = "label3"; // - // button1 + // button_submit // - resources.ApplyResources(this.button1, "button1"); - this.button1.Name = "button1"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); + resources.ApplyResources(this.button_submit, "button_submit"); + this.button_submit.Name = "button_submit"; + this.button_submit.UseVisualStyleBackColor = true; + this.button_submit.Click += new System.EventHandler(this.button_submit_Click); // // label4 // @@ -106,16 +106,16 @@ resources.GetString("comboBox_type.Items4")}); this.comboBox_type.Name = "comboBox_type"; // - // NewProxy + // SetProxyForm // - this.AcceptButton = this.button1; + this.AcceptButton = this.button_submit; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.comboBox_type); this.Controls.Add(this.textBox_listenPort); this.Controls.Add(this.label5); this.Controls.Add(this.label4); - this.Controls.Add(this.button1); + this.Controls.Add(this.button_submit); this.Controls.Add(this.label3); this.Controls.Add(this.textBox_connectPort); this.Controls.Add(this.textBox_connectTo); @@ -125,10 +125,10 @@ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; - this.Name = "NewProxy"; + this.Name = "SetProxyForm"; this.TopMost = true; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.NewProxy_FormClosing); - this.Load += new System.EventHandler(this.NewProxy_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SetProxyForm_FormClosing); + this.Load += new System.EventHandler(this.SetProxyForm_Load); this.ResumeLayout(false); this.PerformLayout(); @@ -142,7 +142,7 @@ private System.Windows.Forms.TextBox textBox_connectTo; private System.Windows.Forms.TextBox textBox_connectPort; private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button_submit; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label5; private System.Windows.Forms.TextBox textBox_listenPort; diff --git a/PortProxyGUI - NET/NewProxy.cs b/PortProxyGUI - NET/SetProxyForm.cs similarity index 52% rename from PortProxyGUI - NET/NewProxy.cs rename to PortProxyGUI - NET/SetProxyForm.cs index a8814c0..39f5c2c 100644 --- a/PortProxyGUI - NET/NewProxy.cs +++ b/PortProxyGUI - NET/SetProxyForm.cs @@ -6,21 +6,48 @@ using System.Windows.Forms; namespace PortProxyGUI { - public partial class NewProxy : Form + public partial class SetProxyForm : Form { public readonly PortProxyGUI PortProxyGUI; - private string AutoString { get; } + public bool UpdateMode { get; private set; } + private string AutoTypeString { get; } - public NewProxy(PortProxyGUI portProxyGUI) + public SetProxyForm(PortProxyGUI portProxyGUI) { PortProxyGUI = portProxyGUI; InitializeComponent(); - AutoString = comboBox_type.Text = comboBox_type.Items.OfType<string>().First(); + AutoTypeString = comboBox_type.Text = comboBox_type.Items.OfType<string>().First(); } - private void AddPortProxy(string type, string listenOn, string listenPort, string connectTo, string connectPort) + public void UseNormalMode() { - var output = CmdRunner.Execute($"netsh interface portproxy add {type} listenaddress={listenOn} listenport={listenPort} connectaddress={connectTo} connectport={connectPort}"); + comboBox_type.Enabled = true; + textBox_listenOn.Enabled = true; + textBox_listenPort.Enabled = true; + comboBox_type.Text = AutoTypeString; + textBox_listenOn.Text = "*"; + textBox_listenPort.Text = ""; + textBox_connectTo.Text = ""; + textBox_connectPort.Text = ""; + UpdateMode = false; + } + + public void UseUpdateMode(string type, string listenOn, string listenPort, string connectTo, string connectPort) + { + comboBox_type.Enabled = false; + textBox_listenOn.Enabled = false; + textBox_listenPort.Enabled = false; + comboBox_type.Text = type; + textBox_listenOn.Text = listenOn; + textBox_listenPort.Text = listenPort; + textBox_connectTo.Text = connectTo; + textBox_connectPort.Text = connectPort; + UpdateMode = true; + } + + private void SetPortProxy(string type, string action, string listenOn, string listenPort, string connectTo, string connectPort) + { + var output = CmdRunner.Execute($"netsh interface portproxy {action} {type} listenaddress={listenOn} listenport={listenPort} connectaddress={connectTo} connectport={connectPort}"); Invoke((Action)(() => PortProxyGUI.RefreshProxyList())); } @@ -40,7 +67,7 @@ namespace PortProxyGUI return $"{from}to{to}"; } - private void button1_Click(object sender, EventArgs e) + private void button_submit_Click(object sender, EventArgs e) { var type = comboBox_type.Text.Trim(); var listenOn = textBox_listenOn.Text.Trim().ToLower(); @@ -60,7 +87,7 @@ namespace PortProxyGUI return; } - if (type == AutoString) type = GetPassType(listenOn, connectTo); + if (type == AutoTypeString) type = GetPassType(listenOn, connectTo); if (!new[] { "v4tov4", "v4tov6", "v6tov4", "v6tov6" }.Contains(type)) { @@ -68,16 +95,19 @@ namespace PortProxyGUI return; } - AddPortProxy(type, listenOn, listenPort, connectTo, connectPort); + SetPortProxy(type, UpdateMode ? "set" : "add", listenOn, listenPort, connectTo, connectPort); + Close(); } - private void NewProxy_Load(object sender, EventArgs e) + private void SetProxyForm_Load(object sender, EventArgs e) { + Top = PortProxyGUI.Top + (PortProxyGUI.Height - Height) / 2; + Left = PortProxyGUI.Left + (PortProxyGUI.Width - Width) / 2; } - private void NewProxy_FormClosing(object sender, FormClosingEventArgs e) + private void SetProxyForm_FormClosing(object sender, FormClosingEventArgs e) { - PortProxyGUI.NewProxyForm = null; + PortProxyGUI.SetProxyForm = null; } } diff --git a/PortProxyGUI/NewProxy.resx b/PortProxyGUI - NET/SetProxyForm.resx similarity index 99% rename from PortProxyGUI/NewProxy.resx rename to PortProxyGUI - NET/SetProxyForm.resx index 2b93f0b..c6e8f82 100644 --- a/PortProxyGUI/NewProxy.resx +++ b/PortProxyGUI - NET/SetProxyForm.resx @@ -285,28 +285,28 @@ <data name=">>label3.ZOrder" xml:space="preserve"> <value>5</value> </data> - <data name="button1.Location" type="System.Drawing.Point, System.Drawing"> + <data name="button_submit.Location" type="System.Drawing.Point, System.Drawing"> <value>227, 62</value> </data> - <data name="button1.Size" type="System.Drawing.Size, System.Drawing"> + <data name="button_submit.Size" type="System.Drawing.Size, System.Drawing"> <value>74, 22</value> </data> - <data name="button1.TabIndex" type="System.Int32, mscorlib"> + <data name="button_submit.TabIndex" type="System.Int32, mscorlib"> <value>6</value> </data> - <data name="button1.Text" xml:space="preserve"> - <value>Add</value> + <data name="button_submit.Text" xml:space="preserve"> + <value>Set</value> </data> - <data name=">>button1.Name" xml:space="preserve"> - <value>button1</value> + <data name=">>button_submit.Name" xml:space="preserve"> + <value>button_submit</value> </data> - <data name=">>button1.Type" xml:space="preserve"> + <data name=">>button_submit.Type" xml:space="preserve"> <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>button1.Parent" xml:space="preserve"> + <data name=">>button_submit.Parent" xml:space="preserve"> <value>$this</value> </data> - <data name=">>button1.ZOrder" xml:space="preserve"> + <data name=">>button_submit.ZOrder" xml:space="preserve"> <value>4</value> </data> <data name="label4.AutoSize" type="System.Boolean, mscorlib"> @@ -2603,13 +2603,13 @@ <value>3, 2, 3, 2</value> </data> <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms"> - <value>CenterScreen</value> + <value>Manual</value> </data> <data name="$this.Text" xml:space="preserve"> - <value>New Proxy</value> + <value>Set Proxy</value> </data> <data name=">>$this.Name" xml:space="preserve"> - <value>NewProxy</value> + <value>SetProxyForm</value> </data> <data name=">>$this.Type" xml:space="preserve"> <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> diff --git a/PortProxyGUI/NewProxy.zh-CN.resx b/PortProxyGUI - NET/SetProxyForm.zh-CN.resx similarity index 99% rename from PortProxyGUI/NewProxy.zh-CN.resx rename to PortProxyGUI - NET/SetProxyForm.zh-CN.resx index 27fe0b0..2dbaeb4 100644 --- a/PortProxyGUI/NewProxy.zh-CN.resx +++ b/PortProxyGUI - NET/SetProxyForm.zh-CN.resx @@ -201,8 +201,8 @@ <data name=">>label3.ZOrder" xml:space="preserve"> <value>5</value> </data> - <data name="button1.Text" xml:space="preserve"> - <value>添加</value> + <data name="button_submit.Text" xml:space="preserve"> + <value>设置</value> </data> <data name=">>button1.Name" xml:space="preserve"> <value>button1</value> @@ -283,7 +283,7 @@ <value>0</value> </data> <data name="$this.Text" xml:space="preserve"> - <value>新建映射</value> + <value>设置映射</value> </data> <data name=">>$this.Name" xml:space="preserve"> <value>NewProxy</value> diff --git a/PortProxyGUI - NET/app.manifest b/PortProxyGUI - NET/app.manifest index 169e618..06dba89 100644 --- a/PortProxyGUI - NET/app.manifest +++ b/PortProxyGUI - NET/app.manifest @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> - <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> + <assemblyIdentity version="1.0.0.0" name="MyApplication.app" /> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> @@ -16,35 +16,31 @@ Remove this element if your application requires this virtualization for backwards compatibility. --> - <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> + <applicationRequestMinimum> + <PermissionSet Unrestricted="true" ID="Custom" SameSite="site" /> + <defaultAssemblyRequest permissionSetReference="Custom" /> + </applicationRequestMinimum> </security> </trustInfo> - <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- A list of the Windows versions that this application has been tested on and is designed to work with. Uncomment the appropriate elements and Windows will automatically select the most compatible environment. --> - <!-- Windows Vista --> <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> - <!-- Windows 7 --> <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />--> - <!-- Windows 8 --> <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />--> - <!-- Windows 8.1 --> <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />--> - <!-- Windows 10 --> <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />--> - </application> </compatibility> - <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should @@ -56,7 +52,6 @@ </windowsSettings> </application> --> - <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) --> <!-- <dependency> @@ -72,5 +67,4 @@ </dependentAssembly> </dependency> --> - -</assembly> +</assembly> \ No newline at end of file diff --git a/PortProxyGUI.Shared/ListViewColumnSorter.cs b/PortProxyGUI.Shared/ListViewColumnSorter.cs new file mode 100644 index 0000000..2738154 --- /dev/null +++ b/PortProxyGUI.Shared/ListViewColumnSorter.cs @@ -0,0 +1,105 @@ +using System.Collections; +using System.Windows.Forms; + +namespace PortProxyGUI +{ + public class ListViewColumnSorter : IComparer + { + /// <summary> + /// Specifies the column to be sorted + /// </summary> + private int ColumnToSort; + + /// <summary> + /// Specifies the order in which to sort (i.e. 'Ascending'). + /// </summary> + private SortOrder OrderOfSort; + + /// <summary> + /// Case insensitive comparer object + /// </summary> + private CaseInsensitiveComparer ObjectCompare; + + /// <summary> + /// Class constructor. Initializes various elements + /// </summary> + public ListViewColumnSorter() + { + // Initialize the column to '0' + ColumnToSort = 0; + + // Initialize the sort order to 'none' + OrderOfSort = SortOrder.None; + + // Initialize the CaseInsensitiveComparer object + ObjectCompare = new CaseInsensitiveComparer(); + } + + /// <summary> + /// This method is inherited from the IComparer interface. It compares the two objects passed using a case insensitive comparison. + /// </summary> + /// <param name="x">First object to be compared</param> + /// <param name="y">Second object to be compared</param> + /// <returns>The result of the comparison. "0" if equal, negative if 'x' is less than 'y' and positive if 'x' is greater than 'y'</returns> + public int Compare(object x, object y) + { + int compareResult; + ListViewItem listviewX, listviewY; + + // Cast the objects to be compared to ListViewItem objects + listviewX = (ListViewItem)x; + listviewY = (ListViewItem)y; + + // Compare the two items + compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text); + + // Calculate correct return value based on object comparison + if (OrderOfSort == SortOrder.Ascending) + { + // Ascending sort is selected, return normal result of compare operation + return compareResult; + } + else if (OrderOfSort == SortOrder.Descending) + { + // Descending sort is selected, return negative result of compare operation + return (-compareResult); + } + else + { + // Return '0' to indicate they are equal + return 0; + } + } + + /// <summary> + /// Gets or sets the number of the column to which to apply the sorting operation (Defaults to '0'). + /// </summary> + public int SortColumn + { + set + { + ColumnToSort = value; + } + get + { + return ColumnToSort; + } + } + + /// <summary> + /// Gets or sets the order of sorting to apply (for example, 'Ascending' or 'Descending'). + /// </summary> + public SortOrder Order + { + set + { + OrderOfSort = value; + } + get + { + return OrderOfSort; + } + } + + } +} diff --git a/PortProxyGUI.Shared/PortProxyGUI.Shared.projitems b/PortProxyGUI.Shared/PortProxyGUI.Shared.projitems index 7f9be85..c6f32f7 100644 --- a/PortProxyGUI.Shared/PortProxyGUI.Shared.projitems +++ b/PortProxyGUI.Shared/PortProxyGUI.Shared.projitems @@ -10,6 +10,7 @@ </PropertyGroup> <ItemGroup> <Compile Include="$(MSBuildThisFileDirectory)CmdRunner.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)ListViewColumnSorter.cs" /> <Compile Include="$(MSBuildThisFileDirectory)PortProxy.cs" /> <Compile Include="$(MSBuildThisFileDirectory)ProxyType.cs" /> <Compile Include="$(MSBuildThisFileDirectory)~extern\NStandard\XString.cs" /> diff --git a/PortProxyGUI/About.cs b/PortProxyGUI/About.cs index de4243c..8106a60 100644 --- a/PortProxyGUI/About.cs +++ b/PortProxyGUI/About.cs @@ -1,6 +1,5 @@ using System; using System.Diagnostics; -using System.Reflection; using System.Windows.Forms; namespace PortProxyGUI diff --git a/PortProxyGUI/PortProxyGUI.Designer.cs b/PortProxyGUI/PortProxyGUI.Designer.cs index 182071b..ad33b70 100644 --- a/PortProxyGUI/PortProxyGUI.Designer.cs +++ b/PortProxyGUI/PortProxyGUI.Designer.cs @@ -37,12 +37,13 @@ this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_Refresh = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); // @@ -61,6 +62,8 @@ this.listView1.Name = "listView1"; this.listView1.UseCompatibleStateImageBehavior = false; this.listView1.View = System.Windows.Forms.View.Details; + this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick); + this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick); this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp); // // columnHeader1 @@ -86,45 +89,51 @@ // contextMenuStrip1 // this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem1, - this.toolStripMenuItem2, + this.toolStripMenuItem_New, + this.toolStripMenuItem_Modify, + this.toolStripMenuItem_Delete, this.toolStripSeparator1, - this.toolStripMenuItem3, + this.toolStripMenuItem_Refresh, this.toolStripSeparator2, - this.toolStripMenuItem4}); + this.toolStripMenuItem_About}); this.contextMenuStrip1.Name = "contextMenuStrip1"; resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1"); this.contextMenuStrip1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.contextMenuStrip1_MouseClick); // - // toolStripMenuItem1 + // toolStripMenuItem_New // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); + this.toolStripMenuItem_New.Name = "toolStripMenuItem_New"; + resources.ApplyResources(this.toolStripMenuItem_New, "toolStripMenuItem_New"); // - // toolStripMenuItem2 + // toolStripMenuItem_Modify // - this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - resources.ApplyResources(this.toolStripMenuItem2, "toolStripMenuItem2"); + this.toolStripMenuItem_Modify.Name = "toolStripMenuItem_Modify"; + resources.ApplyResources(this.toolStripMenuItem_Modify, "toolStripMenuItem_Modify"); + // + // toolStripMenuItem_Delete + // + this.toolStripMenuItem_Delete.Name = "toolStripMenuItem_Delete"; + resources.ApplyResources(this.toolStripMenuItem_Delete, "toolStripMenuItem_Delete"); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); // - // toolStripMenuItem3 + // toolStripMenuItem_Refresh // - this.toolStripMenuItem3.Name = "toolStripMenuItem3"; - resources.ApplyResources(this.toolStripMenuItem3, "toolStripMenuItem3"); + this.toolStripMenuItem_Refresh.Name = "toolStripMenuItem_Refresh"; + resources.ApplyResources(this.toolStripMenuItem_Refresh, "toolStripMenuItem_Refresh"); // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); // - // toolStripMenuItem4 + // toolStripMenuItem_About // - this.toolStripMenuItem4.Name = "toolStripMenuItem4"; - resources.ApplyResources(this.toolStripMenuItem4, "toolStripMenuItem4"); + this.toolStripMenuItem_About.Name = "toolStripMenuItem_About"; + resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About"); // // PortProxyGUI // @@ -144,15 +153,16 @@ private System.Windows.Forms.ColumnHeader columnHeader1; private System.Windows.Forms.ColumnHeader columnHeader2; private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete; private System.Windows.Forms.ColumnHeader columnHeader3; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh; private System.Windows.Forms.ColumnHeader columnHeader4; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About; private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify; } } diff --git a/PortProxyGUI/PortProxyGUI.cs b/PortProxyGUI/PortProxyGUI.cs index 308b6a5..90218f2 100644 --- a/PortProxyGUI/PortProxyGUI.cs +++ b/PortProxyGUI/PortProxyGUI.cs @@ -10,12 +10,15 @@ namespace PortProxyGUI { public partial class PortProxyGUI : Form { - public NewProxy NewProxyForm; + public SetProxyForm SetProxyForm; public About AboutForm; + private ListViewColumnSorter lvwColumnSorter; public PortProxyGUI() { InitializeComponent(); + lvwColumnSorter = new ListViewColumnSorter(); + listView1.ListViewItemSorter = lvwColumnSorter; } private void PortProxyGUI_Load(object sender, EventArgs e) @@ -34,10 +37,23 @@ namespace PortProxyGUI var listenPort = subItems[2].Text; var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}"); } - RefreshProxyList(); } + private void SetProxyForUpdate(SetProxyForm form) + { + var item = listView1.SelectedItems.OfType<ListViewItem>().FirstOrDefault(); + { + var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray(); + var type = subItems[0].Text; + var listenOn = subItems[1].Text; + var listenPort = subItems[2].Text; + var connectTo = subItems[3].Text; + var connectPort = subItems[4].Text; + form.UseUpdateMode(type, listenOn, listenPort, connectTo, connectPort); + } + } + public void RefreshProxyList() { var output = CmdRunner.Execute("netsh interface portproxy show all"); @@ -88,19 +104,22 @@ namespace PortProxyGUI switch (selected.Text) { - case string s when s == toolStripMenuItem1.Text: - if (NewProxyForm == null) - { - NewProxyForm = new NewProxy(this); - NewProxyForm.Show(); - } - else NewProxyForm.Show(); + case string s when s == toolStripMenuItem_New.Text: + if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this); + SetProxyForm.UseNormalMode(); + SetProxyForm.Show(); break; - case string s when s == toolStripMenuItem3.Text: RefreshProxyList(); break; - case string s when s == toolStripMenuItem2.Text: DeleteSelectedProxies(); break; + case string s when s == toolStripMenuItem_Modify.Text: + if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this); + SetProxyForUpdate(SetProxyForm); + SetProxyForm.Show(); + break; - case string s when s == toolStripMenuItem4.Text: + case string s when s == toolStripMenuItem_Refresh.Text: RefreshProxyList(); break; + case string s when s == toolStripMenuItem_Delete.Text: DeleteSelectedProxies(); break; + + case string s when s == toolStripMenuItem_About.Text: if (AboutForm == null) { AboutForm = new About(this); @@ -116,10 +135,50 @@ namespace PortProxyGUI { if (sender is ListView _sender) { - if (e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any()) - toolStripMenuItem2.Enabled = true; - else toolStripMenuItem2.Enabled = false; + var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(); + toolStripMenuItem_Delete.Enabled = selectAny; + toolStripMenuItem_Modify.Enabled = selectAny; } } + + private void listView1_DoubleClick(object sender, EventArgs e) + { + if (sender is ListView _sender) + { + var selectAny = _sender.SelectedItems.OfType<ListViewItem>().Any(); + if (selectAny) + { + if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this); + SetProxyForUpdate(SetProxyForm); + SetProxyForm.Show(); + } + } + } + + private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) + { + // Determine if clicked column is already the column that is being sorted. + if (e.Column == lvwColumnSorter.SortColumn) + { + // Reverse the current sort direction for this column. + if (lvwColumnSorter.Order == SortOrder.Ascending) + { + lvwColumnSorter.Order = SortOrder.Descending; + } + else + { + lvwColumnSorter.Order = SortOrder.Ascending; + } + } + else + { + // Set the column number that is to be sorted; default to ascending. + lvwColumnSorter.SortColumn = e.Column; + lvwColumnSorter.Order = SortOrder.Ascending; + } + + // Perform the sort with these new sort options. + listView1.Sort(); + } } } diff --git a/PortProxyGUI/PortProxyGUI.csproj b/PortProxyGUI/PortProxyGUI.csproj index 81e14d2..bb71042 100644 --- a/PortProxyGUI/PortProxyGUI.csproj +++ b/PortProxyGUI/PortProxyGUI.csproj @@ -14,7 +14,7 @@ <PackageTags>portproxy TCP/IP redirector</PackageTags> <PackageLicenseFile>LICENSE.md</PackageLicenseFile> <Copyright>Copyright © nstandard.net 2020</Copyright> - <Version>1.0.3</Version> + <Version>1.0.5</Version> <ApplicationIcon>icon.ico</ApplicationIcon> </PropertyGroup> @@ -42,18 +42,18 @@ <Compile Update="About.Designer.cs"> <DependentUpon>About.cs</DependentUpon> </Compile> - <Compile Update="NewProxy.cs"> - <SubType>Form</SubType> - </Compile> - <Compile Update="NewProxy.Designer.cs"> - <DependentUpon>NewProxy.cs</DependentUpon> - </Compile> <Compile Update="PortProxyGUI.cs"> <SubType>Form</SubType> </Compile> <Compile Update="PortProxyGUI.Designer.cs"> <DependentUpon>PortProxyGUI.cs</DependentUpon> </Compile> + <Compile Update="SetProxyForm.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Update="SetProxyForm.Designer.cs"> + <DependentUpon>SetProxyForm.cs</DependentUpon> + </Compile> </ItemGroup> <ItemGroup> @@ -63,18 +63,18 @@ <EmbeddedResource Update="About.zh-CN.resx"> <DependentUpon>About.cs</DependentUpon> </EmbeddedResource> - <EmbeddedResource Update="NewProxy.resx"> - <DependentUpon>NewProxy.cs</DependentUpon> - </EmbeddedResource> - <EmbeddedResource Update="NewProxy.zh-CN.resx"> - <DependentUpon>NewProxy.cs</DependentUpon> - </EmbeddedResource> <EmbeddedResource Update="PortProxyGUI.resx"> <DependentUpon>PortProxyGUI.cs</DependentUpon> </EmbeddedResource> <EmbeddedResource Update="PortProxyGUI.zh-CN.resx"> <DependentUpon>PortProxyGUI.cs</DependentUpon> </EmbeddedResource> + <EmbeddedResource Update="SetProxyForm.resx"> + <DependentUpon>SetProxyForm.cs</DependentUpon> + </EmbeddedResource> + <EmbeddedResource Update="SetProxyForm.zh-CN.resx"> + <DependentUpon>SetProxyForm.cs</DependentUpon> + </EmbeddedResource> </ItemGroup> <Import Project="..\PortProxyGUI.Shared\PortProxyGUI.Shared.projitems" Label="Shared" /> diff --git a/PortProxyGUI/PortProxyGUI.resx b/PortProxyGUI/PortProxyGUI.resx index 9ca12d2..d4d4a1a 100644 --- a/PortProxyGUI/PortProxyGUI.resx +++ b/PortProxyGUI/PortProxyGUI.resx @@ -149,8 +149,44 @@ <value>17, 17</value> </metadata> <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_New.Text" xml:space="preserve"> + <value>New</value> + </data> + <data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_Modify.Text" xml:space="preserve"> + <value>Modify</value> + </data> + <data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_Delete.Text" xml:space="preserve"> + <value>Delete</value> + </data> + <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing"> + <value>177, 6</value> + </data> + <data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_Refresh.Text" xml:space="preserve"> + <value>Refresh</value> + </data> + <data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing"> + <value>177, 6</value> + </data> + <data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing"> + <value>180, 22</value> + </data> + <data name="toolStripMenuItem_About.Text" xml:space="preserve"> + <value>About</value> + </data> <data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing"> - <value>121, 104</value> + <value>181, 148</value> </data> <data name=">>contextMenuStrip1.Name" xml:space="preserve"> <value>contextMenuStrip1</value> @@ -186,36 +222,6 @@ <data name=">>listView1.ZOrder" xml:space="preserve"> <value>1</value> </data> - <data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing"> - <value>120, 22</value> - </data> - <data name="toolStripMenuItem1.Text" xml:space="preserve"> - <value>New</value> - </data> - <data name="toolStripMenuItem2.Size" type="System.Drawing.Size, System.Drawing"> - <value>120, 22</value> - </data> - <data name="toolStripMenuItem2.Text" xml:space="preserve"> - <value>Delete</value> - </data> - <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing"> - <value>117, 6</value> - </data> - <data name="toolStripMenuItem3.Size" type="System.Drawing.Size, System.Drawing"> - <value>120, 22</value> - </data> - <data name="toolStripMenuItem3.Text" xml:space="preserve"> - <value>Refresh</value> - </data> - <data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing"> - <value>117, 6</value> - </data> - <data name="toolStripMenuItem4.Size" type="System.Drawing.Size, System.Drawing"> - <value>120, 22</value> - </data> - <data name="toolStripMenuItem4.Text" xml:space="preserve"> - <value>About</value> - </data> <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <value>True</value> </metadata> @@ -2422,16 +2428,22 @@ <data name=">>columnHeader5.Type" xml:space="preserve"> <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>toolStripMenuItem1.Name" xml:space="preserve"> - <value>toolStripMenuItem1</value> + <data name=">>toolStripMenuItem_New.Name" xml:space="preserve"> + <value>toolStripMenuItem_New</value> </data> - <data name=">>toolStripMenuItem1.Type" xml:space="preserve"> + <data name=">>toolStripMenuItem_New.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>toolStripMenuItem2.Name" xml:space="preserve"> - <value>toolStripMenuItem2</value> + <data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve"> + <value>toolStripMenuItem_Modify</value> </data> - <data name=">>toolStripMenuItem2.Type" xml:space="preserve"> + <data name=">>toolStripMenuItem_Modify.Type" xml:space="preserve"> + <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve"> + <value>toolStripMenuItem_Delete</value> + </data> + <data name=">>toolStripMenuItem_Delete.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> <data name=">>toolStripSeparator1.Name" xml:space="preserve"> @@ -2440,10 +2452,10 @@ <data name=">>toolStripSeparator1.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>toolStripMenuItem3.Name" xml:space="preserve"> - <value>toolStripMenuItem3</value> + <data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve"> + <value>toolStripMenuItem_Refresh</value> </data> - <data name=">>toolStripMenuItem3.Type" xml:space="preserve"> + <data name=">>toolStripMenuItem_Refresh.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> <data name=">>toolStripSeparator2.Name" xml:space="preserve"> @@ -2452,10 +2464,10 @@ <data name=">>toolStripSeparator2.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>toolStripMenuItem4.Name" xml:space="preserve"> - <value>toolStripMenuItem4</value> + <data name=">>toolStripMenuItem_About.Name" xml:space="preserve"> + <value>toolStripMenuItem_About</value> </data> - <data name=">>toolStripMenuItem4.Type" xml:space="preserve"> + <data name=">>toolStripMenuItem_About.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> <data name=">>$this.Name" xml:space="preserve"> diff --git a/PortProxyGUI/PortProxyGUI.zh-CN.resx b/PortProxyGUI/PortProxyGUI.zh-CN.resx index 6653a22..575a979 100644 --- a/PortProxyGUI/PortProxyGUI.zh-CN.resx +++ b/PortProxyGUI/PortProxyGUI.zh-CN.resx @@ -164,7 +164,7 @@ <data name="listView1.Location" type="System.Drawing.Point, System.Drawing"> <value>0, 0</value> </data> - <data name="toolStripMenuItem2.Text" xml:space="preserve"> + <data name="toolStripMenuItem_Delete.Text" xml:space="preserve"> <value>删除</value> </data> <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing"> @@ -179,7 +179,7 @@ <data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"> <value>3, 2, 3, 2</value> </data> - <data name="toolStripMenuItem1.Text" xml:space="preserve"> + <data name="toolStripMenuItem_New.Text" xml:space="preserve"> <value>新建</value> </data> <data name=">>toolStripMenuItem1.Type" xml:space="preserve"> @@ -191,7 +191,7 @@ <data name=">>columnHeader1.Name" xml:space="preserve"> <value>columnHeader1</value> </data> - <data name="toolStripMenuItem3.Text" xml:space="preserve"> + <data name="toolStripMenuItem_Refresh.Text" xml:space="preserve"> <value>刷新</value> </data> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing"> @@ -243,7 +243,7 @@ <data name=">>toolStripSeparator1.Type" xml:space="preserve"> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name="toolStripMenuItem4.Text" xml:space="preserve"> + <data name="toolStripMenuItem_About.Text" xml:space="preserve"> <value>关于</value> </data> <data name=">>toolStripMenuItem2.Name" xml:space="preserve"> @@ -309,4 +309,7 @@ <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib"> <value>zh-Hans</value> </data> + <data name="toolStripMenuItem_Modify.Text" xml:space="preserve"> + <value>修改</value> + </data> </root> \ No newline at end of file diff --git a/PortProxyGUI/Program.cs b/PortProxyGUI/Program.cs index f4a74cb..240cd83 100644 --- a/PortProxyGUI/Program.cs +++ b/PortProxyGUI/Program.cs @@ -1,4 +1,6 @@ using System; +using System.Globalization; +using System.Threading; using System.Windows.Forms; namespace PortProxyGUI diff --git a/PortProxyGUI/NewProxy.Designer.cs b/PortProxyGUI/SetProxyForm.Designer.cs similarity index 87% rename from PortProxyGUI/NewProxy.Designer.cs rename to PortProxyGUI/SetProxyForm.Designer.cs index b5ea27d..8fbfe1b 100644 --- a/PortProxyGUI/NewProxy.Designer.cs +++ b/PortProxyGUI/SetProxyForm.Designer.cs @@ -1,6 +1,6 @@ namespace PortProxyGUI { - partial class NewProxy + partial class SetProxyForm { /// <summary> /// Required designer variable. @@ -28,14 +28,14 @@ /// </summary> private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NewProxy)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SetProxyForm)); this.label1 = new System.Windows.Forms.Label(); this.textBox_listenOn = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.textBox_connectTo = new System.Windows.Forms.TextBox(); this.textBox_connectPort = new System.Windows.Forms.TextBox(); this.label3 = new System.Windows.Forms.Label(); - this.button1 = new System.Windows.Forms.Button(); + this.button_submit = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.textBox_listenPort = new System.Windows.Forms.TextBox(); @@ -72,12 +72,12 @@ resources.ApplyResources(this.label3, "label3"); this.label3.Name = "label3"; // - // button1 + // button_submit // - resources.ApplyResources(this.button1, "button1"); - this.button1.Name = "button1"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); + resources.ApplyResources(this.button_submit, "button_submit"); + this.button_submit.Name = "button_submit"; + this.button_submit.UseVisualStyleBackColor = true; + this.button_submit.Click += new System.EventHandler(this.button_submit_Click); // // label4 // @@ -106,16 +106,16 @@ resources.GetString("comboBox_type.Items4")}); this.comboBox_type.Name = "comboBox_type"; // - // NewProxy + // SetProxyForm // - this.AcceptButton = this.button1; + this.AcceptButton = this.button_submit; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.comboBox_type); this.Controls.Add(this.textBox_listenPort); this.Controls.Add(this.label5); this.Controls.Add(this.label4); - this.Controls.Add(this.button1); + this.Controls.Add(this.button_submit); this.Controls.Add(this.label3); this.Controls.Add(this.textBox_connectPort); this.Controls.Add(this.textBox_connectTo); @@ -125,10 +125,10 @@ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; - this.Name = "NewProxy"; + this.Name = "SetProxyForm"; this.TopMost = true; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.NewProxy_FormClosing); - this.Load += new System.EventHandler(this.NewProxy_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SetProxyForm_FormClosing); + this.Load += new System.EventHandler(this.SetProxyForm_Load); this.ResumeLayout(false); this.PerformLayout(); @@ -142,7 +142,7 @@ private System.Windows.Forms.TextBox textBox_connectTo; private System.Windows.Forms.TextBox textBox_connectPort; private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button_submit; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label5; private System.Windows.Forms.TextBox textBox_listenPort; diff --git a/PortProxyGUI/NewProxy.cs b/PortProxyGUI/SetProxyForm.cs similarity index 52% rename from PortProxyGUI/NewProxy.cs rename to PortProxyGUI/SetProxyForm.cs index a8814c0..39f5c2c 100644 --- a/PortProxyGUI/NewProxy.cs +++ b/PortProxyGUI/SetProxyForm.cs @@ -6,21 +6,48 @@ using System.Windows.Forms; namespace PortProxyGUI { - public partial class NewProxy : Form + public partial class SetProxyForm : Form { public readonly PortProxyGUI PortProxyGUI; - private string AutoString { get; } + public bool UpdateMode { get; private set; } + private string AutoTypeString { get; } - public NewProxy(PortProxyGUI portProxyGUI) + public SetProxyForm(PortProxyGUI portProxyGUI) { PortProxyGUI = portProxyGUI; InitializeComponent(); - AutoString = comboBox_type.Text = comboBox_type.Items.OfType<string>().First(); + AutoTypeString = comboBox_type.Text = comboBox_type.Items.OfType<string>().First(); } - private void AddPortProxy(string type, string listenOn, string listenPort, string connectTo, string connectPort) + public void UseNormalMode() { - var output = CmdRunner.Execute($"netsh interface portproxy add {type} listenaddress={listenOn} listenport={listenPort} connectaddress={connectTo} connectport={connectPort}"); + comboBox_type.Enabled = true; + textBox_listenOn.Enabled = true; + textBox_listenPort.Enabled = true; + comboBox_type.Text = AutoTypeString; + textBox_listenOn.Text = "*"; + textBox_listenPort.Text = ""; + textBox_connectTo.Text = ""; + textBox_connectPort.Text = ""; + UpdateMode = false; + } + + public void UseUpdateMode(string type, string listenOn, string listenPort, string connectTo, string connectPort) + { + comboBox_type.Enabled = false; + textBox_listenOn.Enabled = false; + textBox_listenPort.Enabled = false; + comboBox_type.Text = type; + textBox_listenOn.Text = listenOn; + textBox_listenPort.Text = listenPort; + textBox_connectTo.Text = connectTo; + textBox_connectPort.Text = connectPort; + UpdateMode = true; + } + + private void SetPortProxy(string type, string action, string listenOn, string listenPort, string connectTo, string connectPort) + { + var output = CmdRunner.Execute($"netsh interface portproxy {action} {type} listenaddress={listenOn} listenport={listenPort} connectaddress={connectTo} connectport={connectPort}"); Invoke((Action)(() => PortProxyGUI.RefreshProxyList())); } @@ -40,7 +67,7 @@ namespace PortProxyGUI return $"{from}to{to}"; } - private void button1_Click(object sender, EventArgs e) + private void button_submit_Click(object sender, EventArgs e) { var type = comboBox_type.Text.Trim(); var listenOn = textBox_listenOn.Text.Trim().ToLower(); @@ -60,7 +87,7 @@ namespace PortProxyGUI return; } - if (type == AutoString) type = GetPassType(listenOn, connectTo); + if (type == AutoTypeString) type = GetPassType(listenOn, connectTo); if (!new[] { "v4tov4", "v4tov6", "v6tov4", "v6tov6" }.Contains(type)) { @@ -68,16 +95,19 @@ namespace PortProxyGUI return; } - AddPortProxy(type, listenOn, listenPort, connectTo, connectPort); + SetPortProxy(type, UpdateMode ? "set" : "add", listenOn, listenPort, connectTo, connectPort); + Close(); } - private void NewProxy_Load(object sender, EventArgs e) + private void SetProxyForm_Load(object sender, EventArgs e) { + Top = PortProxyGUI.Top + (PortProxyGUI.Height - Height) / 2; + Left = PortProxyGUI.Left + (PortProxyGUI.Width - Width) / 2; } - private void NewProxy_FormClosing(object sender, FormClosingEventArgs e) + private void SetProxyForm_FormClosing(object sender, FormClosingEventArgs e) { - PortProxyGUI.NewProxyForm = null; + PortProxyGUI.SetProxyForm = null; } } diff --git a/PortProxyGUI - NET/NewProxy.resx b/PortProxyGUI/SetProxyForm.resx similarity index 99% rename from PortProxyGUI - NET/NewProxy.resx rename to PortProxyGUI/SetProxyForm.resx index 2b93f0b..c6e8f82 100644 --- a/PortProxyGUI - NET/NewProxy.resx +++ b/PortProxyGUI/SetProxyForm.resx @@ -285,28 +285,28 @@ <data name=">>label3.ZOrder" xml:space="preserve"> <value>5</value> </data> - <data name="button1.Location" type="System.Drawing.Point, System.Drawing"> + <data name="button_submit.Location" type="System.Drawing.Point, System.Drawing"> <value>227, 62</value> </data> - <data name="button1.Size" type="System.Drawing.Size, System.Drawing"> + <data name="button_submit.Size" type="System.Drawing.Size, System.Drawing"> <value>74, 22</value> </data> - <data name="button1.TabIndex" type="System.Int32, mscorlib"> + <data name="button_submit.TabIndex" type="System.Int32, mscorlib"> <value>6</value> </data> - <data name="button1.Text" xml:space="preserve"> - <value>Add</value> + <data name="button_submit.Text" xml:space="preserve"> + <value>Set</value> </data> - <data name=">>button1.Name" xml:space="preserve"> - <value>button1</value> + <data name=">>button_submit.Name" xml:space="preserve"> + <value>button_submit</value> </data> - <data name=">>button1.Type" xml:space="preserve"> + <data name=">>button_submit.Type" xml:space="preserve"> <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>button1.Parent" xml:space="preserve"> + <data name=">>button_submit.Parent" xml:space="preserve"> <value>$this</value> </data> - <data name=">>button1.ZOrder" xml:space="preserve"> + <data name=">>button_submit.ZOrder" xml:space="preserve"> <value>4</value> </data> <data name="label4.AutoSize" type="System.Boolean, mscorlib"> @@ -2603,13 +2603,13 @@ <value>3, 2, 3, 2</value> </data> <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms"> - <value>CenterScreen</value> + <value>Manual</value> </data> <data name="$this.Text" xml:space="preserve"> - <value>New Proxy</value> + <value>Set Proxy</value> </data> <data name=">>$this.Name" xml:space="preserve"> - <value>NewProxy</value> + <value>SetProxyForm</value> </data> <data name=">>$this.Type" xml:space="preserve"> <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> diff --git a/PortProxyGUI - NET/NewProxy.zh-CN.resx b/PortProxyGUI/SetProxyForm.zh-CN.resx similarity index 99% rename from PortProxyGUI - NET/NewProxy.zh-CN.resx rename to PortProxyGUI/SetProxyForm.zh-CN.resx index 27fe0b0..2dbaeb4 100644 --- a/PortProxyGUI - NET/NewProxy.zh-CN.resx +++ b/PortProxyGUI/SetProxyForm.zh-CN.resx @@ -201,8 +201,8 @@ <data name=">>label3.ZOrder" xml:space="preserve"> <value>5</value> </data> - <data name="button1.Text" xml:space="preserve"> - <value>添加</value> + <data name="button_submit.Text" xml:space="preserve"> + <value>设置</value> </data> <data name=">>button1.Name" xml:space="preserve"> <value>button1</value> @@ -283,7 +283,7 @@ <value>0</value> </data> <data name="$this.Text" xml:space="preserve"> - <value>新建映射</value> + <value>设置映射</value> </data> <data name=">>$this.Name" xml:space="preserve"> <value>NewProxy</value> diff --git a/docs/ui.png b/docs/ui.png index 28c48c7..3e4af76 100644 Binary files a/docs/ui.png and b/docs/ui.png differ