This commit is contained in:
zmjack 2020-12-09 21:19:58 +08:00
parent bf44a2bc87
commit 16bf3ed339
26 changed files with 639 additions and 295 deletions

View File

@ -1,6 +1,5 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection;
using System.Windows.Forms; using System.Windows.Forms;
namespace PortProxyGUI namespace PortProxyGUI

View File

@ -25,6 +25,7 @@
<ApplicationRevision>0</ApplicationRevision> <ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion> <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled> <BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@ -52,6 +53,21 @@
<PropertyGroup> <PropertyGroup>
<ApplicationIcon>icon.ico</ApplicationIcon> <ApplicationIcon>icon.ico</ApplicationIcon>
</PropertyGroup> </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> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
@ -70,11 +86,11 @@
<Compile Include="About.Designer.cs"> <Compile Include="About.Designer.cs">
<DependentUpon>About.cs</DependentUpon> <DependentUpon>About.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="NewProxy.cs"> <Compile Include="SetProxyForm.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="NewProxy.Designer.cs"> <Compile Include="SetProxyForm.Designer.cs">
<DependentUpon>NewProxy.cs</DependentUpon> <DependentUpon>SetProxyForm.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="PortProxyGUI.cs"> <Compile Include="PortProxyGUI.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
@ -90,11 +106,11 @@
<EmbeddedResource Include="About.zh-CN.resx"> <EmbeddedResource Include="About.zh-CN.resx">
<DependentUpon>About.cs</DependentUpon> <DependentUpon>About.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="NewProxy.resx"> <EmbeddedResource Include="SetProxyForm.resx">
<DependentUpon>NewProxy.cs</DependentUpon> <DependentUpon>SetProxyForm.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="NewProxy.zh-CN.resx"> <EmbeddedResource Include="SetProxyForm.zh-CN.resx">
<DependentUpon>NewProxy.cs</DependentUpon> <DependentUpon>SetProxyForm.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="PortProxyGUI.resx"> <EmbeddedResource Include="PortProxyGUI.resx">
<DependentUpon>PortProxyGUI.cs</DependentUpon> <DependentUpon>PortProxyGUI.cs</DependentUpon>

View File

@ -37,12 +37,13 @@
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader5 = ((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.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem2 = 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.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.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.contextMenuStrip1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
@ -61,6 +62,8 @@
this.listView1.Name = "listView1"; this.listView1.Name = "listView1";
this.listView1.UseCompatibleStateImageBehavior = false; this.listView1.UseCompatibleStateImageBehavior = false;
this.listView1.View = System.Windows.Forms.View.Details; 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); this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
// //
// columnHeader1 // columnHeader1
@ -86,45 +89,51 @@
// contextMenuStrip1 // contextMenuStrip1
// //
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripMenuItem1, this.toolStripMenuItem_New,
this.toolStripMenuItem2, this.toolStripMenuItem_Modify,
this.toolStripMenuItem_Delete,
this.toolStripSeparator1, this.toolStripSeparator1,
this.toolStripMenuItem3, this.toolStripMenuItem_Refresh,
this.toolStripSeparator2, this.toolStripSeparator2,
this.toolStripMenuItem4}); this.toolStripMenuItem_About});
this.contextMenuStrip1.Name = "contextMenuStrip1"; this.contextMenuStrip1.Name = "contextMenuStrip1";
resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1"); resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1");
this.contextMenuStrip1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.contextMenuStrip1_MouseClick); this.contextMenuStrip1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.contextMenuStrip1_MouseClick);
// //
// toolStripMenuItem1 // toolStripMenuItem_New
// //
this.toolStripMenuItem1.Name = "toolStripMenuItem1"; this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); resources.ApplyResources(this.toolStripMenuItem_New, "toolStripMenuItem_New");
// //
// toolStripMenuItem2 // toolStripMenuItem_Modify
// //
this.toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem_Modify.Name = "toolStripMenuItem_Modify";
resources.ApplyResources(this.toolStripMenuItem2, "toolStripMenuItem2"); resources.ApplyResources(this.toolStripMenuItem_Modify, "toolStripMenuItem_Modify");
//
// toolStripMenuItem_Delete
//
this.toolStripMenuItem_Delete.Name = "toolStripMenuItem_Delete";
resources.ApplyResources(this.toolStripMenuItem_Delete, "toolStripMenuItem_Delete");
// //
// toolStripSeparator1 // toolStripSeparator1
// //
this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Name = "toolStripSeparator1";
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
// //
// toolStripMenuItem3 // toolStripMenuItem_Refresh
// //
this.toolStripMenuItem3.Name = "toolStripMenuItem3"; this.toolStripMenuItem_Refresh.Name = "toolStripMenuItem_Refresh";
resources.ApplyResources(this.toolStripMenuItem3, "toolStripMenuItem3"); resources.ApplyResources(this.toolStripMenuItem_Refresh, "toolStripMenuItem_Refresh");
// //
// toolStripSeparator2 // toolStripSeparator2
// //
this.toolStripSeparator2.Name = "toolStripSeparator2"; this.toolStripSeparator2.Name = "toolStripSeparator2";
resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
// //
// toolStripMenuItem4 // toolStripMenuItem_About
// //
this.toolStripMenuItem4.Name = "toolStripMenuItem4"; this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
resources.ApplyResources(this.toolStripMenuItem4, "toolStripMenuItem4"); resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
// //
// PortProxyGUI // PortProxyGUI
// //
@ -144,15 +153,16 @@
private System.Windows.Forms.ColumnHeader columnHeader1; private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2; private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
private System.Windows.Forms.ColumnHeader columnHeader3; private System.Windows.Forms.ColumnHeader columnHeader3;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; 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.ColumnHeader columnHeader4;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; 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.ColumnHeader columnHeader5;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
} }
} }

