v1.1.0
This commit is contained in:
parent
f0e08f50b0
commit
e57ec23521
|
@ -12,6 +12,8 @@
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<Deterministic>true</Deterministic>
|
<Deterministic>true</Deterministic>
|
||||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
<PublishUrl>publish\</PublishUrl>
|
<PublishUrl>publish\</PublishUrl>
|
||||||
<Install>true</Install>
|
<Install>true</Install>
|
||||||
<InstallFrom>Disk</InstallFrom>
|
<InstallFrom>Disk</InstallFrom>
|
||||||
|
@ -43,7 +45,7 @@
|
||||||
<DebugType>none</DebugType>
|
<DebugType>none</DebugType>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE;NET35</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -69,8 +71,21 @@
|
||||||
<TargetZone>LocalIntranet</TargetZone>
|
<TargetZone>LocalIntranet</TargetZone>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="NStandard, Version=0.6.7.1, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NStandard.0.6.7.1\lib\net35\NStandard.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SQLib, Version=0.8.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SQLib.0.8.6\lib\net35\SQLib.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SQLib.Sqlite, Version=0.8.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SQLib.Sqlite.0.8.6\lib\net35\SQLib.Sqlite.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net20\System.Data.SQLite.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Web" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
|
@ -114,6 +129,7 @@
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="PortProxyGUI.resx">
|
<EmbeddedResource Include="PortProxyGUI.resx">
|
||||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="PortProxyGUI.zh-CN.resx">
|
<EmbeddedResource Include="PortProxyGUI.zh-CN.resx">
|
||||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||||
|
@ -128,7 +144,9 @@
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="app.manifest" />
|
<None Include="app.manifest" />
|
||||||
|
<None Include="packages.config" />
|
||||||
<None Include="Properties\Settings.settings">
|
<None Include="Properties\Settings.settings">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
@ -151,4 +169,11 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="..\PortProxyGUI.Shared\PortProxyGUI.Shared.projitems" Label="Shared" />
|
<Import Project="..\PortProxyGUI.Shared\PortProxyGUI.Shared.projitems" Label="Shared" />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net20\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net20\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net20\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net20\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
|
||||||
|
</Target>
|
||||||
</Project>
|
</Project>
|
|
@ -30,13 +30,17 @@
|
||||||
{
|
{
|
||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortProxyGUI));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortProxyGUI));
|
||||||
this.listView1 = new System.Windows.Forms.ListView();
|
this.listViewProxies = new System.Windows.Forms.ListView();
|
||||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
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.columnHeader6 = ((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.toolStripMenuItem_Enable = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.toolStripMenuItem_Disable = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -44,27 +48,31 @@
|
||||||
this.toolStripMenuItem_Refresh = 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.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.imageListProxies = new System.Windows.Forms.ImageList(this.components);
|
||||||
this.contextMenuStrip1.SuspendLayout();
|
this.contextMenuStrip1.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// listView1
|
// listViewProxies
|
||||||
//
|
//
|
||||||
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
this.listViewProxies.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.listViewProxies.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
this.columnHeader1,
|
this.columnHeader1,
|
||||||
this.columnHeader2,
|
this.columnHeader2,
|
||||||
this.columnHeader3,
|
this.columnHeader3,
|
||||||
this.columnHeader4,
|
this.columnHeader4,
|
||||||
this.columnHeader5});
|
this.columnHeader5,
|
||||||
this.listView1.ContextMenuStrip = this.contextMenuStrip1;
|
this.columnHeader6});
|
||||||
resources.ApplyResources(this.listView1, "listView1");
|
this.listViewProxies.ContextMenuStrip = this.contextMenuStrip1;
|
||||||
this.listView1.FullRowSelect = true;
|
resources.ApplyResources(this.listViewProxies, "listViewProxies");
|
||||||
this.listView1.HideSelection = false;
|
this.listViewProxies.FullRowSelect = true;
|
||||||
this.listView1.Name = "listView1";
|
this.listViewProxies.HideSelection = false;
|
||||||
this.listView1.UseCompatibleStateImageBehavior = false;
|
this.listViewProxies.Name = "listViewProxies";
|
||||||
this.listView1.View = System.Windows.Forms.View.Details;
|
this.listViewProxies.SmallImageList = this.imageListProxies;
|
||||||
this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
this.listViewProxies.UseCompatibleStateImageBehavior = false;
|
||||||
this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
this.listViewProxies.View = System.Windows.Forms.View.Details;
|
||||||
this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
this.listViewProxies.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||||
|
this.listViewProxies.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
||||||
|
this.listViewProxies.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
||||||
//
|
//
|
||||||
// columnHeader1
|
// columnHeader1
|
||||||
//
|
//
|
||||||
|
@ -86,20 +94,42 @@
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.columnHeader5, "columnHeader5");
|
resources.ApplyResources(this.columnHeader5, "columnHeader5");
|
||||||
//
|
//
|
||||||
|
// columnHeader6
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader6, "columnHeader6");
|
||||||
|
//
|
||||||
// contextMenuStrip1
|
// contextMenuStrip1
|
||||||
//
|
//
|
||||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.toolStripMenuItem_Enable,
|
||||||
|
this.toolStripMenuItem_Disable,
|
||||||
|
this.toolStripSeparator3,
|
||||||
|
this.toolStripMenuItem_Refresh,
|
||||||
|
this.toolStripSeparator2,
|
||||||
this.toolStripMenuItem_New,
|
this.toolStripMenuItem_New,
|
||||||
this.toolStripMenuItem_Modify,
|
this.toolStripMenuItem_Modify,
|
||||||
this.toolStripMenuItem_Delete,
|
this.toolStripMenuItem_Delete,
|
||||||
this.toolStripSeparator1,
|
this.toolStripSeparator1,
|
||||||
this.toolStripMenuItem_Refresh,
|
|
||||||
this.toolStripSeparator2,
|
|
||||||
this.toolStripMenuItem_About});
|
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);
|
||||||
//
|
//
|
||||||
|
// toolStripMenuItem_Enable
|
||||||
|
//
|
||||||
|
this.toolStripMenuItem_Enable.Name = "toolStripMenuItem_Enable";
|
||||||
|
resources.ApplyResources(this.toolStripMenuItem_Enable, "toolStripMenuItem_Enable");
|
||||||
|
//
|
||||||
|
// toolStripMenuItem_Disable
|
||||||
|
//
|
||||||
|
this.toolStripMenuItem_Disable.Name = "toolStripMenuItem_Disable";
|
||||||
|
resources.ApplyResources(this.toolStripMenuItem_Disable, "toolStripMenuItem_Disable");
|
||||||
|
//
|
||||||
|
// toolStripSeparator3
|
||||||
|
//
|
||||||
|
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
||||||
|
//
|
||||||
// toolStripMenuItem_New
|
// toolStripMenuItem_New
|
||||||
//
|
//
|
||||||
this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
|
this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
|
||||||
|
@ -135,13 +165,21 @@
|
||||||
this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
|
this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
|
||||||
resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
|
resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
|
||||||
//
|
//
|
||||||
|
// imageListProxies
|
||||||
|
//
|
||||||
|
this.imageListProxies.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListProxies.ImageStream")));
|
||||||
|
this.imageListProxies.TransparentColor = System.Drawing.Color.Transparent;
|
||||||
|
this.imageListProxies.Images.SetKeyName(0, "disable.png");
|
||||||
|
this.imageListProxies.Images.SetKeyName(1, "enable.png");
|
||||||
|
//
|
||||||
// PortProxyGUI
|
// PortProxyGUI
|
||||||
//
|
//
|
||||||
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.listView1);
|
this.Controls.Add(this.listViewProxies);
|
||||||
this.Name = "PortProxyGUI";
|
this.Name = "PortProxyGUI";
|
||||||
this.Load += new System.EventHandler(this.PortProxyGUI_Load);
|
this.Load += new System.EventHandler(this.PortProxyGUI_Load);
|
||||||
|
this.Shown += new System.EventHandler(this.PortProxyGUI_Shown);
|
||||||
this.contextMenuStrip1.ResumeLayout(false);
|
this.contextMenuStrip1.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
@ -149,20 +187,25 @@
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.ListView listView1;
|
private System.Windows.Forms.ListView listViewProxies;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
private System.Windows.Forms.ColumnHeader columnHeader5;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader5;
|
private System.Windows.Forms.ColumnHeader columnHeader6;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||||
|
private System.Windows.Forms.ImageList imageListProxies;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Enable;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Disable;
|
||||||
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using static System.Windows.Forms.ListViewItem;
|
using static System.Windows.Forms.ListViewItem;
|
||||||
|
|
||||||
|
@ -18,80 +17,81 @@ namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
lvwColumnSorter = new ListViewColumnSorter();
|
lvwColumnSorter = new ListViewColumnSorter();
|
||||||
listView1.ListViewItemSorter = lvwColumnSorter;
|
listViewProxies.ListViewItemSorter = lvwColumnSorter;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PortProxyGUI_Load(object sender, EventArgs e)
|
private void PortProxyGUI_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PortProxyGUI_Shown(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
RefreshProxyList();
|
RefreshProxyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void EnableSelectedProxies()
|
||||||
|
{
|
||||||
|
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
item.ImageIndex = 1;
|
||||||
|
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||||
|
CmdUtil.AddProxy("add", subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text), subItems[4].Text, int.Parse(subItems[5].Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DisableSelectedProxies()
|
||||||
|
{
|
||||||
|
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
item.ImageIndex = 0;
|
||||||
|
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||||
|
CmdUtil.DeleteProxy(subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void DeleteSelectedProxies()
|
private void DeleteSelectedProxies()
|
||||||
{
|
{
|
||||||
var items = listView1.SelectedItems.OfType<ListViewItem>();
|
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||||
foreach (var item in items)
|
DisableSelectedProxies();
|
||||||
{
|
Program.SqliteDbScope.RemoveRange(items.Select(x => new Data.Rule { Id = x.Tag.ToString() }));
|
||||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
foreach (var item in items) listViewProxies.Items.Remove(item);
|
||||||
var type = subItems[0].Text;
|
|
||||||
var listenOn = subItems[1].Text;
|
|
||||||
var listenPort = subItems[2].Text;
|
|
||||||
var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
|
|
||||||
}
|
|
||||||
RefreshProxyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetProxyForUpdate(SetProxyForm form)
|
private void SetProxyForUpdate(SetProxyForm form)
|
||||||
{
|
{
|
||||||
var item = listView1.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
var item = listViewProxies.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
||||||
{
|
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
form.UseUpdateMode(item, subItems[1].Text, subItems[2].Text, subItems[3].Text, subItems[4].Text, subItems[5].Text);
|
||||||
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 proxies = CmdUtil.GetProxies();
|
||||||
var types = new[]
|
var rules = Program.SqliteDbScope.Rules;
|
||||||
{
|
|
||||||
new ProxyType("ipv4", "ipv4"),
|
|
||||||
new ProxyType("ipv4", "ipv6"),
|
|
||||||
new ProxyType("ipv6", "ipv4"),
|
|
||||||
new ProxyType("ipv6", "ipv6"),
|
|
||||||
};
|
|
||||||
|
|
||||||
var proxies = types.SelectMany(type =>
|
|
||||||
{
|
|
||||||
var typeProxies = output
|
|
||||||
.Project(new Regex($@"{type.From}:[^\n]+?{type.To}:\r\n\r\n.+?\r\n--------------- ---------- --------------- ----------\r\n(.+?)\r\n\r\n", RegexOptions.Singleline))
|
|
||||||
?.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
|
|
||||||
.Select(line =>
|
|
||||||
{
|
|
||||||
var parts = line.Resolve(new Regex(@"^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)$"));
|
|
||||||
return new PortProxy
|
|
||||||
{
|
|
||||||
Type = type.Type,
|
|
||||||
ListenOn = parts[1].FirstOrDefault(),
|
|
||||||
ListenPort = parts[2].FirstOrDefault(),
|
|
||||||
ConnectTo = parts[3].FirstOrDefault(),
|
|
||||||
ConnectPort = parts[4].FirstOrDefault(),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
return typeProxies ?? new PortProxy[0];
|
|
||||||
});
|
|
||||||
|
|
||||||
listView1.Items.Clear();
|
|
||||||
foreach (var proxy in proxies)
|
foreach (var proxy in proxies)
|
||||||
{
|
{
|
||||||
listView1.Items.Add(new ListViewItem(proxy.Type).Then(vitem =>
|
var matchedRule = rules.FirstOrDefault(r => r.EqualsWithKeys(proxy));
|
||||||
|
proxy.Id = matchedRule?.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pendingAdds = proxies.Where(x => x.Id == null);
|
||||||
|
var pendingUpdates = proxies.Where(x => x.Id != null && !x.Equals(rules.First(r => r.Id == x.Id)));
|
||||||
|
|
||||||
|
Program.SqliteDbScope.AddRange(pendingAdds);
|
||||||
|
Program.SqliteDbScope.UpdateRange(pendingUpdates);
|
||||||
|
|
||||||
|
listViewProxies.Items.Clear();
|
||||||
|
rules = Program.SqliteDbScope.Rules;
|
||||||
|
foreach (var rule in rules)
|
||||||
|
{
|
||||||
|
var imageIndex = proxies.Any(p => p.EqualsWithKeys(rule)) ? 1 : 0;
|
||||||
|
var item = new ListViewItem { ImageIndex = imageIndex, Tag = rule.Id }.Then(vitem =>
|
||||||
{
|
{
|
||||||
vitem.SubItems.AddRange(new[] { proxy.ListenOn, proxy.ListenPort, proxy.ConnectTo, proxy.ConnectPort });
|
vitem.SubItems.AddRange(new[] { rule.Type, rule.ListenOn, rule.ListenPort.ToString(), rule.ConnectTo, rule.ConnectPort.ToString() });
|
||||||
}));
|
});
|
||||||
|
listViewProxies.Items.Add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,27 +99,33 @@ namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
if (sender is ContextMenuStrip _sender)
|
if (sender is ContextMenuStrip _sender)
|
||||||
{
|
{
|
||||||
var selected = _sender.Items.OfType<ToolStripItem>().Where(x => x.Selected).FirstOrDefault();
|
var selected = _sender.Items.OfType<ToolStripMenuItem>().Where(x => x.Selected).FirstOrDefault();
|
||||||
if (selected is null || !selected.Enabled) return;
|
if (selected is null || !selected.Enabled) return;
|
||||||
|
|
||||||
switch (selected.Text)
|
switch (selected)
|
||||||
{
|
{
|
||||||
case string s when s == toolStripMenuItem_New.Text:
|
case ToolStripMenuItem item when item == toolStripMenuItem_Enable: EnableSelectedProxies(); break;
|
||||||
|
case ToolStripMenuItem item when item == toolStripMenuItem_Disable: DisableSelectedProxies(); break;
|
||||||
|
|
||||||
|
case ToolStripMenuItem item when item == toolStripMenuItem_New:
|
||||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||||
SetProxyForm.UseNormalMode();
|
SetProxyForm.UseNormalMode();
|
||||||
SetProxyForm.Show();
|
SetProxyForm.Show();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case string s when s == toolStripMenuItem_Modify.Text:
|
case ToolStripMenuItem item when item == toolStripMenuItem_Modify:
|
||||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||||
SetProxyForUpdate(SetProxyForm);
|
SetProxyForUpdate(SetProxyForm);
|
||||||
SetProxyForm.Show();
|
SetProxyForm.Show();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case string s when s == toolStripMenuItem_Refresh.Text: RefreshProxyList(); break;
|
case ToolStripMenuItem item when item == toolStripMenuItem_Refresh:
|
||||||
case string s when s == toolStripMenuItem_Delete.Text: DeleteSelectedProxies(); break;
|
RefreshProxyList();
|
||||||
|
break;
|
||||||
|
|
||||||
case string s when s == toolStripMenuItem_About.Text:
|
case ToolStripMenuItem item when item == toolStripMenuItem_Delete: DeleteSelectedProxies(); break;
|
||||||
|
|
||||||
|
case ToolStripMenuItem item when item == toolStripMenuItem_About:
|
||||||
if (AboutForm == null)
|
if (AboutForm == null)
|
||||||
{
|
{
|
||||||
AboutForm = new About(this);
|
AboutForm = new About(this);
|
||||||
|
@ -135,9 +141,11 @@ namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
if (sender is ListView _sender)
|
if (sender is ListView _sender)
|
||||||
{
|
{
|
||||||
var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
toolStripMenuItem_Enable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 0);
|
||||||
toolStripMenuItem_Delete.Enabled = selectAny;
|
toolStripMenuItem_Disable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 1);
|
||||||
toolStripMenuItem_Modify.Enabled = selectAny;
|
|
||||||
|
toolStripMenuItem_Delete.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
||||||
|
toolStripMenuItem_Modify.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Count() == 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +186,8 @@ namespace PortProxyGUI
|
||||||
}
|
}
|
||||||
|
|
||||||
// Perform the sort with these new sort options.
|
// Perform the sort with these new sort options.
|
||||||
listView1.Sort();
|
listViewProxies.Sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,124 +112,196 @@
|
||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<resheader name="reader">
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="columnHeader1.Text" xml:space="preserve">
|
<data name="columnHeader1.Text" xml:space="preserve">
|
||||||
<value>Type</value>
|
<value />
|
||||||
|
</data>
|
||||||
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="columnHeader1.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>24</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader2.Text" xml:space="preserve">
|
<data name="columnHeader2.Text" xml:space="preserve">
|
||||||
<value>Listen on</value>
|
<value>Type</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
||||||
<value>140</value>
|
<value>64</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader3.Text" xml:space="preserve">
|
<data name="columnHeader3.Text" xml:space="preserve">
|
||||||
<value>Listen port</value>
|
<value>Listen on</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
||||||
<value>100</value>
|
|
||||||
</data>
|
|
||||||
<data name="columnHeader4.Text" xml:space="preserve">
|
|
||||||
<value>Connect to</value>
|
|
||||||
</data>
|
|
||||||
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
|
||||||
<value>140</value>
|
<value>140</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader5.Text" xml:space="preserve">
|
<data name="columnHeader4.Text" xml:space="preserve">
|
||||||
<value>Connect port</value>
|
<value>Listen port</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||||
<value>100</value>
|
<value>100</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<data name="columnHeader5.Text" xml:space="preserve">
|
||||||
|
<value>Connect to</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>140</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader6.Text" xml:space="preserve">
|
||||||
|
<value>Connect port</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader6.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>100</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<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=4.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>181, 148</value>
|
<value>155, 176</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
||||||
<value>contextMenuStrip1</value>
|
<value>contextMenuStrip1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="listView1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
<data name="listViewProxies.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>Fill</value>
|
<value>Fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="listView1.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="listViewProxies.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 0</value>
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="listView1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="listViewProxies.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="listView1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="listViewProxies.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>573, 262</value>
|
<value>624, 361</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="listView1.TabIndex" type="System.Int32, mscorlib">
|
<metadata name="imageListProxies.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>182, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="imageListProxies.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||||
|
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||||
|
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc
|
||||||
|
CAAAAk1TRnQBSQFMAgEBAgEAAUABAAFAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||||
|
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||||
|
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||||
|
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||||
|
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
|
||||||
|
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
|
||||||
|
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
|
||||||
|
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
|
||||||
|
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
|
||||||
|
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
|
||||||
|
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
|
||||||
|
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
|
||||||
|
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
|
||||||
|
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
|
||||||
|
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
|
||||||
|
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
|
||||||
|
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
|
||||||
|
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
|
||||||
|
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
|
||||||
|
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
|
||||||
|
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
|
||||||
|
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
|
||||||
|
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
|
||||||
|
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
|
||||||
|
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
|
||||||
|
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
|
||||||
|
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
|
||||||
|
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
|
||||||
|
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wQACvQ0AAH/AZQKFwGU
|
||||||
|
Af8CAAH/AboKlQG6Af8iAAGUDBcBlAIAAboMlQG6IgAOFwIADpUiAAQXARYB9AL/AfQBFgQXAgAOlSIA
|
||||||
|
AxcBFgH/Ab0BFgGUAfQB/wEWAxcCAAWVArsHlSIAAxcB9AG9AhcBlAH/AvQDFwIABJUBugL/AcEGlSIA
|
||||||
|
AxcB/wEWARcBlAH/ApQB/wMXAgADlQG6Af8BwQG6Af8BwQWVIgADFwH/ApQB/wGUARcBFgH/AxcCAAOV
|
||||||
|
Af8BwQKVAboB/wHBBJUiAAMXAvQB/wGUAhcBvQH0AxcCAAiVAboB/wHBA5UiAAMXARYB/wH0AZQBFgG9
|
||||||
|
Af8BFgMXAgAJlQG6Af8DlSIABBcBFgH0Av8B9AEWBBcB/wEADpUB/yEADhcB/wEADpUB/yEAAZQMFwGU
|
||||||
|
AgABugyVAboiAAH/AZQKFwGUAf8CAAH/AboKlQG6Af80AAH/CPQkAAFCAU0BPgcAAT4DAAEoAwABQAMA
|
||||||
|
ARADAAEBAQABAQUAAYAXAAP/AQAB4AEHAv8EAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||||
|
AQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||||
|
AQEBgAEBBAABgAEAAYAFAAGAAQABgAUAAYABAQGAAQEEAAGAAQEBgAEBBAAC/wHgAQ8EAAs=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="listViewProxies.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.Name" xml:space="preserve">
|
<data name=">>listViewProxies.Name" xml:space="preserve">
|
||||||
<value>listView1</value>
|
<value>listViewProxies</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.Type" xml:space="preserve">
|
<data name=">>listViewProxies.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.Parent" xml:space="preserve">
|
<data name=">>listViewProxies.Parent" xml:space="preserve">
|
||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.ZOrder" xml:space="preserve">
|
<data name=">>listViewProxies.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<data name="toolStripMenuItem_Enable.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Enable.Text" xml:space="preserve">
|
||||||
|
<value>Enable (&E)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Disable.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Disable.Text" xml:space="preserve">
|
||||||
|
<value>Disable (&I)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>151, 6</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_New.Text" xml:space="preserve">
|
||||||
|
<value>New (&N) ...</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
|
||||||
|
<value>Modify (&M) ...</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
|
||||||
|
<value>Delete (&D)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>151, 6</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
|
||||||
|
<value>Refresh (&F)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>151, 6</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_About.Text" xml:space="preserve">
|
||||||
|
<value>About</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
<value>6, 12</value>
|
<value>6, 12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>573, 262</value>
|
<value>624, 361</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
|
@ -2402,78 +2474,108 @@
|
||||||
<value>columnHeader1</value>
|
<value>columnHeader1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader1.Type" xml:space="preserve">
|
<data name=">>columnHeader1.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader2.Name" xml:space="preserve">
|
<data name=">>columnHeader2.Name" xml:space="preserve">
|
||||||
<value>columnHeader2</value>
|
<value>columnHeader2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader2.Type" xml:space="preserve">
|
<data name=">>columnHeader2.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader3.Name" xml:space="preserve">
|
<data name=">>columnHeader3.Name" xml:space="preserve">
|
||||||
<value>columnHeader3</value>
|
<value>columnHeader3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader3.Type" xml:space="preserve">
|
<data name=">>columnHeader3.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader4.Name" xml:space="preserve">
|
<data name=">>columnHeader4.Name" xml:space="preserve">
|
||||||
<value>columnHeader4</value>
|
<value>columnHeader4</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader4.Type" xml:space="preserve">
|
<data name=">>columnHeader4.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader5.Name" xml:space="preserve">
|
<data name=">>columnHeader5.Name" xml:space="preserve">
|
||||||
<value>columnHeader5</value>
|
<value>columnHeader5</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader5.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader6.Name" xml:space="preserve">
|
||||||
|
<value>columnHeader6</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader6.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Enable.Name" xml:space="preserve">
|
||||||
|
<value>toolStripMenuItem_Enable</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Enable.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Disable.Name" xml:space="preserve">
|
||||||
|
<value>toolStripMenuItem_Disable</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Disable.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripSeparator3.Name" xml:space="preserve">
|
||||||
|
<value>toolStripSeparator3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripSeparator3.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_New.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_New.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_New</value>
|
<value>toolStripMenuItem_New</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_New.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_Modify</value>
|
<value>toolStripMenuItem_Modify</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Modify.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_Delete</value>
|
<value>toolStripMenuItem_Delete</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Delete.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator1.Name" xml:space="preserve">
|
<data name=">>toolStripSeparator1.Name" xml:space="preserve">
|
||||||
<value>toolStripSeparator1</value>
|
<value>toolStripSeparator1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator1.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_Refresh</value>
|
<value>toolStripMenuItem_Refresh</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Refresh.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator2.Name" xml:space="preserve">
|
<data name=">>toolStripSeparator2.Name" xml:space="preserve">
|
||||||
<value>toolStripSeparator2</value>
|
<value>toolStripSeparator2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator2.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_About.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_About.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_About</value>
|
<value>toolStripMenuItem_About</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_About.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>imageListProxies.Name" xml:space="preserve">
|
||||||
|
<value>imageListProxies</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>imageListProxies.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
<value>PortProxyGUI</value>
|
<value>PortProxyGUI</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,16 +1,20 @@
|
||||||
using System;
|
using PortProxyGUI.Data;
|
||||||
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace PortProxyGUI
|
namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
static class Program
|
static class Program
|
||||||
{
|
{
|
||||||
|
public static readonly ApplicationDbScope SqliteDbScope = ApplicationDbScope.UseDefault();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main entry point for the application.
|
/// The main entry point for the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[STAThread]
|
[STAThread]
|
||||||
static void Main()
|
static void Main()
|
||||||
{
|
{
|
||||||
|
SqliteDbScope.Migrate();
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
Application.Run(new PortProxyGUI());
|
Application.Run(new PortProxyGUI());
|
||||||
|
|
|
@ -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.5.0")]
|
[assembly: AssemblyVersion("1.1.0.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.5.0")]
|
[assembly: AssemblyFileVersion("1.1.0.0")]
|
||||||
|
|
|
@ -9,8 +9,8 @@ namespace PortProxyGUI
|
||||||
public partial class SetProxyForm : Form
|
public partial class SetProxyForm : Form
|
||||||
{
|
{
|
||||||
public readonly PortProxyGUI PortProxyGUI;
|
public readonly PortProxyGUI PortProxyGUI;
|
||||||
public bool UpdateMode { get; private set; }
|
|
||||||
private string AutoTypeString { get; }
|
private string AutoTypeString { get; }
|
||||||
|
private ListViewItem _updateLiveViewItem;
|
||||||
|
|
||||||
public SetProxyForm(PortProxyGUI portProxyGUI)
|
public SetProxyForm(PortProxyGUI portProxyGUI)
|
||||||
{
|
{
|
||||||
|
@ -29,11 +29,11 @@ namespace PortProxyGUI
|
||||||
textBox_listenPort.Text = "";
|
textBox_listenPort.Text = "";
|
||||||
textBox_connectTo.Text = "";
|
textBox_connectTo.Text = "";
|
||||||
textBox_connectPort.Text = "";
|
textBox_connectPort.Text = "";
|
||||||
UpdateMode = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UseUpdateMode(string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
public void UseUpdateMode(ListViewItem item, string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||||
{
|
{
|
||||||
|
_updateLiveViewItem = item;
|
||||||
comboBox_type.Enabled = false;
|
comboBox_type.Enabled = false;
|
||||||
textBox_listenOn.Enabled = false;
|
textBox_listenOn.Enabled = false;
|
||||||
textBox_listenPort.Enabled = false;
|
textBox_listenPort.Enabled = false;
|
||||||
|
@ -42,19 +42,8 @@ namespace PortProxyGUI
|
||||||
textBox_listenPort.Text = listenPort;
|
textBox_listenPort.Text = listenPort;
|
||||||
textBox_connectTo.Text = connectTo;
|
textBox_connectTo.Text = connectTo;
|
||||||
textBox_connectPort.Text = connectPort;
|
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()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsIPv4(string ip)
|
|
||||||
{
|
|
||||||
return ip.IsMatch(new Regex(@"^(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])){3}$"));
|
|
||||||
}
|
|
||||||
private bool IsIPv6(string ip)
|
private bool IsIPv6(string ip)
|
||||||
{
|
{
|
||||||
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
|
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
|
||||||
|
@ -95,7 +84,28 @@ namespace PortProxyGUI
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetPortProxy(type, UpdateMode ? "set" : "add", listenOn, listenPort, connectTo, connectPort);
|
if (_updateLiveViewItem != null)
|
||||||
|
{
|
||||||
|
var rule = Program.SqliteDbScope.GetRule(type, listenOn, _listenPort);
|
||||||
|
rule.ConnectTo = connectTo;
|
||||||
|
rule.ConnectPort = _connectPort;
|
||||||
|
Program.SqliteDbScope.Update(rule);
|
||||||
|
CmdUtil.AddProxy("set", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||||
|
|
||||||
|
_updateLiveViewItem.ImageIndex = 1;
|
||||||
|
var subItems = _updateLiveViewItem.SubItems;
|
||||||
|
subItems[1].Text = type;
|
||||||
|
subItems[2].Text = listenOn;
|
||||||
|
subItems[3].Text = _listenPort.ToString();
|
||||||
|
subItems[4].Text = connectTo;
|
||||||
|
subItems[5].Text = _connectPort.ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CmdUtil.AddProxy("add", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||||
|
PortProxyGUI.RefreshProxyList();
|
||||||
|
}
|
||||||
|
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,13 +112,13 @@
|
||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<resheader name="reader">
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="label1.Text" xml:space="preserve">
|
<data name="label1.Text" xml:space="preserve">
|
||||||
<value>侦听地址</value>
|
<value>监听地址</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label1.Name" xml:space="preserve">
|
<data name=">>label1.Name" xml:space="preserve">
|
||||||
<value>label1</value>
|
<value>label1</value>
|
||||||
|
@ -291,18 +291,18 @@
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
<value>6, 12</value>
|
<value>6, 12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>313, 95</value>
|
<value>313, 95</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<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>
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
|
||||||
|
</configuration>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="NStandard" version="0.6.7.1" targetFramework="net35" />
|
||||||
|
<package id="SQLib" version="0.8.6" targetFramework="net35" />
|
||||||
|
<package id="SQLib.Sqlite" version="0.8.6" targetFramework="net35" />
|
||||||
|
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net35" />
|
||||||
|
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net35" />
|
||||||
|
</packages>
|
|
@ -28,6 +28,8 @@
|
||||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
@ -45,7 +47,7 @@
|
||||||
<DebugType>none</DebugType>
|
<DebugType>none</DebugType>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE;NET45</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
@ -72,8 +74,23 @@
|
||||||
<TargetZone>LocalIntranet</TargetZone>
|
<TargetZone>LocalIntranet</TargetZone>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="NStandard, Version=0.6.7.1, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NStandard.0.6.7.1\lib\net45\NStandard.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SQLib, Version=0.8.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SQLib.0.8.6\lib\net45\SQLib.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SQLib.Sqlite, Version=0.8.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SQLib.Sqlite.0.8.6\lib\net45\SQLib.Sqlite.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.ComponentModel.Composition" />
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net45\System.Data.SQLite.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Web" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
|
@ -109,6 +126,9 @@
|
||||||
<EmbeddedResource Include="About.zh-CN.resx">
|
<EmbeddedResource Include="About.zh-CN.resx">
|
||||||
<DependentUpon>About.cs</DependentUpon>
|
<DependentUpon>About.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="PortProxyGUI.zh-CN.resx">
|
||||||
|
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="SetProxyForm.resx">
|
<EmbeddedResource Include="SetProxyForm.resx">
|
||||||
<DependentUpon>SetProxyForm.cs</DependentUpon>
|
<DependentUpon>SetProxyForm.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
@ -117,9 +137,7 @@
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="PortProxyGUI.resx">
|
<EmbeddedResource Include="PortProxyGUI.resx">
|
||||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
<SubType>Designer</SubType>
|
||||||
<EmbeddedResource Include="PortProxyGUI.zh-CN.resx">
|
|
||||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
@ -133,6 +151,7 @@
|
||||||
</Compile>
|
</Compile>
|
||||||
<None Include="app.config" />
|
<None Include="app.config" />
|
||||||
<None Include="app.manifest" />
|
<None Include="app.manifest" />
|
||||||
|
<None Include="packages.config" />
|
||||||
<None Include="Properties\Settings.settings">
|
<None Include="Properties\Settings.settings">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
@ -155,4 +174,11 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="..\PortProxyGUI.Shared\PortProxyGUI.Shared.projitems" Label="Shared" />
|
<Import Project="..\PortProxyGUI.Shared\PortProxyGUI.Shared.projitems" Label="Shared" />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
|
||||||
|
</Target>
|
||||||
|
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
|
||||||
</Project>
|
</Project>
|
|
@ -30,13 +30,17 @@
|
||||||
{
|
{
|
||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortProxyGUI));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortProxyGUI));
|
||||||
this.listView1 = new System.Windows.Forms.ListView();
|
this.listViewProxies = new System.Windows.Forms.ListView();
|
||||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
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.columnHeader6 = ((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.toolStripMenuItem_Enable = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.toolStripMenuItem_Disable = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -44,27 +48,31 @@
|
||||||
this.toolStripMenuItem_Refresh = 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.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.imageListProxies = new System.Windows.Forms.ImageList(this.components);
|
||||||
this.contextMenuStrip1.SuspendLayout();
|
this.contextMenuStrip1.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// listView1
|
// listViewProxies
|
||||||
//
|
//
|
||||||
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
this.listViewProxies.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.listViewProxies.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
this.columnHeader1,
|
this.columnHeader1,
|
||||||
this.columnHeader2,
|
this.columnHeader2,
|
||||||
this.columnHeader3,
|
this.columnHeader3,
|
||||||
this.columnHeader4,
|
this.columnHeader4,
|
||||||
this.columnHeader5});
|
this.columnHeader5,
|
||||||
this.listView1.ContextMenuStrip = this.contextMenuStrip1;
|
this.columnHeader6});
|
||||||
resources.ApplyResources(this.listView1, "listView1");
|
this.listViewProxies.ContextMenuStrip = this.contextMenuStrip1;
|
||||||
this.listView1.FullRowSelect = true;
|
resources.ApplyResources(this.listViewProxies, "listViewProxies");
|
||||||
this.listView1.HideSelection = false;
|
this.listViewProxies.FullRowSelect = true;
|
||||||
this.listView1.Name = "listView1";
|
this.listViewProxies.HideSelection = false;
|
||||||
this.listView1.UseCompatibleStateImageBehavior = false;
|
this.listViewProxies.Name = "listViewProxies";
|
||||||
this.listView1.View = System.Windows.Forms.View.Details;
|
this.listViewProxies.SmallImageList = this.imageListProxies;
|
||||||
this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
this.listViewProxies.UseCompatibleStateImageBehavior = false;
|
||||||
this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
this.listViewProxies.View = System.Windows.Forms.View.Details;
|
||||||
this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
this.listViewProxies.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||||
|
this.listViewProxies.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
||||||
|
this.listViewProxies.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
||||||
//
|
//
|
||||||
// columnHeader1
|
// columnHeader1
|
||||||
//
|
//
|
||||||
|
@ -86,20 +94,42 @@
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.columnHeader5, "columnHeader5");
|
resources.ApplyResources(this.columnHeader5, "columnHeader5");
|
||||||
//
|
//
|
||||||
|
// columnHeader6
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader6, "columnHeader6");
|
||||||
|
//
|
||||||
// contextMenuStrip1
|
// contextMenuStrip1
|
||||||
//
|
//
|
||||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.toolStripMenuItem_Enable,
|
||||||
|
this.toolStripMenuItem_Disable,
|
||||||
|
this.toolStripSeparator3,
|
||||||
|
this.toolStripMenuItem_Refresh,
|
||||||
|
this.toolStripSeparator2,
|
||||||
this.toolStripMenuItem_New,
|
this.toolStripMenuItem_New,
|
||||||
this.toolStripMenuItem_Modify,
|
this.toolStripMenuItem_Modify,
|
||||||
this.toolStripMenuItem_Delete,
|
this.toolStripMenuItem_Delete,
|
||||||
this.toolStripSeparator1,
|
this.toolStripSeparator1,
|
||||||
this.toolStripMenuItem_Refresh,
|
|
||||||
this.toolStripSeparator2,
|
|
||||||
this.toolStripMenuItem_About});
|
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);
|
||||||
//
|
//
|
||||||
|
// toolStripMenuItem_Enable
|
||||||
|
//
|
||||||
|
this.toolStripMenuItem_Enable.Name = "toolStripMenuItem_Enable";
|
||||||
|
resources.ApplyResources(this.toolStripMenuItem_Enable, "toolStripMenuItem_Enable");
|
||||||
|
//
|
||||||
|
// toolStripMenuItem_Disable
|
||||||
|
//
|
||||||
|
this.toolStripMenuItem_Disable.Name = "toolStripMenuItem_Disable";
|
||||||
|
resources.ApplyResources(this.toolStripMenuItem_Disable, "toolStripMenuItem_Disable");
|
||||||
|
//
|
||||||
|
// toolStripSeparator3
|
||||||
|
//
|
||||||
|
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
||||||
|
//
|
||||||
// toolStripMenuItem_New
|
// toolStripMenuItem_New
|
||||||
//
|
//
|
||||||
this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
|
this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
|
||||||
|
@ -135,13 +165,21 @@
|
||||||
this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
|
this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
|
||||||
resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
|
resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
|
||||||
//
|
//
|
||||||
|
// imageListProxies
|
||||||
|
//
|
||||||
|
this.imageListProxies.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListProxies.ImageStream")));
|
||||||
|
this.imageListProxies.TransparentColor = System.Drawing.Color.Transparent;
|
||||||
|
this.imageListProxies.Images.SetKeyName(0, "disable.png");
|
||||||
|
this.imageListProxies.Images.SetKeyName(1, "enable.png");
|
||||||
|
//
|
||||||
// PortProxyGUI
|
// PortProxyGUI
|
||||||
//
|
//
|
||||||
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.listView1);
|
this.Controls.Add(this.listViewProxies);
|
||||||
this.Name = "PortProxyGUI";
|
this.Name = "PortProxyGUI";
|
||||||
this.Load += new System.EventHandler(this.PortProxyGUI_Load);
|
this.Load += new System.EventHandler(this.PortProxyGUI_Load);
|
||||||
|
this.Shown += new System.EventHandler(this.PortProxyGUI_Shown);
|
||||||
this.contextMenuStrip1.ResumeLayout(false);
|
this.contextMenuStrip1.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
@ -149,20 +187,25 @@
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.ListView listView1;
|
private System.Windows.Forms.ListView listViewProxies;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
private System.Windows.Forms.ColumnHeader columnHeader5;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader5;
|
private System.Windows.Forms.ColumnHeader columnHeader6;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||||
|
private System.Windows.Forms.ImageList imageListProxies;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Enable;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Disable;
|
||||||
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using static System.Windows.Forms.ListViewItem;
|
using static System.Windows.Forms.ListViewItem;
|
||||||
|
|
||||||
|
@ -18,80 +17,81 @@ namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
lvwColumnSorter = new ListViewColumnSorter();
|
lvwColumnSorter = new ListViewColumnSorter();
|
||||||
listView1.ListViewItemSorter = lvwColumnSorter;
|
listViewProxies.ListViewItemSorter = lvwColumnSorter;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PortProxyGUI_Load(object sender, EventArgs e)
|
private void PortProxyGUI_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PortProxyGUI_Shown(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
RefreshProxyList();
|
RefreshProxyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void EnableSelectedProxies()
|
||||||
|
{
|
||||||
|
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
item.ImageIndex = 1;
|
||||||
|
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||||
|
CmdUtil.AddProxy("add", subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text), subItems[4].Text, int.Parse(subItems[5].Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DisableSelectedProxies()
|
||||||
|
{
|
||||||
|
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
item.ImageIndex = 0;
|
||||||
|
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||||
|
CmdUtil.DeleteProxy(subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void DeleteSelectedProxies()
|
private void DeleteSelectedProxies()
|
||||||
{
|
{
|
||||||
var items = listView1.SelectedItems.OfType<ListViewItem>();
|
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||||
foreach (var item in items)
|
DisableSelectedProxies();
|
||||||
{
|
Program.SqliteDbScope.RemoveRange(items.Select(x => new Data.Rule { Id = x.Tag.ToString() }));
|
||||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
foreach (var item in items) listViewProxies.Items.Remove(item);
|
||||||
var type = subItems[0].Text;
|
|
||||||
var listenOn = subItems[1].Text;
|
|
||||||
var listenPort = subItems[2].Text;
|
|
||||||
var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
|
|
||||||
}
|
|
||||||
RefreshProxyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetProxyForUpdate(SetProxyForm form)
|
private void SetProxyForUpdate(SetProxyForm form)
|
||||||
{
|
{
|
||||||
var item = listView1.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
var item = listViewProxies.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
||||||
{
|
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
form.UseUpdateMode(item, subItems[1].Text, subItems[2].Text, subItems[3].Text, subItems[4].Text, subItems[5].Text);
|
||||||
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 proxies = CmdUtil.GetProxies();
|
||||||
var types = new[]
|
var rules = Program.SqliteDbScope.Rules;
|
||||||
{
|
|
||||||
new ProxyType("ipv4", "ipv4"),
|
|
||||||
new ProxyType("ipv4", "ipv6"),
|
|
||||||
new ProxyType("ipv6", "ipv4"),
|
|
||||||
new ProxyType("ipv6", "ipv6"),
|
|
||||||
};
|
|
||||||
|
|
||||||
var proxies = types.SelectMany(type =>
|
|
||||||
{
|
|
||||||
var typeProxies = output
|
|
||||||
.Project(new Regex($@"{type.From}:[^\n]+?{type.To}:\r\n\r\n.+?\r\n--------------- ---------- --------------- ----------\r\n(.+?)\r\n\r\n", RegexOptions.Singleline))
|
|
||||||
?.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
|
|
||||||
.Select(line =>
|
|
||||||
{
|
|
||||||
var parts = line.Resolve(new Regex(@"^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)$"));
|
|
||||||
return new PortProxy
|
|
||||||
{
|
|
||||||
Type = type.Type,
|
|
||||||
ListenOn = parts[1].FirstOrDefault(),
|
|
||||||
ListenPort = parts[2].FirstOrDefault(),
|
|
||||||
ConnectTo = parts[3].FirstOrDefault(),
|
|
||||||
ConnectPort = parts[4].FirstOrDefault(),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
return typeProxies ?? new PortProxy[0];
|
|
||||||
});
|
|
||||||
|
|
||||||
listView1.Items.Clear();
|
|
||||||
foreach (var proxy in proxies)
|
foreach (var proxy in proxies)
|
||||||
{
|
{
|
||||||
listView1.Items.Add(new ListViewItem(proxy.Type).Then(vitem =>
|
var matchedRule = rules.FirstOrDefault(r => r.EqualsWithKeys(proxy));
|
||||||
|
proxy.Id = matchedRule?.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pendingAdds = proxies.Where(x => x.Id == null);
|
||||||
|
var pendingUpdates = proxies.Where(x => x.Id != null && !x.Equals(rules.First(r => r.Id == x.Id)));
|
||||||
|
|
||||||
|
Program.SqliteDbScope.AddRange(pendingAdds);
|
||||||
|
Program.SqliteDbScope.UpdateRange(pendingUpdates);
|
||||||
|
|
||||||
|
listViewProxies.Items.Clear();
|
||||||
|
rules = Program.SqliteDbScope.Rules;
|
||||||
|
foreach (var rule in rules)
|
||||||
|
{
|
||||||
|
var imageIndex = proxies.Any(p => p.EqualsWithKeys(rule)) ? 1 : 0;
|
||||||
|
var item = new ListViewItem { ImageIndex = imageIndex, Tag = rule.Id }.Then(vitem =>
|
||||||
{
|
{
|
||||||
vitem.SubItems.AddRange(new[] { proxy.ListenOn, proxy.ListenPort, proxy.ConnectTo, proxy.ConnectPort });
|
vitem.SubItems.AddRange(new[] { rule.Type, rule.ListenOn, rule.ListenPort.ToString(), rule.ConnectTo, rule.ConnectPort.ToString() });
|
||||||
}));
|
});
|
||||||
|
listViewProxies.Items.Add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,27 +99,33 @@ namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
if (sender is ContextMenuStrip _sender)
|
if (sender is ContextMenuStrip _sender)
|
||||||
{
|
{
|
||||||
var selected = _sender.Items.OfType<ToolStripItem>().Where(x => x.Selected).FirstOrDefault();
|
var selected = _sender.Items.OfType<ToolStripMenuItem>().Where(x => x.Selected).FirstOrDefault();
|
||||||
if (selected is null || !selected.Enabled) return;
|
if (selected is null || !selected.Enabled) return;
|
||||||
|
|
||||||
switch (selected.Text)
|
switch (selected)
|
||||||
{
|
{
|
||||||
case string s when s == toolStripMenuItem_New.Text:
|
case ToolStripMenuItem item when item == toolStripMenuItem_Enable: EnableSelectedProxies(); break;
|
||||||
|
case ToolStripMenuItem item when item == toolStripMenuItem_Disable: DisableSelectedProxies(); break;
|
||||||
|
|
||||||
|
case ToolStripMenuItem item when item == toolStripMenuItem_New:
|
||||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||||
SetProxyForm.UseNormalMode();
|
SetProxyForm.UseNormalMode();
|
||||||
SetProxyForm.Show();
|
SetProxyForm.Show();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case string s when s == toolStripMenuItem_Modify.Text:
|
case ToolStripMenuItem item when item == toolStripMenuItem_Modify:
|
||||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||||
SetProxyForUpdate(SetProxyForm);
|
SetProxyForUpdate(SetProxyForm);
|
||||||
SetProxyForm.Show();
|
SetProxyForm.Show();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case string s when s == toolStripMenuItem_Refresh.Text: RefreshProxyList(); break;
|
case ToolStripMenuItem item when item == toolStripMenuItem_Refresh:
|
||||||
case string s when s == toolStripMenuItem_Delete.Text: DeleteSelectedProxies(); break;
|
RefreshProxyList();
|
||||||
|
break;
|
||||||
|
|
||||||
case string s when s == toolStripMenuItem_About.Text:
|
case ToolStripMenuItem item when item == toolStripMenuItem_Delete: DeleteSelectedProxies(); break;
|
||||||
|
|
||||||
|
case ToolStripMenuItem item when item == toolStripMenuItem_About:
|
||||||
if (AboutForm == null)
|
if (AboutForm == null)
|
||||||
{
|
{
|
||||||
AboutForm = new About(this);
|
AboutForm = new About(this);
|
||||||
|
@ -135,9 +141,11 @@ namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
if (sender is ListView _sender)
|
if (sender is ListView _sender)
|
||||||
{
|
{
|
||||||
var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
toolStripMenuItem_Enable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 0);
|
||||||
toolStripMenuItem_Delete.Enabled = selectAny;
|
toolStripMenuItem_Disable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 1);
|
||||||
toolStripMenuItem_Modify.Enabled = selectAny;
|
|
||||||
|
toolStripMenuItem_Delete.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
||||||
|
toolStripMenuItem_Modify.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Count() == 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +186,8 @@ namespace PortProxyGUI
|
||||||
}
|
}
|
||||||
|
|
||||||
// Perform the sort with these new sort options.
|
// Perform the sort with these new sort options.
|
||||||
listView1.Sort();
|
listViewProxies.Sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,124 +112,196 @@
|
||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<resheader name="reader">
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="columnHeader1.Text" xml:space="preserve">
|
<data name="columnHeader1.Text" xml:space="preserve">
|
||||||
<value>Type</value>
|
<value />
|
||||||
|
</data>
|
||||||
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="columnHeader1.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>24</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader2.Text" xml:space="preserve">
|
<data name="columnHeader2.Text" xml:space="preserve">
|
||||||
<value>Listen on</value>
|
<value>Type</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
||||||
<value>140</value>
|
<value>64</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader3.Text" xml:space="preserve">
|
<data name="columnHeader3.Text" xml:space="preserve">
|
||||||
<value>Listen port</value>
|
<value>Listen on</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
||||||
<value>100</value>
|
|
||||||
</data>
|
|
||||||
<data name="columnHeader4.Text" xml:space="preserve">
|
|
||||||
<value>Connect to</value>
|
|
||||||
</data>
|
|
||||||
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
|
||||||
<value>140</value>
|
<value>140</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader5.Text" xml:space="preserve">
|
<data name="columnHeader4.Text" xml:space="preserve">
|
||||||
<value>Connect port</value>
|
<value>Listen port</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||||
<value>100</value>
|
<value>100</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<data name="columnHeader5.Text" xml:space="preserve">
|
||||||
|
<value>Connect to</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>140</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader6.Text" xml:space="preserve">
|
||||||
|
<value>Connect port</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader6.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>100</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<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=4.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>181, 148</value>
|
<value>155, 176</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
||||||
<value>contextMenuStrip1</value>
|
<value>contextMenuStrip1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="listView1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
<data name="listViewProxies.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>Fill</value>
|
<value>Fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="listView1.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="listViewProxies.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 0</value>
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="listView1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="listViewProxies.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="listView1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="listViewProxies.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>573, 262</value>
|
<value>624, 361</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="listView1.TabIndex" type="System.Int32, mscorlib">
|
<metadata name="imageListProxies.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>182, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="imageListProxies.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||||
|
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||||
|
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc
|
||||||
|
CAAAAk1TRnQBSQFMAgEBAgEAAUABAAFAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||||
|
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||||
|
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||||
|
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||||
|
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
|
||||||
|
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
|
||||||
|
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
|
||||||
|
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
|
||||||
|
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
|
||||||
|
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
|
||||||
|
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
|
||||||
|
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
|
||||||
|
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
|
||||||
|
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
|
||||||
|
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
|
||||||
|
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
|
||||||
|
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
|
||||||
|
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
|
||||||
|
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
|
||||||
|
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
|
||||||
|
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
|
||||||
|
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
|
||||||
|
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
|
||||||
|
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
|
||||||
|
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
|
||||||
|
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
|
||||||
|
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
|
||||||
|
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
|
||||||
|
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wQACvQ0AAH/AZQKFwGU
|
||||||
|
Af8CAAH/AboKlQG6Af8iAAGUDBcBlAIAAboMlQG6IgAOFwIADpUiAAQXARYB9AL/AfQBFgQXAgAOlSIA
|
||||||
|
AxcBFgH/Ab0BFgGUAfQB/wEWAxcCAAWVArsHlSIAAxcB9AG9AhcBlAH/AvQDFwIABJUBugL/AcEGlSIA
|
||||||
|
AxcB/wEWARcBlAH/ApQB/wMXAgADlQG6Af8BwQG6Af8BwQWVIgADFwH/ApQB/wGUARcBFgH/AxcCAAOV
|
||||||
|
Af8BwQKVAboB/wHBBJUiAAMXAvQB/wGUAhcBvQH0AxcCAAiVAboB/wHBA5UiAAMXARYB/wH0AZQBFgG9
|
||||||
|
Af8BFgMXAgAJlQG6Af8DlSIABBcBFgH0Av8B9AEWBBcB/wEADpUB/yEADhcB/wEADpUB/yEAAZQMFwGU
|
||||||
|
AgABugyVAboiAAH/AZQKFwGUAf8CAAH/AboKlQG6Af80AAH/CPQkAAFCAU0BPgcAAT4DAAEoAwABQAMA
|
||||||
|
ARADAAEBAQABAQUAAYAXAAP/AQAB4AEHAv8EAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||||
|
AQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||||
|
AQEBgAEBBAABgAEAAYAFAAGAAQABgAUAAYABAQGAAQEEAAGAAQEBgAEBBAAC/wHgAQ8EAAs=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="listViewProxies.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.Name" xml:space="preserve">
|
<data name=">>listViewProxies.Name" xml:space="preserve">
|
||||||
<value>listView1</value>
|
<value>listViewProxies</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.Type" xml:space="preserve">
|
<data name=">>listViewProxies.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.Parent" xml:space="preserve">
|
<data name=">>listViewProxies.Parent" xml:space="preserve">
|
||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.ZOrder" xml:space="preserve">
|
<data name=">>listViewProxies.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<data name="toolStripMenuItem_Enable.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Enable.Text" xml:space="preserve">
|
||||||
|
<value>Enable (&E)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Disable.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Disable.Text" xml:space="preserve">
|
||||||
|
<value>Disable (&I)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>151, 6</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_New.Text" xml:space="preserve">
|
||||||
|
<value>New (&N) ...</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
|
||||||
|
<value>Modify (&M) ...</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
|
||||||
|
<value>Delete (&D)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>151, 6</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
|
||||||
|
<value>Refresh (&F)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>151, 6</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_About.Text" xml:space="preserve">
|
||||||
|
<value>About</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
<value>6, 12</value>
|
<value>6, 12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>573, 262</value>
|
<value>624, 361</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
|
@ -2402,78 +2474,108 @@
|
||||||
<value>columnHeader1</value>
|
<value>columnHeader1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader1.Type" xml:space="preserve">
|
<data name=">>columnHeader1.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader2.Name" xml:space="preserve">
|
<data name=">>columnHeader2.Name" xml:space="preserve">
|
||||||
<value>columnHeader2</value>
|
<value>columnHeader2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader2.Type" xml:space="preserve">
|
<data name=">>columnHeader2.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader3.Name" xml:space="preserve">
|
<data name=">>columnHeader3.Name" xml:space="preserve">
|
||||||
<value>columnHeader3</value>
|
<value>columnHeader3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader3.Type" xml:space="preserve">
|
<data name=">>columnHeader3.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader4.Name" xml:space="preserve">
|
<data name=">>columnHeader4.Name" xml:space="preserve">
|
||||||
<value>columnHeader4</value>
|
<value>columnHeader4</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader4.Type" xml:space="preserve">
|
<data name=">>columnHeader4.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader5.Name" xml:space="preserve">
|
<data name=">>columnHeader5.Name" xml:space="preserve">
|
||||||
<value>columnHeader5</value>
|
<value>columnHeader5</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader5.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader6.Name" xml:space="preserve">
|
||||||
|
<value>columnHeader6</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader6.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Enable.Name" xml:space="preserve">
|
||||||
|
<value>toolStripMenuItem_Enable</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Enable.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Disable.Name" xml:space="preserve">
|
||||||
|
<value>toolStripMenuItem_Disable</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Disable.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripSeparator3.Name" xml:space="preserve">
|
||||||
|
<value>toolStripSeparator3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripSeparator3.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_New.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_New.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_New</value>
|
<value>toolStripMenuItem_New</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_New.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_Modify</value>
|
<value>toolStripMenuItem_Modify</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Modify.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_Delete</value>
|
<value>toolStripMenuItem_Delete</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Delete.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator1.Name" xml:space="preserve">
|
<data name=">>toolStripSeparator1.Name" xml:space="preserve">
|
||||||
<value>toolStripSeparator1</value>
|
<value>toolStripSeparator1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator1.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_Refresh</value>
|
<value>toolStripMenuItem_Refresh</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Refresh.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator2.Name" xml:space="preserve">
|
<data name=">>toolStripSeparator2.Name" xml:space="preserve">
|
||||||
<value>toolStripSeparator2</value>
|
<value>toolStripSeparator2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator2.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_About.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_About.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_About</value>
|
<value>toolStripMenuItem_About</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_About.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>imageListProxies.Name" xml:space="preserve">
|
||||||
|
<value>imageListProxies</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>imageListProxies.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
<value>PortProxyGUI</value>
|
<value>PortProxyGUI</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,16 +1,20 @@
|
||||||
using System;
|
using PortProxyGUI.Data;
|
||||||
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace PortProxyGUI
|
namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
static class Program
|
static class Program
|
||||||
{
|
{
|
||||||
|
public static readonly ApplicationDbScope SqliteDbScope = ApplicationDbScope.UseDefault();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main entry point for the application.
|
/// The main entry point for the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[STAThread]
|
[STAThread]
|
||||||
static void Main()
|
static void Main()
|
||||||
{
|
{
|
||||||
|
SqliteDbScope.Migrate();
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
Application.Run(new PortProxyGUI());
|
Application.Run(new PortProxyGUI());
|
||||||
|
|
|
@ -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.5.0")]
|
[assembly: AssemblyVersion("1.1.0.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.5.0")]
|
[assembly: AssemblyFileVersion("1.1.0.0")]
|
||||||
|
|
|
@ -9,8 +9,8 @@ namespace PortProxyGUI
|
||||||
public partial class SetProxyForm : Form
|
public partial class SetProxyForm : Form
|
||||||
{
|
{
|
||||||
public readonly PortProxyGUI PortProxyGUI;
|
public readonly PortProxyGUI PortProxyGUI;
|
||||||
public bool UpdateMode { get; private set; }
|
|
||||||
private string AutoTypeString { get; }
|
private string AutoTypeString { get; }
|
||||||
|
private ListViewItem _updateLiveViewItem;
|
||||||
|
|
||||||
public SetProxyForm(PortProxyGUI portProxyGUI)
|
public SetProxyForm(PortProxyGUI portProxyGUI)
|
||||||
{
|
{
|
||||||
|
@ -29,11 +29,11 @@ namespace PortProxyGUI
|
||||||
textBox_listenPort.Text = "";
|
textBox_listenPort.Text = "";
|
||||||
textBox_connectTo.Text = "";
|
textBox_connectTo.Text = "";
|
||||||
textBox_connectPort.Text = "";
|
textBox_connectPort.Text = "";
|
||||||
UpdateMode = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UseUpdateMode(string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
public void UseUpdateMode(ListViewItem item, string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||||
{
|
{
|
||||||
|
_updateLiveViewItem = item;
|
||||||
comboBox_type.Enabled = false;
|
comboBox_type.Enabled = false;
|
||||||
textBox_listenOn.Enabled = false;
|
textBox_listenOn.Enabled = false;
|
||||||
textBox_listenPort.Enabled = false;
|
textBox_listenPort.Enabled = false;
|
||||||
|
@ -42,19 +42,8 @@ namespace PortProxyGUI
|
||||||
textBox_listenPort.Text = listenPort;
|
textBox_listenPort.Text = listenPort;
|
||||||
textBox_connectTo.Text = connectTo;
|
textBox_connectTo.Text = connectTo;
|
||||||
textBox_connectPort.Text = connectPort;
|
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()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsIPv4(string ip)
|
|
||||||
{
|
|
||||||
return ip.IsMatch(new Regex(@"^(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])){3}$"));
|
|
||||||
}
|
|
||||||
private bool IsIPv6(string ip)
|
private bool IsIPv6(string ip)
|
||||||
{
|
{
|
||||||
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
|
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
|
||||||
|
@ -95,7 +84,28 @@ namespace PortProxyGUI
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetPortProxy(type, UpdateMode ? "set" : "add", listenOn, listenPort, connectTo, connectPort);
|
if (_updateLiveViewItem != null)
|
||||||
|
{
|
||||||
|
var rule = Program.SqliteDbScope.GetRule(type, listenOn, _listenPort);
|
||||||
|
rule.ConnectTo = connectTo;
|
||||||
|
rule.ConnectPort = _connectPort;
|
||||||
|
Program.SqliteDbScope.Update(rule);
|
||||||
|
CmdUtil.AddProxy("set", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||||
|
|
||||||
|
_updateLiveViewItem.ImageIndex = 1;
|
||||||
|
var subItems = _updateLiveViewItem.SubItems;
|
||||||
|
subItems[1].Text = type;
|
||||||
|
subItems[2].Text = listenOn;
|
||||||
|
subItems[3].Text = _listenPort.ToString();
|
||||||
|
subItems[4].Text = connectTo;
|
||||||
|
subItems[5].Text = _connectPort.ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CmdUtil.AddProxy("add", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||||
|
PortProxyGUI.RefreshProxyList();
|
||||||
|
}
|
||||||
|
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,13 +112,13 @@
|
||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<resheader name="reader">
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="label1.Text" xml:space="preserve">
|
<data name="label1.Text" xml:space="preserve">
|
||||||
<value>侦听地址</value>
|
<value>监听地址</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label1.Name" xml:space="preserve">
|
<data name=">>label1.Name" xml:space="preserve">
|
||||||
<value>label1</value>
|
<value>label1</value>
|
||||||
|
@ -291,18 +291,18 @@
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
<value>6, 12</value>
|
<value>6, 12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>313, 95</value>
|
<value>313, 95</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<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>
|
||||||
|
|
|
@ -1,3 +1,17 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
<configSections>
|
||||||
|
|
||||||
|
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
|
</configSections>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||||
|
</startup>
|
||||||
|
<entityFramework>
|
||||||
|
<providers>
|
||||||
|
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
|
||||||
|
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
|
||||||
|
</providers>
|
||||||
|
</entityFramework>
|
||||||
|
|
||||||
|
</configuration>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="NStandard" version="0.6.7.1" targetFramework="net45" />
|
||||||
|
<package id="SQLib" version="0.8.6" targetFramework="net45" />
|
||||||
|
<package id="SQLib.Sqlite" version="0.8.6" targetFramework="net45" />
|
||||||
|
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net45" />
|
||||||
|
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net45" />
|
||||||
|
<package id="System.Runtime" version="4.3.1" targetFramework="net45" />
|
||||||
|
</packages>
|
|
@ -0,0 +1,55 @@
|
||||||
|
using PortProxyGUI._extern.NStandard;
|
||||||
|
using PortProxyGUI.Data;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace PortProxyGUI
|
||||||
|
{
|
||||||
|
public static class CmdUtil
|
||||||
|
{
|
||||||
|
public static Rule[] GetProxies()
|
||||||
|
{
|
||||||
|
var output = CmdRunner.Execute("netsh interface portproxy show all");
|
||||||
|
var types = new[]
|
||||||
|
{
|
||||||
|
new ProxyType("ipv4", "ipv4"),
|
||||||
|
new ProxyType("ipv4", "ipv6"),
|
||||||
|
new ProxyType("ipv6", "ipv4"),
|
||||||
|
new ProxyType("ipv6", "ipv6"),
|
||||||
|
};
|
||||||
|
|
||||||
|
var proxies = types.SelectMany(type =>
|
||||||
|
{
|
||||||
|
var typeProxies = output
|
||||||
|
.Project(new Regex($@"{type.From}:[^\n]+?{type.To}:\r\n\r\n.+?\r\n--------------- ---------- --------------- ----------\r\n(.+?)\r\n\r\n", RegexOptions.Singleline))
|
||||||
|
?.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
|
||||||
|
.Select(line =>
|
||||||
|
{
|
||||||
|
var parts = line.Resolve(new Regex(@"^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)$"));
|
||||||
|
return new Rule
|
||||||
|
{
|
||||||
|
Type = type.Type,
|
||||||
|
ListenOn = parts[1].First(),
|
||||||
|
ListenPort = int.Parse(parts[2].First()),
|
||||||
|
ConnectTo = parts[3].First(),
|
||||||
|
ConnectPort = int.Parse(parts[4].First()),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return typeProxies ?? new Rule[0];
|
||||||
|
});
|
||||||
|
return proxies.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void AddProxy(string action, string type, string listenOn, int listenPort, string connectTo, int connectPort)
|
||||||
|
{
|
||||||
|
CmdRunner.Execute($"netsh interface portproxy {action} {type} listenaddress={listenOn} listenport={listenPort} connectaddress={connectTo} connectport={connectPort}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DeleteProxy(string type, string listenOn, int listenPort)
|
||||||
|
{
|
||||||
|
CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace PortProxyGUI.Data
|
||||||
|
{
|
||||||
|
public class ApplicationDbMigrationUtil
|
||||||
|
{
|
||||||
|
public ApplicationDbScope DbScope { get; private set; }
|
||||||
|
|
||||||
|
public ApplicationDbMigrationUtil(ApplicationDbScope context)
|
||||||
|
{
|
||||||
|
DbScope = context;
|
||||||
|
EnsureHistoryTable();
|
||||||
|
EnsureUpdateVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnsureHistoryTable()
|
||||||
|
{
|
||||||
|
if (!DbScope.SqlQuery($"SELECT * FROM sqlite_master WHERE type = 'table' AND name = '__history';").Any())
|
||||||
|
{
|
||||||
|
DbScope.UnsafeSql(@"CREATE TABLE __history ( MigrationId text PRIMARY KEY, ProductVersion text);");
|
||||||
|
DbScope.UnsafeSql($"INSERT INTO __history (MigrationId, ProductVersion) VALUES ('000000000000', '0.0');");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnsureUpdateVersion()
|
||||||
|
{
|
||||||
|
var migration = GetLastMigration();
|
||||||
|
var assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version;
|
||||||
|
if (new Version(migration.ProductVersion) > assemblyVersion)
|
||||||
|
throw new InvalidOperationException("The current software version cannot use the configuration. Please download the latest version (https://github.com/zmjack/PortProxyGUI).");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Migration GetLastMigration()
|
||||||
|
{
|
||||||
|
return DbScope.SqlQuery<Migration>($"SELECT * FROM __history ORDER BY MigrationId DESC LIMIT 1;").First();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MigrateToLast()
|
||||||
|
{
|
||||||
|
var migration = GetLastMigration();
|
||||||
|
var migrationId = migration.MigrationId;
|
||||||
|
var pendingMigrations = migrationId != "000000000000"
|
||||||
|
? History.SkipWhile(pair => pair.Key.MigrationId != migrationId).Skip(1)
|
||||||
|
: History;
|
||||||
|
|
||||||
|
foreach (var pendingMigration in pendingMigrations)
|
||||||
|
{
|
||||||
|
foreach (var sql in pendingMigration.Value)
|
||||||
|
{
|
||||||
|
DbScope.UnsafeSql(sql);
|
||||||
|
}
|
||||||
|
DbScope.Sql($"INSERT INTO __history (MigrationId, ProductVersion) VALUES ({pendingMigration.Key.MigrationId}, {pendingMigration.Key.ProductVersion});");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Dictionary<MigrationKey, string[]> History = new Dictionary<MigrationKey, string[]>
|
||||||
|
{
|
||||||
|
[new MigrationKey { MigrationId = "202103021542", ProductVersion = "1.1.0" }] = new[]
|
||||||
|
{
|
||||||
|
@"CREATE TABLE rules
|
||||||
|
(
|
||||||
|
Id text PRIMARY KEY,
|
||||||
|
Type text,
|
||||||
|
ListenOn text,
|
||||||
|
ListenPort integer,
|
||||||
|
ConnectTo text,
|
||||||
|
ConnectPort integer
|
||||||
|
);",
|
||||||
|
"CREATE UNIQUE INDEX IX_Rules_Type_ListenOn_ListenPort ON Rules(Type, ListenOn, ListenPort);",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
using SQLib.Sqlite;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace PortProxyGUI.Data
|
||||||
|
{
|
||||||
|
public class ApplicationDbScope : SqliteScope<ApplicationDbScope>
|
||||||
|
{
|
||||||
|
public static readonly string DbDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PortProxyGUI");
|
||||||
|
public static readonly string DbFile = Path.Combine(DbDirectory, "config.db");
|
||||||
|
private static readonly string ConnectionString = $"Data Source={DbFile}";
|
||||||
|
|
||||||
|
public static ApplicationDbScope UseDefault() => new ApplicationDbScope(ConnectionString);
|
||||||
|
|
||||||
|
public ApplicationDbScope(string connectionString) : base(connectionString)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(DbDirectory)) Directory.CreateDirectory(DbDirectory);
|
||||||
|
if (!File.Exists(DbFile))
|
||||||
|
{
|
||||||
|
#if NET35 || NET45
|
||||||
|
System.Data.SQLite.SQLiteConnection.CreateFile(DbFile);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Migrate() => new ApplicationDbMigrationUtil(this).MigrateToLast();
|
||||||
|
|
||||||
|
public IEnumerable<Rule> Rules => SqlQuery<Rule>($"SELECT * FROM Rules;");
|
||||||
|
|
||||||
|
public Rule GetRule(string type, string listenOn, int listenPort)
|
||||||
|
{
|
||||||
|
return SqlQuery<Rule>($"SELECT * FROM Rules WHERE Type={type} AND ListenOn={listenOn} AND ListenPort={listenPort} LIMIT 1;").FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Add<T>(T obj) where T : class
|
||||||
|
{
|
||||||
|
var newid = Guid.NewGuid().ToString();
|
||||||
|
switch (obj)
|
||||||
|
{
|
||||||
|
case Rule rule:
|
||||||
|
Sql($"INSERT INTO Rules (Id, Type, ListenOn, ListenPort, ConnectTo, ConnectPort) VALUES ({newid}, {rule.Type}, {rule.ListenOn}, {rule.ListenPort}, {rule.ConnectTo}, {rule.ConnectPort});");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void AddRange<T>(IEnumerable<T> objs) where T : class
|
||||||
|
{
|
||||||
|
foreach (var obj in objs) Add(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update<T>(T obj) where T : class
|
||||||
|
{
|
||||||
|
switch (obj)
|
||||||
|
{
|
||||||
|
case Rule rule:
|
||||||
|
Sql($"UPDATE Rules SET Type={rule.Type}, ListenOn={rule.ListenOn}, ListenPort={rule.ListenPort}, ConnectTo={rule.ConnectTo}, ConnectPort={rule.ConnectPort} WHERE Id={rule.Id};");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void UpdateRange<T>(IEnumerable<T> objs) where T : class
|
||||||
|
{
|
||||||
|
foreach (var obj in objs) Update(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Remove<T>(T obj) where T : class
|
||||||
|
{
|
||||||
|
switch (obj)
|
||||||
|
{
|
||||||
|
case Rule rule:
|
||||||
|
Sql($"DELETE FROM Rules WHERE Id={rule.Id};");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void RemoveRange<T>(IEnumerable<T> objs) where T : class
|
||||||
|
{
|
||||||
|
foreach (var obj in objs) Remove(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace PortProxyGUI.Data
|
||||||
|
{
|
||||||
|
public class Migration
|
||||||
|
{
|
||||||
|
public string MigrationId { get; set; }
|
||||||
|
public string ProductVersion { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace PortProxyGUI.Data
|
||||||
|
{
|
||||||
|
public struct MigrationKey
|
||||||
|
{
|
||||||
|
public string MigrationId { get; set; }
|
||||||
|
public string ProductVersion { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace PortProxyGUI.Data
|
||||||
|
{
|
||||||
|
public class Rule : IEquatable<Rule>
|
||||||
|
{
|
||||||
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
public string Type { get; set; }
|
||||||
|
public string ListenOn { get; set; }
|
||||||
|
public int ListenPort { get; set; }
|
||||||
|
public string ConnectTo { get; set; }
|
||||||
|
public long ConnectPort { get; set; }
|
||||||
|
|
||||||
|
public bool Equals(Rule other)
|
||||||
|
{
|
||||||
|
return Id == other.Id
|
||||||
|
&& Type == other.Type
|
||||||
|
&& ListenOn == other.ListenOn
|
||||||
|
&& ListenPort == other.ListenPort
|
||||||
|
&& ConnectTo == other.ConnectTo
|
||||||
|
&& ConnectPort == other.ConnectPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool EqualsWithKeys(Rule other)
|
||||||
|
{
|
||||||
|
return Type == other.Type
|
||||||
|
&& ListenOn == other.ListenOn
|
||||||
|
&& ListenPort == other.ListenPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,12 +6,17 @@
|
||||||
<SharedGUID>b38ef2b9-e38d-4d6d-bf0d-7c1934d6cfdc</SharedGUID>
|
<SharedGUID>b38ef2b9-e38d-4d6d-bf0d-7c1934d6cfdc</SharedGUID>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Label="Configuration">
|
<PropertyGroup Label="Configuration">
|
||||||
<Import_RootNamespace>PortProxyGUI.Shared</Import_RootNamespace>
|
<Import_RootNamespace>PortProxyGUI</Import_RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)CmdRunner.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)CmdRunner.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)CmdUtil.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Data\ApplicationDbScope.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Data\ApplicationDbMigrationUtil.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Data\Migration.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Data\MigrationKey.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Data\Rule.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)ListViewColumnSorter.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)ListViewColumnSorter.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" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)~extern\NStandard\XObject.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)~extern\NStandard\XObject.cs" />
|
||||||
|
|
|
@ -30,13 +30,17 @@
|
||||||
{
|
{
|
||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortProxyGUI));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortProxyGUI));
|
||||||
this.listView1 = new System.Windows.Forms.ListView();
|
this.listViewProxies = new System.Windows.Forms.ListView();
|
||||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
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.columnHeader6 = ((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.toolStripMenuItem_Enable = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.toolStripMenuItem_Disable = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -44,27 +48,31 @@
|
||||||
this.toolStripMenuItem_Refresh = 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.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.imageListProxies = new System.Windows.Forms.ImageList(this.components);
|
||||||
this.contextMenuStrip1.SuspendLayout();
|
this.contextMenuStrip1.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// listView1
|
// listViewProxies
|
||||||
//
|
//
|
||||||
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
this.listViewProxies.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.listViewProxies.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
this.columnHeader1,
|
this.columnHeader1,
|
||||||
this.columnHeader2,
|
this.columnHeader2,
|
||||||
this.columnHeader3,
|
this.columnHeader3,
|
||||||
this.columnHeader4,
|
this.columnHeader4,
|
||||||
this.columnHeader5});
|
this.columnHeader5,
|
||||||
this.listView1.ContextMenuStrip = this.contextMenuStrip1;
|
this.columnHeader6});
|
||||||
resources.ApplyResources(this.listView1, "listView1");
|
this.listViewProxies.ContextMenuStrip = this.contextMenuStrip1;
|
||||||
this.listView1.FullRowSelect = true;
|
resources.ApplyResources(this.listViewProxies, "listViewProxies");
|
||||||
this.listView1.HideSelection = false;
|
this.listViewProxies.FullRowSelect = true;
|
||||||
this.listView1.Name = "listView1";
|
this.listViewProxies.HideSelection = false;
|
||||||
this.listView1.UseCompatibleStateImageBehavior = false;
|
this.listViewProxies.Name = "listViewProxies";
|
||||||
this.listView1.View = System.Windows.Forms.View.Details;
|
this.listViewProxies.SmallImageList = this.imageListProxies;
|
||||||
this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
this.listViewProxies.UseCompatibleStateImageBehavior = false;
|
||||||
this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
this.listViewProxies.View = System.Windows.Forms.View.Details;
|
||||||
this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
this.listViewProxies.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||||
|
this.listViewProxies.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
||||||
|
this.listViewProxies.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
||||||
//
|
//
|
||||||
// columnHeader1
|
// columnHeader1
|
||||||
//
|
//
|
||||||
|
@ -86,20 +94,42 @@
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.columnHeader5, "columnHeader5");
|
resources.ApplyResources(this.columnHeader5, "columnHeader5");
|
||||||
//
|
//
|
||||||
|
// columnHeader6
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader6, "columnHeader6");
|
||||||
|
//
|
||||||
// contextMenuStrip1
|
// contextMenuStrip1
|
||||||
//
|
//
|
||||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.toolStripMenuItem_Enable,
|
||||||
|
this.toolStripMenuItem_Disable,
|
||||||
|
this.toolStripSeparator3,
|
||||||
|
this.toolStripMenuItem_Refresh,
|
||||||
|
this.toolStripSeparator2,
|
||||||
this.toolStripMenuItem_New,
|
this.toolStripMenuItem_New,
|
||||||
this.toolStripMenuItem_Modify,
|
this.toolStripMenuItem_Modify,
|
||||||
this.toolStripMenuItem_Delete,
|
this.toolStripMenuItem_Delete,
|
||||||
this.toolStripSeparator1,
|
this.toolStripSeparator1,
|
||||||
this.toolStripMenuItem_Refresh,
|
|
||||||
this.toolStripSeparator2,
|
|
||||||
this.toolStripMenuItem_About});
|
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);
|
||||||
//
|
//
|
||||||
|
// toolStripMenuItem_Enable
|
||||||
|
//
|
||||||
|
this.toolStripMenuItem_Enable.Name = "toolStripMenuItem_Enable";
|
||||||
|
resources.ApplyResources(this.toolStripMenuItem_Enable, "toolStripMenuItem_Enable");
|
||||||
|
//
|
||||||
|
// toolStripMenuItem_Disable
|
||||||
|
//
|
||||||
|
this.toolStripMenuItem_Disable.Name = "toolStripMenuItem_Disable";
|
||||||
|
resources.ApplyResources(this.toolStripMenuItem_Disable, "toolStripMenuItem_Disable");
|
||||||
|
//
|
||||||
|
// toolStripSeparator3
|
||||||
|
//
|
||||||
|
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
||||||
|
//
|
||||||
// toolStripMenuItem_New
|
// toolStripMenuItem_New
|
||||||
//
|
//
|
||||||
this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
|
this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
|
||||||
|
@ -135,13 +165,21 @@
|
||||||
this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
|
this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
|
||||||
resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
|
resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
|
||||||
//
|
//
|
||||||
|
// imageListProxies
|
||||||
|
//
|
||||||
|
this.imageListProxies.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListProxies.ImageStream")));
|
||||||
|
this.imageListProxies.TransparentColor = System.Drawing.Color.Transparent;
|
||||||
|
this.imageListProxies.Images.SetKeyName(0, "disable.png");
|
||||||
|
this.imageListProxies.Images.SetKeyName(1, "enable.png");
|
||||||
|
//
|
||||||
// PortProxyGUI
|
// PortProxyGUI
|
||||||
//
|
//
|
||||||
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.listView1);
|
this.Controls.Add(this.listViewProxies);
|
||||||
this.Name = "PortProxyGUI";
|
this.Name = "PortProxyGUI";
|
||||||
this.Load += new System.EventHandler(this.PortProxyGUI_Load);
|
this.Load += new System.EventHandler(this.PortProxyGUI_Load);
|
||||||
|
this.Shown += new System.EventHandler(this.PortProxyGUI_Shown);
|
||||||
this.contextMenuStrip1.ResumeLayout(false);
|
this.contextMenuStrip1.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
@ -149,20 +187,25 @@
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.ListView listView1;
|
private System.Windows.Forms.ListView listViewProxies;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
private System.Windows.Forms.ColumnHeader columnHeader5;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About;
|
||||||
private System.Windows.Forms.ColumnHeader columnHeader5;
|
private System.Windows.Forms.ColumnHeader columnHeader6;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||||
|
private System.Windows.Forms.ImageList imageListProxies;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Enable;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Disable;
|
||||||
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using static System.Windows.Forms.ListViewItem;
|
using static System.Windows.Forms.ListViewItem;
|
||||||
|
|
||||||
|
@ -18,80 +17,81 @@ namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
lvwColumnSorter = new ListViewColumnSorter();
|
lvwColumnSorter = new ListViewColumnSorter();
|
||||||
listView1.ListViewItemSorter = lvwColumnSorter;
|
listViewProxies.ListViewItemSorter = lvwColumnSorter;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PortProxyGUI_Load(object sender, EventArgs e)
|
private void PortProxyGUI_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PortProxyGUI_Shown(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
RefreshProxyList();
|
RefreshProxyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void EnableSelectedProxies()
|
||||||
|
{
|
||||||
|
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
item.ImageIndex = 1;
|
||||||
|
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||||
|
CmdUtil.AddProxy("add", subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text), subItems[4].Text, int.Parse(subItems[5].Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DisableSelectedProxies()
|
||||||
|
{
|
||||||
|
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
item.ImageIndex = 0;
|
||||||
|
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||||
|
CmdUtil.DeleteProxy(subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void DeleteSelectedProxies()
|
private void DeleteSelectedProxies()
|
||||||
{
|
{
|
||||||
var items = listView1.SelectedItems.OfType<ListViewItem>();
|
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||||
foreach (var item in items)
|
DisableSelectedProxies();
|
||||||
{
|
Program.SqliteDbScope.RemoveRange(items.Select(x => new Data.Rule { Id = x.Tag.ToString() }));
|
||||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
foreach (var item in items) listViewProxies.Items.Remove(item);
|
||||||
var type = subItems[0].Text;
|
|
||||||
var listenOn = subItems[1].Text;
|
|
||||||
var listenPort = subItems[2].Text;
|
|
||||||
var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
|
|
||||||
}
|
|
||||||
RefreshProxyList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetProxyForUpdate(SetProxyForm form)
|
private void SetProxyForUpdate(SetProxyForm form)
|
||||||
{
|
{
|
||||||
var item = listView1.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
var item = listViewProxies.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
||||||
{
|
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
form.UseUpdateMode(item, subItems[1].Text, subItems[2].Text, subItems[3].Text, subItems[4].Text, subItems[5].Text);
|
||||||
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 proxies = CmdUtil.GetProxies();
|
||||||
var types = new[]
|
var rules = Program.SqliteDbScope.Rules;
|
||||||
{
|
|
||||||
new ProxyType("ipv4", "ipv4"),
|
|
||||||
new ProxyType("ipv4", "ipv6"),
|
|
||||||
new ProxyType("ipv6", "ipv4"),
|
|
||||||
new ProxyType("ipv6", "ipv6"),
|
|
||||||
};
|
|
||||||
|
|
||||||
var proxies = types.SelectMany(type =>
|
|
||||||
{
|
|
||||||
var typeProxies = output
|
|
||||||
.Project(new Regex($@"{type.From}:[^\n]+?{type.To}:\r\n\r\n.+?\r\n--------------- ---------- --------------- ----------\r\n(.+?)\r\n\r\n", RegexOptions.Singleline))
|
|
||||||
?.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
|
|
||||||
.Select(line =>
|
|
||||||
{
|
|
||||||
var parts = line.Resolve(new Regex(@"^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)$"));
|
|
||||||
return new PortProxy
|
|
||||||
{
|
|
||||||
Type = type.Type,
|
|
||||||
ListenOn = parts[1].FirstOrDefault(),
|
|
||||||
ListenPort = parts[2].FirstOrDefault(),
|
|
||||||
ConnectTo = parts[3].FirstOrDefault(),
|
|
||||||
ConnectPort = parts[4].FirstOrDefault(),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
return typeProxies ?? new PortProxy[0];
|
|
||||||
});
|
|
||||||
|
|
||||||
listView1.Items.Clear();
|
|
||||||
foreach (var proxy in proxies)
|
foreach (var proxy in proxies)
|
||||||
{
|
{
|
||||||
listView1.Items.Add(new ListViewItem(proxy.Type).Then(vitem =>
|
var matchedRule = rules.FirstOrDefault(r => r.EqualsWithKeys(proxy));
|
||||||
|
proxy.Id = matchedRule?.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pendingAdds = proxies.Where(x => x.Id == null);
|
||||||
|
var pendingUpdates = proxies.Where(x => x.Id != null && !x.Equals(rules.First(r => r.Id == x.Id)));
|
||||||
|
|
||||||
|
Program.SqliteDbScope.AddRange(pendingAdds);
|
||||||
|
Program.SqliteDbScope.UpdateRange(pendingUpdates);
|
||||||
|
|
||||||
|
listViewProxies.Items.Clear();
|
||||||
|
rules = Program.SqliteDbScope.Rules;
|
||||||
|
foreach (var rule in rules)
|
||||||
|
{
|
||||||
|
var imageIndex = proxies.Any(p => p.EqualsWithKeys(rule)) ? 1 : 0;
|
||||||
|
var item = new ListViewItem { ImageIndex = imageIndex, Tag = rule.Id }.Then(vitem =>
|
||||||
{
|
{
|
||||||
vitem.SubItems.AddRange(new[] { proxy.ListenOn, proxy.ListenPort, proxy.ConnectTo, proxy.ConnectPort });
|
vitem.SubItems.AddRange(new[] { rule.Type, rule.ListenOn, rule.ListenPort.ToString(), rule.ConnectTo, rule.ConnectPort.ToString() });
|
||||||
}));
|
});
|
||||||
|
listViewProxies.Items.Add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,27 +99,33 @@ namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
if (sender is ContextMenuStrip _sender)
|
if (sender is ContextMenuStrip _sender)
|
||||||
{
|
{
|
||||||
var selected = _sender.Items.OfType<ToolStripItem>().Where(x => x.Selected).FirstOrDefault();
|
var selected = _sender.Items.OfType<ToolStripMenuItem>().Where(x => x.Selected).FirstOrDefault();
|
||||||
if (selected is null || !selected.Enabled) return;
|
if (selected is null || !selected.Enabled) return;
|
||||||
|
|
||||||
switch (selected.Text)
|
switch (selected)
|
||||||
{
|
{
|
||||||
case string s when s == toolStripMenuItem_New.Text:
|
case ToolStripMenuItem item when item == toolStripMenuItem_Enable: EnableSelectedProxies(); break;
|
||||||
|
case ToolStripMenuItem item when item == toolStripMenuItem_Disable: DisableSelectedProxies(); break;
|
||||||
|
|
||||||
|
case ToolStripMenuItem item when item == toolStripMenuItem_New:
|
||||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||||
SetProxyForm.UseNormalMode();
|
SetProxyForm.UseNormalMode();
|
||||||
SetProxyForm.Show();
|
SetProxyForm.Show();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case string s when s == toolStripMenuItem_Modify.Text:
|
case ToolStripMenuItem item when item == toolStripMenuItem_Modify:
|
||||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||||
SetProxyForUpdate(SetProxyForm);
|
SetProxyForUpdate(SetProxyForm);
|
||||||
SetProxyForm.Show();
|
SetProxyForm.Show();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case string s when s == toolStripMenuItem_Refresh.Text: RefreshProxyList(); break;
|
case ToolStripMenuItem item when item == toolStripMenuItem_Refresh:
|
||||||
case string s when s == toolStripMenuItem_Delete.Text: DeleteSelectedProxies(); break;
|
RefreshProxyList();
|
||||||
|
break;
|
||||||
|
|
||||||
case string s when s == toolStripMenuItem_About.Text:
|
case ToolStripMenuItem item when item == toolStripMenuItem_Delete: DeleteSelectedProxies(); break;
|
||||||
|
|
||||||
|
case ToolStripMenuItem item when item == toolStripMenuItem_About:
|
||||||
if (AboutForm == null)
|
if (AboutForm == null)
|
||||||
{
|
{
|
||||||
AboutForm = new About(this);
|
AboutForm = new About(this);
|
||||||
|
@ -135,9 +141,11 @@ namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
if (sender is ListView _sender)
|
if (sender is ListView _sender)
|
||||||
{
|
{
|
||||||
var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
toolStripMenuItem_Enable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 0);
|
||||||
toolStripMenuItem_Delete.Enabled = selectAny;
|
toolStripMenuItem_Disable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 1);
|
||||||
toolStripMenuItem_Modify.Enabled = selectAny;
|
|
||||||
|
toolStripMenuItem_Delete.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
||||||
|
toolStripMenuItem_Modify.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Count() == 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +186,8 @@ namespace PortProxyGUI
|
||||||
}
|
}
|
||||||
|
|
||||||
// Perform the sort with these new sort options.
|
// Perform the sort with these new sort options.
|
||||||
listView1.Sort();
|
listViewProxies.Sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.6-alpha1</Version>
|
<Version>1.1.0</Version>
|
||||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
@ -35,6 +35,10 @@
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="SQLib.Sqlite" Version="0.8.6" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Update="About.cs">
|
<Compile Update="About.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
|
@ -65,6 +69,7 @@
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Update="PortProxyGUI.resx">
|
<EmbeddedResource Update="PortProxyGUI.resx">
|
||||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Update="PortProxyGUI.zh-CN.resx">
|
<EmbeddedResource Update="PortProxyGUI.zh-CN.resx">
|
||||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||||
|
|
|
@ -112,124 +112,196 @@
|
||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<resheader name="reader">
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="columnHeader1.Text" xml:space="preserve">
|
<data name="columnHeader1.Text" xml:space="preserve">
|
||||||
<value>Type</value>
|
<value />
|
||||||
|
</data>
|
||||||
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="columnHeader1.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>24</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader2.Text" xml:space="preserve">
|
<data name="columnHeader2.Text" xml:space="preserve">
|
||||||
<value>Listen on</value>
|
<value>Type</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
||||||
<value>140</value>
|
<value>64</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader3.Text" xml:space="preserve">
|
<data name="columnHeader3.Text" xml:space="preserve">
|
||||||
<value>Listen port</value>
|
<value>Listen on</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
||||||
<value>100</value>
|
|
||||||
</data>
|
|
||||||
<data name="columnHeader4.Text" xml:space="preserve">
|
|
||||||
<value>Connect to</value>
|
|
||||||
</data>
|
|
||||||
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
|
||||||
<value>140</value>
|
<value>140</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader5.Text" xml:space="preserve">
|
<data name="columnHeader4.Text" xml:space="preserve">
|
||||||
<value>Connect port</value>
|
<value>Listen port</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||||
<value>100</value>
|
<value>100</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<data name="columnHeader5.Text" xml:space="preserve">
|
||||||
|
<value>Connect to</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>140</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader6.Text" xml:space="preserve">
|
||||||
|
<value>Connect port</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader6.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>100</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<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=4.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>181, 148</value>
|
<value>155, 176</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
||||||
<value>contextMenuStrip1</value>
|
<value>contextMenuStrip1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="listView1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
<data name="listViewProxies.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>Fill</value>
|
<value>Fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="listView1.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="listViewProxies.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 0</value>
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="listView1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="listViewProxies.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="listView1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="listViewProxies.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>573, 262</value>
|
<value>624, 361</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="listView1.TabIndex" type="System.Int32, mscorlib">
|
<metadata name="imageListProxies.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>182, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="imageListProxies.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||||
|
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||||
|
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc
|
||||||
|
CAAAAk1TRnQBSQFMAgEBAgEAAUABAAFAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||||
|
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||||
|
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||||
|
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||||
|
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
|
||||||
|
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
|
||||||
|
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
|
||||||
|
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
|
||||||
|
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
|
||||||
|
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
|
||||||
|
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
|
||||||
|
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
|
||||||
|
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
|
||||||
|
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
|
||||||
|
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
|
||||||
|
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
|
||||||
|
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
|
||||||
|
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
|
||||||
|
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
|
||||||
|
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
|
||||||
|
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
|
||||||
|
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
|
||||||
|
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
|
||||||
|
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
|
||||||
|
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
|
||||||
|
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
|
||||||
|
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
|
||||||
|
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
|
||||||
|
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wQACvQ0AAH/AZQKFwGU
|
||||||
|
Af8CAAH/AboKlQG6Af8iAAGUDBcBlAIAAboMlQG6IgAOFwIADpUiAAQXARYB9AL/AfQBFgQXAgAOlSIA
|
||||||
|
AxcBFgH/Ab0BFgGUAfQB/wEWAxcCAAWVArsHlSIAAxcB9AG9AhcBlAH/AvQDFwIABJUBugL/AcEGlSIA
|
||||||
|
AxcB/wEWARcBlAH/ApQB/wMXAgADlQG6Af8BwQG6Af8BwQWVIgADFwH/ApQB/wGUARcBFgH/AxcCAAOV
|
||||||
|
Af8BwQKVAboB/wHBBJUiAAMXAvQB/wGUAhcBvQH0AxcCAAiVAboB/wHBA5UiAAMXARYB/wH0AZQBFgG9
|
||||||
|
Af8BFgMXAgAJlQG6Af8DlSIABBcBFgH0Av8B9AEWBBcB/wEADpUB/yEADhcB/wEADpUB/yEAAZQMFwGU
|
||||||
|
AgABugyVAboiAAH/AZQKFwGUAf8CAAH/AboKlQG6Af80AAH/CPQkAAFCAU0BPgcAAT4DAAEoAwABQAMA
|
||||||
|
ARADAAEBAQABAQUAAYAXAAP/AQAB4AEHAv8EAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||||
|
AQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||||
|
AQEBgAEBBAABgAEAAYAFAAGAAQABgAUAAYABAQGAAQEEAAGAAQEBgAEBBAAC/wHgAQ8EAAs=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="listViewProxies.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.Name" xml:space="preserve">
|
<data name=">>listViewProxies.Name" xml:space="preserve">
|
||||||
<value>listView1</value>
|
<value>listViewProxies</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.Type" xml:space="preserve">
|
<data name=">>listViewProxies.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.Parent" xml:space="preserve">
|
<data name=">>listViewProxies.Parent" xml:space="preserve">
|
||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>listView1.ZOrder" xml:space="preserve">
|
<data name=">>listViewProxies.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<data name="toolStripMenuItem_Enable.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Enable.Text" xml:space="preserve">
|
||||||
|
<value>Enable (&E)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Disable.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Disable.Text" xml:space="preserve">
|
||||||
|
<value>Disable (&I)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>151, 6</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_New.Text" xml:space="preserve">
|
||||||
|
<value>New (&N) ...</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
|
||||||
|
<value>Modify (&M) ...</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
|
||||||
|
<value>Delete (&D)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>151, 6</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
|
||||||
|
<value>Refresh (&F)</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>151, 6</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>154, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem_About.Text" xml:space="preserve">
|
||||||
|
<value>About</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
<value>6, 12</value>
|
<value>6, 12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>573, 262</value>
|
<value>624, 361</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
|
@ -2402,78 +2474,108 @@
|
||||||
<value>columnHeader1</value>
|
<value>columnHeader1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader1.Type" xml:space="preserve">
|
<data name=">>columnHeader1.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader2.Name" xml:space="preserve">
|
<data name=">>columnHeader2.Name" xml:space="preserve">
|
||||||
<value>columnHeader2</value>
|
<value>columnHeader2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader2.Type" xml:space="preserve">
|
<data name=">>columnHeader2.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader3.Name" xml:space="preserve">
|
<data name=">>columnHeader3.Name" xml:space="preserve">
|
||||||
<value>columnHeader3</value>
|
<value>columnHeader3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader3.Type" xml:space="preserve">
|
<data name=">>columnHeader3.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader4.Name" xml:space="preserve">
|
<data name=">>columnHeader4.Name" xml:space="preserve">
|
||||||
<value>columnHeader4</value>
|
<value>columnHeader4</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader4.Type" xml:space="preserve">
|
<data name=">>columnHeader4.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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader5.Name" xml:space="preserve">
|
<data name=">>columnHeader5.Name" xml:space="preserve">
|
||||||
<value>columnHeader5</value>
|
<value>columnHeader5</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>columnHeader5.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader6.Name" xml:space="preserve">
|
||||||
|
<value>columnHeader6</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader6.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Enable.Name" xml:space="preserve">
|
||||||
|
<value>toolStripMenuItem_Enable</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Enable.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Disable.Name" xml:space="preserve">
|
||||||
|
<value>toolStripMenuItem_Disable</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem_Disable.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripSeparator3.Name" xml:space="preserve">
|
||||||
|
<value>toolStripSeparator3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripSeparator3.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_New.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_New.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_New</value>
|
<value>toolStripMenuItem_New</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_New.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_Modify</value>
|
<value>toolStripMenuItem_Modify</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Modify.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_Delete</value>
|
<value>toolStripMenuItem_Delete</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Delete.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator1.Name" xml:space="preserve">
|
<data name=">>toolStripSeparator1.Name" xml:space="preserve">
|
||||||
<value>toolStripSeparator1</value>
|
<value>toolStripSeparator1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator1.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_Refresh</value>
|
<value>toolStripMenuItem_Refresh</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_Refresh.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator2.Name" xml:space="preserve">
|
<data name=">>toolStripSeparator2.Name" xml:space="preserve">
|
||||||
<value>toolStripSeparator2</value>
|
<value>toolStripSeparator2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator2.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_About.Name" xml:space="preserve">
|
<data name=">>toolStripMenuItem_About.Name" xml:space="preserve">
|
||||||
<value>toolStripMenuItem_About</value>
|
<value>toolStripMenuItem_About</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem_About.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>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>imageListProxies.Name" xml:space="preserve">
|
||||||
|
<value>imageListProxies</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>imageListProxies.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
<value>PortProxyGUI</value>
|
<value>PortProxyGUI</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,18 +1,20 @@
|
||||||
|
using PortProxyGUI.Data;
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace PortProxyGUI
|
namespace PortProxyGUI
|
||||||
{
|
{
|
||||||
static class Program
|
static class Program
|
||||||
{
|
{
|
||||||
|
public static readonly ApplicationDbScope SqliteDbScope = ApplicationDbScope.UseDefault();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main entry point for the application.
|
/// The main entry point for the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[STAThread]
|
[STAThread]
|
||||||
static void Main()
|
static void Main()
|
||||||
{
|
{
|
||||||
|
SqliteDbScope.Migrate();
|
||||||
Application.SetHighDpiMode(HighDpiMode.SystemAware);
|
Application.SetHighDpiMode(HighDpiMode.SystemAware);
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
|
|
@ -9,8 +9,8 @@ namespace PortProxyGUI
|
||||||
public partial class SetProxyForm : Form
|
public partial class SetProxyForm : Form
|
||||||
{
|
{
|
||||||
public readonly PortProxyGUI PortProxyGUI;
|
public readonly PortProxyGUI PortProxyGUI;
|
||||||
public bool UpdateMode { get; private set; }
|
|
||||||
private string AutoTypeString { get; }
|
private string AutoTypeString { get; }
|
||||||
|
private ListViewItem _updateLiveViewItem;
|
||||||
|
|
||||||
public SetProxyForm(PortProxyGUI portProxyGUI)
|
public SetProxyForm(PortProxyGUI portProxyGUI)
|
||||||
{
|
{
|
||||||
|
@ -29,11 +29,11 @@ namespace PortProxyGUI
|
||||||
textBox_listenPort.Text = "";
|
textBox_listenPort.Text = "";
|
||||||
textBox_connectTo.Text = "";
|
textBox_connectTo.Text = "";
|
||||||
textBox_connectPort.Text = "";
|
textBox_connectPort.Text = "";
|
||||||
UpdateMode = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UseUpdateMode(string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
public void UseUpdateMode(ListViewItem item, string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||||
{
|
{
|
||||||
|
_updateLiveViewItem = item;
|
||||||
comboBox_type.Enabled = false;
|
comboBox_type.Enabled = false;
|
||||||
textBox_listenOn.Enabled = false;
|
textBox_listenOn.Enabled = false;
|
||||||
textBox_listenPort.Enabled = false;
|
textBox_listenPort.Enabled = false;
|
||||||
|
@ -42,19 +42,8 @@ namespace PortProxyGUI
|
||||||
textBox_listenPort.Text = listenPort;
|
textBox_listenPort.Text = listenPort;
|
||||||
textBox_connectTo.Text = connectTo;
|
textBox_connectTo.Text = connectTo;
|
||||||
textBox_connectPort.Text = connectPort;
|
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()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsIPv4(string ip)
|
|
||||||
{
|
|
||||||
return ip.IsMatch(new Regex(@"^(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])){3}$"));
|
|
||||||
}
|
|
||||||
private bool IsIPv6(string ip)
|
private bool IsIPv6(string ip)
|
||||||
{
|
{
|
||||||
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
|
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
|
||||||
|
@ -95,7 +84,28 @@ namespace PortProxyGUI
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetPortProxy(type, UpdateMode ? "set" : "add", listenOn, listenPort, connectTo, connectPort);
|
if (_updateLiveViewItem != null)
|
||||||
|
{
|
||||||
|
var rule = Program.SqliteDbScope.GetRule(type, listenOn, _listenPort);
|
||||||
|
rule.ConnectTo = connectTo;
|
||||||
|
rule.ConnectPort = _connectPort;
|
||||||
|
Program.SqliteDbScope.Update(rule);
|
||||||
|
CmdUtil.AddProxy("set", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||||
|
|
||||||
|
_updateLiveViewItem.ImageIndex = 1;
|
||||||
|
var subItems = _updateLiveViewItem.SubItems;
|
||||||
|
subItems[1].Text = type;
|
||||||
|
subItems[2].Text = listenOn;
|
||||||
|
subItems[3].Text = _listenPort.ToString();
|
||||||
|
subItems[4].Text = connectTo;
|
||||||
|
subItems[5].Text = _connectPort.ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CmdUtil.AddProxy("add", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||||
|
PortProxyGUI.RefreshProxyList();
|
||||||
|
}
|
||||||
|
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,13 +112,13 @@
|
||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<resheader name="reader">
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="label1.Text" xml:space="preserve">
|
<data name="label1.Text" xml:space="preserve">
|
||||||
<value>侦听地址</value>
|
<value>监听地址</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label1.Name" xml:space="preserve">
|
<data name=">>label1.Name" xml:space="preserve">
|
||||||
<value>label1</value>
|
<value>label1</value>
|
||||||
|
@ -291,18 +291,18 @@
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
<value>6, 12</value>
|
<value>6, 12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>313, 95</value>
|
<value>313, 95</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<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>
|
||||||
|
|
BIN
docs/ui.png
BIN
docs/ui.png
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 14 KiB |
Binary file not shown.
After Width: | Height: | Size: 348 B |
Binary file not shown.
After Width: | Height: | Size: 290 B |
Loading…
Reference in New Issue