View File

@ -10,12 +10,15 @@ namespace PortProxyGUI
{ {
public partial class PortProxyGUI : Form public partial class PortProxyGUI : Form
{ {
public NewProxy NewProxyForm; public SetProxyForm SetProxyForm;
public About AboutForm; public About AboutForm;
private ListViewColumnSorter lvwColumnSorter;
public PortProxyGUI() public PortProxyGUI()
{ {
InitializeComponent(); InitializeComponent();
lvwColumnSorter = new ListViewColumnSorter();
listView1.ListViewItemSorter = lvwColumnSorter;
} }
private void PortProxyGUI_Load(object sender, EventArgs e) private void PortProxyGUI_Load(object sender, EventArgs e)
@ -34,10 +37,23 @@ namespace PortProxyGUI
var listenPort = subItems[2].Text; var listenPort = subItems[2].Text;
var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}"); var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
} }
RefreshProxyList(); 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() public void RefreshProxyList()
{ {
var output = CmdRunner.Execute("netsh interface portproxy show all"); var output = CmdRunner.Execute("netsh interface portproxy show all");
@ -88,19 +104,22 @@ namespace PortProxyGUI
switch (selected.Text) switch (selected.Text)
{ {
case string s when s == toolStripMenuItem1.Text: case string s when s == toolStripMenuItem_New.Text:
if (NewProxyForm == null) if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
{ SetProxyForm.UseNormalMode();
NewProxyForm = new NewProxy(this); SetProxyForm.Show();
NewProxyForm.Show();
}
else NewProxyForm.Show();
break; break;
case string s when s == toolStripMenuItem3.Text: RefreshProxyList(); break; case string s when s == toolStripMenuItem_Modify.Text:
case string s when s == toolStripMenuItem2.Text: DeleteSelectedProxies(); break; 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) if (AboutForm == null)
{ {
AboutForm = new About(this); AboutForm = new About(this);
@ -116,10 +135,50 @@ namespace PortProxyGUI
{ {
if (sender is ListView _sender) if (sender is ListView _sender)
{ {
if (e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any()) var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
toolStripMenuItem2.Enabled = true; toolStripMenuItem_Delete.Enabled = selectAny;
else toolStripMenuItem2.Enabled = false; 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();
}
} }
} }

View File

@ -149,8 +149,44 @@
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <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"> <data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 104</value> <value>181, 148</value>
</data> </data>
<data name="&gt;&gt;contextMenuStrip1.Name" xml:space="preserve"> <data name="&gt;&gt;contextMenuStrip1.Name" xml:space="preserve">
<value>contextMenuStrip1</value> <value>contextMenuStrip1</value>
@ -186,36 +222,6 @@
<data name="&gt;&gt;listView1.ZOrder" xml:space="preserve"> <data name="&gt;&gt;listView1.ZOrder" xml:space="preserve">
<value>1</value> <value>1</value>
</data> </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"> <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>
@ -2422,16 +2428,22 @@
<data name="&gt;&gt;columnHeader5.Type" xml:space="preserve"> <data name="&gt;&gt;columnHeader5.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem1.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_New.Name" xml:space="preserve">
<value>toolStripMenuItem1</value> <value>toolStripMenuItem_New</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem1.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_New.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem2.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_Modify.Name" xml:space="preserve">
<value>toolStripMenuItem2</value> <value>toolStripMenuItem_Modify</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem2.Type" xml:space="preserve"> <data name="&gt;&gt;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="&gt;&gt;toolStripMenuItem_Delete.Name" xml:space="preserve">
<value>toolStripMenuItem_Delete</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Delete.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve">
@ -2440,10 +2452,10 @@
<data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem3.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_Refresh.Name" xml:space="preserve">
<value>toolStripMenuItem3</value> <value>toolStripMenuItem_Refresh</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem3.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_Refresh.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripSeparator2.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator2.Name" xml:space="preserve">
@ -2452,10 +2464,10 @@
<data name="&gt;&gt;toolStripSeparator2.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator2.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem4.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_About.Name" xml:space="preserve">
<value>toolStripMenuItem4</value> <value>toolStripMenuItem_About</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem4.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_About.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;$this.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Name" xml:space="preserve">

View File

@ -164,7 +164,7 @@
<data name="listView1.Location" type="System.Drawing.Point, System.Drawing"> <data name="listView1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value> <value>0, 0</value>
</data> </data>
<data name="toolStripMenuItem2.Text" xml:space="preserve"> <data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
<value>删除</value> <value>删除</value>
</data> </data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing"> <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"> <data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value> <value>3, 2, 3, 2</value>
</data> </data>
<data name="toolStripMenuItem1.Text" xml:space="preserve"> <data name="toolStripMenuItem_New.Text" xml:space="preserve">
<value>新建</value> <value>新建</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem1.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem1.Type" xml:space="preserve">
@ -191,7 +191,7 @@
<data name="&gt;&gt;columnHeader1.Name" xml:space="preserve"> <data name="&gt;&gt;columnHeader1.Name" xml:space="preserve">
<value>columnHeader1</value> <value>columnHeader1</value>
</data> </data>
<data name="toolStripMenuItem3.Text" xml:space="preserve"> <data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
<value>刷新</value> <value>刷新</value>
</data> </data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing"> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
@ -243,7 +243,7 @@
<data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="toolStripMenuItem4.Text" xml:space="preserve"> <data name="toolStripMenuItem_About.Text" xml:space="preserve">
<value>关于</value> <value>关于</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem2.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem2.Name" xml:space="preserve">
@ -309,4 +309,7 @@
<data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib"> <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib">
<value>zh-Hans</value> <value>zh-Hans</value>
</data> </data>
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
<value>修改</value>
</data>
</root> </root>

View File

@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.3.0")] [assembly: AssemblyVersion("1.0.5.0")]
[assembly: AssemblyFileVersion("1.0.3.0")] [assembly: AssemblyFileVersion("1.0.5.0")]

View File

@ -1,6 +1,6 @@
namespace PortProxyGUI namespace PortProxyGUI
{ {
partial class NewProxy partial class SetProxyForm
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
@ -28,14 +28,14 @@
/// </summary> /// </summary>
private void InitializeComponent() 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.label1 = new System.Windows.Forms.Label();
this.textBox_listenOn = new System.Windows.Forms.TextBox(); this.textBox_listenOn = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label();
this.textBox_connectTo = new System.Windows.Forms.TextBox(); this.textBox_connectTo = new System.Windows.Forms.TextBox();
this.textBox_connectPort = new System.Windows.Forms.TextBox(); this.textBox_connectPort = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label(); 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.label4 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label();
this.textBox_listenPort = new System.Windows.Forms.TextBox(); this.textBox_listenPort = new System.Windows.Forms.TextBox();
@ -72,12 +72,12 @@
resources.ApplyResources(this.label3, "label3"); resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3"; this.label3.Name = "label3";
// //
// button1 // button_submit
// //
resources.ApplyResources(this.button1, "button1"); resources.ApplyResources(this.button_submit, "button_submit");
this.button1.Name = "button1"; this.button_submit.Name = "button_submit";
this.button1.UseVisualStyleBackColor = true; this.button_submit.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click); this.button_submit.Click += new System.EventHandler(this.button_submit_Click);
// //
// label4 // label4
// //
@ -106,16 +106,16 @@
resources.GetString("comboBox_type.Items4")}); resources.GetString("comboBox_type.Items4")});
this.comboBox_type.Name = "comboBox_type"; this.comboBox_type.Name = "comboBox_type";
// //
// NewProxy // SetProxyForm
// //
this.AcceptButton = this.button1; this.AcceptButton = this.button_submit;
resources.ApplyResources(this, "$this"); resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.comboBox_type); this.Controls.Add(this.comboBox_type);
this.Controls.Add(this.textBox_listenPort); this.Controls.Add(this.textBox_listenPort);
this.Controls.Add(this.label5); this.Controls.Add(this.label5);
this.Controls.Add(this.label4); 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.label3);
this.Controls.Add(this.textBox_connectPort); this.Controls.Add(this.textBox_connectPort);
this.Controls.Add(this.textBox_connectTo); this.Controls.Add(this.textBox_connectTo);
@ -125,10 +125,10 @@
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false; this.MaximizeBox = false;
this.MinimizeBox = false; this.MinimizeBox = false;
this.Name = "NewProxy"; this.Name = "SetProxyForm";
this.TopMost = true; this.TopMost = true;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.NewProxy_FormClosing); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SetProxyForm_FormClosing);
this.Load += new System.EventHandler(this.NewProxy_Load); this.Load += new System.EventHandler(this.SetProxyForm_Load);
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
@ -142,7 +142,7 @@
private System.Windows.Forms.TextBox textBox_connectTo; private System.Windows.Forms.TextBox textBox_connectTo;
private System.Windows.Forms.TextBox textBox_connectPort; private System.Windows.Forms.TextBox textBox_connectPort;
private System.Windows.Forms.Label label3; 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 label4;
private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox textBox_listenPort; private System.Windows.Forms.TextBox textBox_listenPort;

View File

@ -6,21 +6,48 @@ using System.Windows.Forms;
namespace PortProxyGUI namespace PortProxyGUI
{ {
public partial class NewProxy : Form public partial class SetProxyForm : Form
{ {
public readonly PortProxyGUI PortProxyGUI; 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; PortProxyGUI = portProxyGUI;
InitializeComponent(); 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())); Invoke((Action)(() => PortProxyGUI.RefreshProxyList()));
} }
@ -40,7 +67,7 @@ namespace PortProxyGUI
return $"{from}to{to}"; 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 type = comboBox_type.Text.Trim();
var listenOn = textBox_listenOn.Text.Trim().ToLower(); var listenOn = textBox_listenOn.Text.Trim().ToLower();
@ -60,7 +87,7 @@ namespace PortProxyGUI
return; return;
} }
if (type == AutoString) type = GetPassType(listenOn, connectTo); if (type == AutoTypeString) type = GetPassType(listenOn, connectTo);
if (!new[] { "v4tov4", "v4tov6", "v6tov4", "v6tov6" }.Contains(type)) if (!new[] { "v4tov4", "v4tov6", "v6tov4", "v6tov6" }.Contains(type))
{ {
@ -68,16 +95,19 @@ namespace PortProxyGUI
return; 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;
} }
} }

View File

@ -285,28 +285,28 @@
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve"> <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>5</value> <value>5</value>
</data> </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> <value>227, 62</value>
</data> </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> <value>74, 22</value>
</data> </data>
<data name="button1.TabIndex" type="System.Int32, mscorlib"> <data name="button_submit.TabIndex" type="System.Int32, mscorlib">
<value>6</value> <value>6</value>
</data> </data>
<data name="button1.Text" xml:space="preserve"> <data name="button_submit.Text" xml:space="preserve">
<value>Add</value> <value>Set</value>
</data> </data>
<data name="&gt;&gt;button1.Name" xml:space="preserve"> <data name="&gt;&gt;button_submit.Name" xml:space="preserve">
<value>button1</value> <value>button_submit</value>
</data> </data>
<data name="&gt;&gt;button1.Type" xml:space="preserve"> <data name="&gt;&gt;button_submit.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;button1.Parent" xml:space="preserve"> <data name="&gt;&gt;button_submit.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;button1.ZOrder" xml:space="preserve"> <data name="&gt;&gt;button_submit.ZOrder" xml:space="preserve">
<value>4</value> <value>4</value>
</data> </data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib"> <data name="label4.AutoSize" type="System.Boolean, mscorlib">
@ -2603,13 +2603,13 @@
<value>3, 2, 3, 2</value> <value>3, 2, 3, 2</value>
</data> </data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms"> <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value> <value>Manual</value>
</data> </data>
<data name="$this.Text" xml:space="preserve"> <data name="$this.Text" xml:space="preserve">
<value>New Proxy</value> <value>Set Proxy</value>
</data> </data>
<data name="&gt;&gt;$this.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>NewProxy</value> <value>SetProxyForm</value>
</data> </data>
<data name="&gt;&gt;$this.Type" xml:space="preserve"> <data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

View File

@ -201,8 +201,8 @@
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve"> <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>5</value> <value>5</value>
</data> </data>
<data name="button1.Text" xml:space="preserve"> <data name="button_submit.Text" xml:space="preserve">
<value>添加</value> <value>设置</value>
</data> </data>
<data name="&gt;&gt;button1.Name" xml:space="preserve"> <data name="&gt;&gt;button1.Name" xml:space="preserve">
<value>button1</value> <value>button1</value>
@ -283,7 +283,7 @@
<value>0</value> <value>0</value>
</data> </data>
<data name="$this.Text" xml:space="preserve"> <data name="$this.Text" xml:space="preserve">
<value>新建映射</value> <value>设置映射</value>
</data> </data>
<data name="&gt;&gt;$this.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>NewProxy</value> <value>NewProxy</value>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> <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"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security> <security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
@ -18,33 +18,29 @@
--> -->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges> </requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
</applicationRequestMinimum>
</security> </security>
</trustInfo> </trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application> <application>
<!-- A list of the Windows versions that this application has been tested on <!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. --> and Windows will automatically select the most compatible environment. -->
<!-- Windows Vista --> <!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 --> <!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />--> <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 --> <!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />--> <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 --> <!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />--> <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 --> <!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />--> <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application> </application>
</compatibility> </compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher <!-- 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 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 to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
@ -56,7 +52,6 @@
</windowsSettings> </windowsSettings>
</application> </application>
--> -->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) --> <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <!--
<dependency> <dependency>
@ -72,5 +67,4 @@
</dependentAssembly> </dependentAssembly>
</dependency> </dependency>
--> -->
</assembly> </assembly>

View File

@ -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;
}
}
}
}

View File

@ -10,6 +10,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)CmdRunner.cs" /> <Compile Include="$(MSBuildThisFileDirectory)CmdRunner.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ListViewColumnSorter.cs" />
<Compile Include="$(MSBuildThisFileDirectory)PortProxy.cs" /> <Compile Include="$(MSBuildThisFileDirectory)PortProxy.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ProxyType.cs" /> <Compile Include="$(MSBuildThisFileDirectory)ProxyType.cs" />
<Compile Include="$(MSBuildThisFileDirectory)~extern\NStandard\XString.cs" /> <Compile Include="$(MSBuildThisFileDirectory)~extern\NStandard\XString.cs" />

View File

@ -1,6 +1,5 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection;
using System.Windows.Forms; using System.Windows.Forms;
namespace PortProxyGUI namespace PortProxyGUI

View File

@ -37,12 +37,13 @@
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader5 = ((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.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem2 = 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.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.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.contextMenuStrip1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
@ -61,6 +62,8 @@
this.listView1.Name = "listView1"; this.listView1.Name = "listView1";
this.listView1.UseCompatibleStateImageBehavior = false; this.listView1.UseCompatibleStateImageBehavior = false;
this.listView1.View = System.Windows.Forms.View.Details; 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); this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
// //
// columnHeader1 // columnHeader1
@ -86,45 +89,51 @@
// contextMenuStrip1 // contextMenuStrip1
// //
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripMenuItem1, this.toolStripMenuItem_New,
this.toolStripMenuItem2, this.toolStripMenuItem_Modify,
this.toolStripMenuItem_Delete,
this.toolStripSeparator1, this.toolStripSeparator1,
this.toolStripMenuItem3, this.toolStripMenuItem_Refresh,
this.toolStripSeparator2, this.toolStripSeparator2,
this.toolStripMenuItem4}); this.toolStripMenuItem_About});
this.contextMenuStrip1.Name = "contextMenuStrip1"; this.contextMenuStrip1.Name = "contextMenuStrip1";
resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1"); resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1");
this.contextMenuStrip1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.contextMenuStrip1_MouseClick); this.contextMenuStrip1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.contextMenuStrip1_MouseClick);
// //
// toolStripMenuItem1 // toolStripMenuItem_New
// //
this.toolStripMenuItem1.Name = "toolStripMenuItem1"; this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); resources.ApplyResources(this.toolStripMenuItem_New, "toolStripMenuItem_New");
// //
// toolStripMenuItem2 // toolStripMenuItem_Modify
// //
this.toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem_Modify.Name = "toolStripMenuItem_Modify";
resources.ApplyResources(this.toolStripMenuItem2, "toolStripMenuItem2"); resources.ApplyResources(this.toolStripMenuItem_Modify, "toolStripMenuItem_Modify");
//
// toolStripMenuItem_Delete
//
this.toolStripMenuItem_Delete.Name = "toolStripMenuItem_Delete";
resources.ApplyResources(this.toolStripMenuItem_Delete, "toolStripMenuItem_Delete");
// //
// toolStripSeparator1 // toolStripSeparator1
// //
this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Name = "toolStripSeparator1";
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
// //
// toolStripMenuItem3 // toolStripMenuItem_Refresh
// //
this.toolStripMenuItem3.Name = "toolStripMenuItem3"; this.toolStripMenuItem_Refresh.Name = "toolStripMenuItem_Refresh";
resources.ApplyResources(this.toolStripMenuItem3, "toolStripMenuItem3"); resources.ApplyResources(this.toolStripMenuItem_Refresh, "toolStripMenuItem_Refresh");
// //
// toolStripSeparator2 // toolStripSeparator2
// //
this.toolStripSeparator2.Name = "toolStripSeparator2"; this.toolStripSeparator2.Name = "toolStripSeparator2";
resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
// //
// toolStripMenuItem4 // toolStripMenuItem_About
// //
this.toolStripMenuItem4.Name = "toolStripMenuItem4"; this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
resources.ApplyResources(this.toolStripMenuItem4, "toolStripMenuItem4"); resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
// //
// PortProxyGUI // PortProxyGUI
// //
@ -144,15 +153,16 @@
private System.Windows.Forms.ColumnHeader columnHeader1; private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2; private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
private System.Windows.Forms.ColumnHeader columnHeader3; private System.Windows.Forms.ColumnHeader columnHeader3;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; 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.ColumnHeader columnHeader4;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; 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.ColumnHeader columnHeader5;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
} }
} }

View File

@ -10,12 +10,15 @@ namespace PortProxyGUI
{ {
public partial class PortProxyGUI : Form public partial class PortProxyGUI : Form
{ {
public NewProxy NewProxyForm; public SetProxyForm SetProxyForm;
public About AboutForm; public About AboutForm;
private ListViewColumnSorter lvwColumnSorter;
public PortProxyGUI() public PortProxyGUI()
{ {
InitializeComponent(); InitializeComponent();
lvwColumnSorter = new ListViewColumnSorter();
listView1.ListViewItemSorter = lvwColumnSorter;
} }
private void PortProxyGUI_Load(object sender, EventArgs e) private void PortProxyGUI_Load(object sender, EventArgs e)
@ -34,10 +37,23 @@ namespace PortProxyGUI
var listenPort = subItems[2].Text; var listenPort = subItems[2].Text;
var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}"); var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
} }
RefreshProxyList(); 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() public void RefreshProxyList()
{ {
var output = CmdRunner.Execute("netsh interface portproxy show all"); var output = CmdRunner.Execute("netsh interface portproxy show all");
@ -88,19 +104,22 @@ namespace PortProxyGUI
switch (selected.Text) switch (selected.Text)
{ {
case string s when s == toolStripMenuItem1.Text: case string s when s == toolStripMenuItem_New.Text:
if (NewProxyForm == null) if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
{ SetProxyForm.UseNormalMode();
NewProxyForm = new NewProxy(this); SetProxyForm.Show();
NewProxyForm.Show();
}
else NewProxyForm.Show();
break; break;
case string s when s == toolStripMenuItem3.Text: RefreshProxyList(); break; case string s when s == toolStripMenuItem_Modify.Text:
case string s when s == toolStripMenuItem2.Text: DeleteSelectedProxies(); break; 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) if (AboutForm == null)
{ {
AboutForm = new About(this); AboutForm = new About(this);
@ -116,10 +135,50 @@ namespace PortProxyGUI
{ {
if (sender is ListView _sender) if (sender is ListView _sender)
{ {
if (e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any()) var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
toolStripMenuItem2.Enabled = true; toolStripMenuItem_Delete.Enabled = selectAny;
else toolStripMenuItem2.Enabled = false; 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();
}
} }
} }

View File

@ -14,7 +14,7 @@
<PackageTags>portproxy TCP/IP redirector</PackageTags> <PackageTags>portproxy TCP/IP redirector</PackageTags>
<PackageLicenseFile>LICENSE.md</PackageLicenseFile> <PackageLicenseFile>LICENSE.md</PackageLicenseFile>
<Copyright>Copyright © nstandard.net 2020</Copyright> <Copyright>Copyright © nstandard.net 2020</Copyright>
<Version>1.0.3</Version> <Version>1.0.5</Version>
<ApplicationIcon>icon.ico</ApplicationIcon> <ApplicationIcon>icon.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
@ -42,18 +42,18 @@
<Compile Update="About.Designer.cs"> <Compile Update="About.Designer.cs">
<DependentUpon>About.cs</DependentUpon> <DependentUpon>About.cs</DependentUpon>
</Compile> </Compile>
<Compile Update="NewProxy.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="NewProxy.Designer.cs">
<DependentUpon>NewProxy.cs</DependentUpon>
</Compile>
<Compile Update="PortProxyGUI.cs"> <Compile Update="PortProxyGUI.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Update="PortProxyGUI.Designer.cs"> <Compile Update="PortProxyGUI.Designer.cs">
<DependentUpon>PortProxyGUI.cs</DependentUpon> <DependentUpon>PortProxyGUI.cs</DependentUpon>
</Compile> </Compile>
<Compile Update="SetProxyForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="SetProxyForm.Designer.cs">
<DependentUpon>SetProxyForm.cs</DependentUpon>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -63,18 +63,18 @@
<EmbeddedResource Update="About.zh-CN.resx"> <EmbeddedResource Update="About.zh-CN.resx">
<DependentUpon>About.cs</DependentUpon> <DependentUpon>About.cs</DependentUpon>
</EmbeddedResource> </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"> <EmbeddedResource Update="PortProxyGUI.resx">
<DependentUpon>PortProxyGUI.cs</DependentUpon> <DependentUpon>PortProxyGUI.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Update="PortProxyGUI.zh-CN.resx"> <EmbeddedResource Update="PortProxyGUI.zh-CN.resx">
<DependentUpon>PortProxyGUI.cs</DependentUpon> <DependentUpon>PortProxyGUI.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Update="SetProxyForm.resx">
<DependentUpon>SetProxyForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="SetProxyForm.zh-CN.resx">
<DependentUpon>SetProxyForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup> </ItemGroup>
<Import Project="..\PortProxyGUI.Shared\PortProxyGUI.Shared.projitems" Label="Shared" /> <Import Project="..\PortProxyGUI.Shared\PortProxyGUI.Shared.projitems" Label="Shared" />

View File

@ -149,8 +149,44 @@
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <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"> <data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 104</value> <value>181, 148</value>
</data> </data>
<data name="&gt;&gt;contextMenuStrip1.Name" xml:space="preserve"> <data name="&gt;&gt;contextMenuStrip1.Name" xml:space="preserve">
<value>contextMenuStrip1</value> <value>contextMenuStrip1</value>
@ -186,36 +222,6 @@
<data name="&gt;&gt;listView1.ZOrder" xml:space="preserve"> <data name="&gt;&gt;listView1.ZOrder" xml:space="preserve">
<value>1</value> <value>1</value>
</data> </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"> <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>
@ -2422,16 +2428,22 @@
<data name="&gt;&gt;columnHeader5.Type" xml:space="preserve"> <data name="&gt;&gt;columnHeader5.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem1.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_New.Name" xml:space="preserve">
<value>toolStripMenuItem1</value> <value>toolStripMenuItem_New</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem1.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_New.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem2.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_Modify.Name" xml:space="preserve">
<value>toolStripMenuItem2</value> <value>toolStripMenuItem_Modify</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem2.Type" xml:space="preserve"> <data name="&gt;&gt;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="&gt;&gt;toolStripMenuItem_Delete.Name" xml:space="preserve">
<value>toolStripMenuItem_Delete</value>
</data>
<data name="&gt;&gt;toolStripMenuItem_Delete.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve">
@ -2440,10 +2452,10 @@
<data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem3.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_Refresh.Name" xml:space="preserve">
<value>toolStripMenuItem3</value> <value>toolStripMenuItem_Refresh</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem3.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_Refresh.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripSeparator2.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator2.Name" xml:space="preserve">
@ -2452,10 +2464,10 @@
<data name="&gt;&gt;toolStripSeparator2.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator2.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem4.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_About.Name" xml:space="preserve">
<value>toolStripMenuItem4</value> <value>toolStripMenuItem_About</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem4.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem_About.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;$this.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Name" xml:space="preserve">

View File

@ -164,7 +164,7 @@
<data name="listView1.Location" type="System.Drawing.Point, System.Drawing"> <data name="listView1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value> <value>0, 0</value>
</data> </data>
<data name="toolStripMenuItem2.Text" xml:space="preserve"> <data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
<value>删除</value> <value>删除</value>
</data> </data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing"> <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"> <data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 2, 3, 2</value> <value>3, 2, 3, 2</value>
</data> </data>
<data name="toolStripMenuItem1.Text" xml:space="preserve"> <data name="toolStripMenuItem_New.Text" xml:space="preserve">
<value>新建</value> <value>新建</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem1.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem1.Type" xml:space="preserve">
@ -191,7 +191,7 @@
<data name="&gt;&gt;columnHeader1.Name" xml:space="preserve"> <data name="&gt;&gt;columnHeader1.Name" xml:space="preserve">
<value>columnHeader1</value> <value>columnHeader1</value>
</data> </data>
<data name="toolStripMenuItem3.Text" xml:space="preserve"> <data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
<value>刷新</value> <value>刷新</value>
</data> </data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing"> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
@ -243,7 +243,7 @@
<data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve"> <data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="toolStripMenuItem4.Text" xml:space="preserve"> <data name="toolStripMenuItem_About.Text" xml:space="preserve">
<value>关于</value> <value>关于</value>
</data> </data>
<data name="&gt;&gt;toolStripMenuItem2.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripMenuItem2.Name" xml:space="preserve">
@ -309,4 +309,7 @@
<data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib"> <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib">
<value>zh-Hans</value> <value>zh-Hans</value>
</data> </data>
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
<value>修改</value>
</data>
</root> </root>

View File

@ -1,4 +1,6 @@
using System; using System;
using System.Globalization;
using System.Threading;
using System.Windows.Forms; using System.Windows.Forms;
namespace PortProxyGUI namespace PortProxyGUI

View File

@ -1,6 +1,6 @@
namespace PortProxyGUI namespace PortProxyGUI
{ {
partial class NewProxy partial class SetProxyForm
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
@ -28,14 +28,14 @@
/// </summary> /// </summary>
private void InitializeComponent() 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.label1 = new System.Windows.Forms.Label();
this.textBox_listenOn = new System.Windows.Forms.TextBox(); this.textBox_listenOn = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label();
this.textBox_connectTo = new System.Windows.Forms.TextBox(); this.textBox_connectTo = new System.Windows.Forms.TextBox();
this.textBox_connectPort = new System.Windows.Forms.TextBox(); this.textBox_connectPort = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label(); 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.label4 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label();
this.textBox_listenPort = new System.Windows.Forms.TextBox(); this.textBox_listenPort = new System.Windows.Forms.TextBox();
@ -72,12 +72,12 @@
resources.ApplyResources(this.label3, "label3"); resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3"; this.label3.Name = "label3";
// //
// button1 // button_submit
// //
resources.ApplyResources(this.button1, "button1"); resources.ApplyResources(this.button_submit, "button_submit");
this.button1.Name = "button1"; this.button_submit.Name = "button_submit";
this.button1.UseVisualStyleBackColor = true; this.button_submit.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click); this.button_submit.Click += new System.EventHandler(this.button_submit_Click);
// //
// label4 // label4
// //
@ -106,16 +106,16 @@
resources.GetString("comboBox_type.Items4")}); resources.GetString("comboBox_type.Items4")});
this.comboBox_type.Name = "comboBox_type"; this.comboBox_type.Name = "comboBox_type";
// //
// NewProxy // SetProxyForm
// //
this.AcceptButton = this.button1; this.AcceptButton = this.button_submit;
resources.ApplyResources(this, "$this"); resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.comboBox_type); this.Controls.Add(this.comboBox_type);
this.Controls.Add(this.textBox_listenPort); this.Controls.Add(this.textBox_listenPort);
this.Controls.Add(this.label5); this.Controls.Add(this.label5);
this.Controls.Add(this.label4); 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.label3);
this.Controls.Add(this.textBox_connectPort); this.Controls.Add(this.textBox_connectPort);
this.Controls.Add(this.textBox_connectTo); this.Controls.Add(this.textBox_connectTo);
@ -125,10 +125,10 @@
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false; this.MaximizeBox = false;
this.MinimizeBox = false; this.MinimizeBox = false;
this.Name = "NewProxy"; this.Name = "SetProxyForm";
this.TopMost = true; this.TopMost = true;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.NewProxy_FormClosing); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SetProxyForm_FormClosing);
this.Load += new System.EventHandler(this.NewProxy_Load); this.Load += new System.EventHandler(this.SetProxyForm_Load);
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
@ -142,7 +142,7 @@
private System.Windows.Forms.TextBox textBox_connectTo; private System.Windows.Forms.TextBox textBox_connectTo;
private System.Windows.Forms.TextBox textBox_connectPort; private System.Windows.Forms.TextBox textBox_connectPort;
private System.Windows.Forms.Label label3; 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 label4;
private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox textBox_listenPort; private System.Windows.Forms.TextBox textBox_listenPort;

View File

@ -6,21 +6,48 @@ using System.Windows.Forms;
namespace PortProxyGUI namespace PortProxyGUI
{ {
public partial class NewProxy : Form public partial class SetProxyForm : Form
{ {
public readonly PortProxyGUI PortProxyGUI; 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; PortProxyGUI = portProxyGUI;
InitializeComponent(); 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())); Invoke((Action)(() => PortProxyGUI.RefreshProxyList()));
} }
@ -40,7 +67,7 @@ namespace PortProxyGUI
return $"{from}to{to}"; 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 type = comboBox_type.Text.Trim();
var listenOn = textBox_listenOn.Text.Trim().ToLower(); var listenOn = textBox_listenOn.Text.Trim().ToLower();
@ -60,7 +87,7 @@ namespace PortProxyGUI
return; return;
} }
if (type == AutoString) type = GetPassType(listenOn, connectTo); if (type == AutoTypeString) type = GetPassType(listenOn, connectTo);
if (!new[] { "v4tov4", "v4tov6", "v6tov4", "v6tov6" }.Contains(type)) if (!new[] { "v4tov4", "v4tov6", "v6tov4", "v6tov6" }.Contains(type))
{ {
@ -68,16 +95,19 @@ namespace PortProxyGUI
return; 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;
} }
} }

View File

@ -285,28 +285,28 @@
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve"> <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>5</value> <value>5</value>
</data> </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> <value>227, 62</value>
</data> </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> <value>74, 22</value>
</data> </data>
<data name="button1.TabIndex" type="System.Int32, mscorlib"> <data name="button_submit.TabIndex" type="System.Int32, mscorlib">
<value>6</value> <value>6</value>
</data> </data>
<data name="button1.Text" xml:space="preserve"> <data name="button_submit.Text" xml:space="preserve">
<value>Add</value> <value>Set</value>
</data> </data>
<data name="&gt;&gt;button1.Name" xml:space="preserve"> <data name="&gt;&gt;button_submit.Name" xml:space="preserve">
<value>button1</value> <value>button_submit</value>
</data> </data>
<data name="&gt;&gt;button1.Type" xml:space="preserve"> <data name="&gt;&gt;button_submit.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;button1.Parent" xml:space="preserve"> <data name="&gt;&gt;button_submit.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;button1.ZOrder" xml:space="preserve"> <data name="&gt;&gt;button_submit.ZOrder" xml:space="preserve">
<value>4</value> <value>4</value>
</data> </data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib"> <data name="label4.AutoSize" type="System.Boolean, mscorlib">
@ -2603,13 +2603,13 @@
<value>3, 2, 3, 2</value> <value>3, 2, 3, 2</value>
</data> </data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms"> <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value> <value>Manual</value>
</data> </data>
<data name="$this.Text" xml:space="preserve"> <data name="$this.Text" xml:space="preserve">
<value>New Proxy</value> <value>Set Proxy</value>
</data> </data>
<data name="&gt;&gt;$this.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>NewProxy</value> <value>SetProxyForm</value>
</data> </data>
<data name="&gt;&gt;$this.Type" xml:space="preserve"> <data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

View File

@ -201,8 +201,8 @@
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve"> <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>5</value> <value>5</value>
</data> </data>
<data name="button1.Text" xml:space="preserve"> <data name="button_submit.Text" xml:space="preserve">
<value>添加</value> <value>设置</value>
</data> </data>
<data name="&gt;&gt;button1.Name" xml:space="preserve"> <data name="&gt;&gt;button1.Name" xml:space="preserve">
<value>button1</value> <value>button1</value>
@ -283,7 +283,7 @@
<value>0</value> <value>0</value>
</data> </data>
<data name="$this.Text" xml:space="preserve"> <data name="$this.Text" xml:space="preserve">
<value>新建映射</value> <value>设置映射</value>
</data> </data>
<data name="&gt;&gt;$this.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>NewProxy</value> <value>NewProxy</value>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB