├── .gitattributes
├── .gitignore
├── LICENSE
├── NodeTapGui.sln
├── NodeTapGui
├── App.config
├── App.xaml
├── App.xaml.cs
├── Controls
│ ├── QRCodeRect.xaml
│ └── QRCodeRect.xaml.cs
├── Converters
│ └── HostDelayColorTextConv.cs
├── Framwork
│ ├── Common
│ │ ├── CmdHelper.cs
│ │ ├── CommonEx.cs
│ │ ├── CommonFunc.cs
│ │ └── PasswordBoxBindingHelper.cs
│ ├── Imagin.Common.WPF.dll
│ ├── Imagin.Common.dll
│ ├── Net
│ │ └── PingHelper.cs
│ └── NotifyProperty
│ │ └── NotifyPropertyEx.cs
├── Images
│ ├── Logo.ico
│ └── QRCode.png
├── Models
│ └── RoutesTabelModel.cs
├── NodeTapGui.csproj
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ ├── Settings.settings
│ └── app.manifest
├── Styles
│ └── Generic.xaml
├── Views
│ ├── MainView.xaml
│ ├── MainView.xaml.cs
│ ├── RoutesTableDialog.xaml
│ └── RoutesTableDialog.xaml.cs
├── WinFormComponent
│ ├── NotifyIconComponent.Designer.cs
│ ├── NotifyIconComponent.cs
│ └── NotifyIconComponent.resx
└── packages.config
├── README.md
└── Screenshots
└── Screenshot01.png
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | bld/
21 | [Bb]in/
22 | [Oo]bj/
23 | [Ll]og/
24 |
25 | # Visual Studio 2015 cache/options directory
26 | .vs/
27 | # Uncomment if you have tasks that create the project's static files in wwwroot
28 | #wwwroot/
29 |
30 | # MSTest test Results
31 | [Tt]est[Rr]esult*/
32 | [Bb]uild[Ll]og.*
33 |
34 | # NUNIT
35 | *.VisualState.xml
36 | TestResult.xml
37 |
38 | # Build Results of an ATL Project
39 | [Dd]ebugPS/
40 | [Rr]eleasePS/
41 | dlldata.c
42 |
43 | # DNX
44 | project.lock.json
45 | project.fragment.lock.json
46 | artifacts/
47 |
48 | *_i.c
49 | *_p.c
50 | *_i.h
51 | *.ilk
52 | *.meta
53 | *.obj
54 | *.pch
55 | *.pdb
56 | *.pgc
57 | *.pgd
58 | *.rsp
59 | *.sbr
60 | *.tlb
61 | *.tli
62 | *.tlh
63 | *.tmp
64 | *.tmp_proj
65 | *.log
66 | *.vspscc
67 | *.vssscc
68 | .builds
69 | *.pidb
70 | *.svclog
71 | *.scc
72 |
73 | # Chutzpah Test files
74 | _Chutzpah*
75 |
76 | # Visual C++ cache files
77 | ipch/
78 | *.aps
79 | *.ncb
80 | *.opendb
81 | *.opensdf
82 | *.sdf
83 | *.cachefile
84 | *.VC.db
85 | *.VC.VC.opendb
86 |
87 | # Visual Studio profiler
88 | *.psess
89 | *.vsp
90 | *.vspx
91 | *.sap
92 |
93 | # TFS 2012 Local Workspace
94 | $tf/
95 |
96 | # Guidance Automation Toolkit
97 | *.gpState
98 |
99 | # ReSharper is a .NET coding add-in
100 | _ReSharper*/
101 | *.[Rr]e[Ss]harper
102 | *.DotSettings.user
103 |
104 | # JustCode is a .NET coding add-in
105 | .JustCode
106 |
107 | # TeamCity is a build add-in
108 | _TeamCity*
109 |
110 | # DotCover is a Code Coverage Tool
111 | *.dotCover
112 |
113 | # NCrunch
114 | _NCrunch_*
115 | .*crunch*.local.xml
116 | nCrunchTemp_*
117 |
118 | # MightyMoose
119 | *.mm.*
120 | AutoTest.Net/
121 |
122 | # Web workbench (sass)
123 | .sass-cache/
124 |
125 | # Installshield output folder
126 | [Ee]xpress/
127 |
128 | # DocProject is a documentation generator add-in
129 | DocProject/buildhelp/
130 | DocProject/Help/*.HxT
131 | DocProject/Help/*.HxC
132 | DocProject/Help/*.hhc
133 | DocProject/Help/*.hhk
134 | DocProject/Help/*.hhp
135 | DocProject/Help/Html2
136 | DocProject/Help/html
137 |
138 | # Click-Once directory
139 | publish/
140 |
141 | # Publish Web Output
142 | *.[Pp]ublish.xml
143 | *.azurePubxml
144 | # TODO: Comment the next line if you want to checkin your web deploy settings
145 | # but database connection strings (with potential passwords) will be unencrypted
146 | #*.pubxml
147 | *.publishproj
148 |
149 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
150 | # checkin your Azure Web App publish settings, but sensitive information contained
151 | # in these scripts will be unencrypted
152 | PublishScripts/
153 |
154 | # NuGet Packages
155 | *.nupkg
156 | # The packages folder can be ignored because of Package Restore
157 | **/packages/*
158 | # except build/, which is used as an MSBuild target.
159 | !**/packages/build/
160 | # Uncomment if necessary however generally it will be regenerated when needed
161 | #!**/packages/repositories.config
162 | # NuGet v3's project.json files produces more ignoreable files
163 | *.nuget.props
164 | *.nuget.targets
165 |
166 | # Microsoft Azure Build Output
167 | csx/
168 | *.build.csdef
169 |
170 | # Microsoft Azure Emulator
171 | ecf/
172 | rcf/
173 |
174 | # Windows Store app package directories and files
175 | AppPackages/
176 | BundleArtifacts/
177 | Package.StoreAssociation.xml
178 | _pkginfo.txt
179 |
180 | # Visual Studio cache files
181 | # files ending in .cache can be ignored
182 | *.[Cc]ache
183 | # but keep track of directories ending in .cache
184 | !*.[Cc]ache/
185 |
186 | # Others
187 | ClientBin/
188 | ~$*
189 | *~
190 | *.dbmdl
191 | *.dbproj.schemaview
192 | *.jfm
193 | *.pfx
194 | *.publishsettings
195 | node_modules/
196 | orleans.codegen.cs
197 |
198 | # Since there are multiple workflows, uncomment next line to ignore bower_components
199 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
200 | #bower_components/
201 |
202 | # RIA/Silverlight projects
203 | Generated_Code/
204 |
205 | # Backup & report files from converting an old project file
206 | # to a newer Visual Studio version. Backup files are not needed,
207 | # because we have git ;-)
208 | _UpgradeReport_Files/
209 | Backup*/
210 | UpgradeLog*.XML
211 | UpgradeLog*.htm
212 |
213 | # SQL Server files
214 | *.mdf
215 | *.ldf
216 |
217 | # Business Intelligence projects
218 | *.rdl.data
219 | *.bim.layout
220 | *.bim_*.settings
221 |
222 | # Microsoft Fakes
223 | FakesAssemblies/
224 |
225 | # GhostDoc plugin setting file
226 | *.GhostDoc.xml
227 |
228 | # Node.js Tools for Visual Studio
229 | .ntvs_analysis.dat
230 |
231 | # Visual Studio 6 build log
232 | *.plg
233 |
234 | # Visual Studio 6 workspace options file
235 | *.opt
236 |
237 | # Visual Studio LightSwitch build output
238 | **/*.HTMLClient/GeneratedArtifacts
239 | **/*.DesktopClient/GeneratedArtifacts
240 | **/*.DesktopClient/ModelManifest.xml
241 | **/*.Server/GeneratedArtifacts
242 | **/*.Server/ModelManifest.xml
243 | _Pvt_Extensions
244 |
245 | # Paket dependency manager
246 | .paket/paket.exe
247 | paket-files/
248 |
249 | # FAKE - F# Make
250 | .fake/
251 |
252 | # JetBrains Rider
253 | .idea/
254 | *.sln.iml
255 |
256 | # CodeRush
257 | .cr/
258 |
259 | # Python Tools for Visual Studio (PTVS)
260 | __pycache__/
261 | *.pyc
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 JerryAJ
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/NodeTapGui.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.27428.2015
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NodeTapGui", "NodeTapGui\NodeTapGui.csproj", "{530CB540-7F68-4D7C-BC26-23CD92C636CC}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|x64 = Debug|x64
12 | Release|Any CPU = Release|Any CPU
13 | Release|x64 = Release|x64
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {530CB540-7F68-4D7C-BC26-23CD92C636CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {530CB540-7F68-4D7C-BC26-23CD92C636CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {530CB540-7F68-4D7C-BC26-23CD92C636CC}.Debug|x64.ActiveCfg = Debug|x64
19 | {530CB540-7F68-4D7C-BC26-23CD92C636CC}.Debug|x64.Build.0 = Debug|x64
20 | {530CB540-7F68-4D7C-BC26-23CD92C636CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {530CB540-7F68-4D7C-BC26-23CD92C636CC}.Release|Any CPU.Build.0 = Release|Any CPU
22 | {530CB540-7F68-4D7C-BC26-23CD92C636CC}.Release|x64.ActiveCfg = Release|x64
23 | {530CB540-7F68-4D7C-BC26-23CD92C636CC}.Release|x64.Build.0 = Release|x64
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {41D0D077-7CE7-4820-8D70-A12ECEF8C8EA}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/NodeTapGui/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/NodeTapGui/App.xaml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/NodeTapGui/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using NodeTapGui.WinFormComponent;
2 | using System;
3 | using System.Diagnostics;
4 | using System.Reflection;
5 | using System.Security.Principal;
6 | using System.Windows;
7 | using System.Windows.Navigation;
8 |
9 | namespace NodeTapGui
10 | {
11 | ///
12 | /// App.xaml 的交互逻辑
13 | ///
14 | public partial class App : Application
15 | {
16 | #region properties
17 |
18 | ///
19 | /// 状态栏图标对象
20 | ///
21 | private NotifyIconComponent _notifyIcon;
22 |
23 | #endregion
24 |
25 | #region override method
26 |
27 | protected override void OnStartup(StartupEventArgs e)
28 | {
29 | // 检查是否为管理员权限运行
30 | CheckAdministrator();
31 |
32 | // 构造主窗口并显示
33 | MainWindow = new MainView();
34 | MainWindow.Show();
35 |
36 | // 配置NotifyIcon
37 | _notifyIcon = new NotifyIconComponent();
38 | MainWindow.StateChanged +=
39 | (s, args) =>
40 | {
41 | var win = s as MainView;
42 | if (win.WindowState == WindowState.Minimized)
43 | {
44 | win.ShowInTaskbar = false;
45 | _notifyIcon.ShowBalloonTip("NodeTapGui has been minimized!");
46 | // 停止Ping
47 | Common.CommonEx.TimerGetHostDelays.Stop();
48 | }
49 | };
50 | _notifyIcon.OnShowWindowHandler +=
51 | (s, args) =>
52 | {
53 | // 还原显示窗口
54 | if (MainWindow.WindowState == WindowState.Minimized)
55 | {
56 | MainWindow.WindowState = WindowState.Normal;
57 | MainWindow.ShowInTaskbar = true;
58 | // 开启Ping
59 | Common.CommonEx.TimerGetHostDelays.Start();
60 | }
61 | };
62 | }
63 |
64 | protected override void OnExit(ExitEventArgs e)
65 | {
66 | base.OnExit(e);
67 |
68 | // 释放资源
69 | _notifyIcon.Dispose();
70 | }
71 |
72 | #endregion
73 |
74 | #region method
75 |
76 | ///
77 | /// 检查是否是管理员身份
78 | ///
79 | private void CheckAdministrator()
80 | {
81 | var wi = WindowsIdentity.GetCurrent();
82 | var wp = new WindowsPrincipal(wi);
83 |
84 | bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator);
85 |
86 | if (!runAsAdmin)
87 | {
88 | // It is not possible to launch a ClickOnce app as administrator directly,
89 | // so instead we launch the app as administrator in a new process.
90 | var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);
91 |
92 | // The following properties run the new process as administrator
93 | processInfo.UseShellExecute = true;
94 | processInfo.Verb = "runas";
95 |
96 | // Start the new process
97 | try
98 | {
99 | Process.Start(processInfo);
100 | }
101 | catch (Exception ex)
102 | {
103 | MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
104 | }
105 |
106 | // Shut down the current process
107 | Environment.Exit(0);
108 | }
109 |
110 | }
111 |
112 | #endregion
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/NodeTapGui/Controls/QRCodeRect.xaml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 |
22 |
27 |
32 |
38 |
44 |
51 |
52 |
53 |
54 |
55 |
66 |
67 |
--------------------------------------------------------------------------------
/NodeTapGui/Controls/QRCodeRect.xaml.cs:
--------------------------------------------------------------------------------
1 | using NotifyProperty;
2 | using System.Threading.Tasks;
3 | using System.Windows;
4 |
5 | namespace NodeTapGui.Controls
6 | {
7 | ///
8 | /// QRCodeRect.xaml 的交互逻辑
9 | ///
10 | public partial class QRCodeRect : Window
11 | {
12 | public NotifyPropertyEx TargetWidth { get; } = 0f;
13 | public NotifyPropertyEx TargetHeight { get; } = 0f;
14 | public NotifyPropertyEx TargetLeft { get; } = 0f;
15 | public NotifyPropertyEx TargetTop { get; } = 0f;
16 |
17 | public QRCodeRect(float targetWidth, float targetHeight, float targetLeft, float targetTop, float fullWidth, float fullHeight)
18 | {
19 | InitializeComponent();
20 |
21 | DataContext = this;
22 |
23 |
24 | TargetWidth.Value = targetWidth;
25 | TargetHeight.Value = targetHeight;
26 | TargetLeft.Value = targetLeft;
27 | TargetTop.Value = targetTop;
28 |
29 | Loaded += async (s, e) =>
30 | {
31 | await Task.Delay(3000);
32 | Close();
33 | };
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/NodeTapGui/Converters/HostDelayColorTextConv.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Windows.Data;
4 | using System.Windows.Media;
5 |
6 | namespace NodeTapGui.Converters
7 | {
8 | public class HostDelayColorTextConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | var str = value.ToString();
13 | if (!string.IsNullOrWhiteSpace(str) && str != "time out" && str != "invalid addr")
14 | {
15 | int o = int.Parse(str.Substring(0, str.IndexOf(" ms")));
16 | if (0 < o && o <= 120)
17 | return Brushes.Green;
18 | else
19 | return Brushes.Red;
20 | }
21 | return Brushes.Red;
22 | }
23 |
24 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
25 | {
26 | return null;
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/NodeTapGui/Framwork/Common/CmdHelper.cs:
--------------------------------------------------------------------------------
1 | using NodeTapGui;
2 | using System;
3 | using System.Diagnostics;
4 | using System.Linq;
5 | using System.Threading.Tasks;
6 |
7 | namespace Common
8 | {
9 | public class CmdHelper
10 | {
11 | public MainView Main;
12 | Process proc;
13 |
14 | public CmdHelper(MainView main)
15 | {
16 | Main = main;
17 | }
18 |
19 | ///
20 | /// 异步执行命令
21 | ///
22 | ///
23 | ///
24 | public async Task ExecuteCommandAsync(string command)
25 | {
26 | await Task.Run(() =>
27 | {
28 | ProcessStartInfo CmdProcessInfo = new ProcessStartInfo()
29 | {
30 | FileName = "cmd",
31 | Arguments = "/c " + command,
32 | UseShellExecute = false,
33 | RedirectStandardOutput = true,
34 | CreateNoWindow = true,
35 | WindowStyle = ProcessWindowStyle.Hidden
36 | };
37 | proc = new Process() { StartInfo = CmdProcessInfo };
38 | proc.StartInfo.RedirectStandardError = true;
39 | proc.Start();
40 | proc.BeginOutputReadLine();
41 | proc.BeginErrorReadLine();
42 | proc.OutputDataReceived += Proc_OutputDataReceived;
43 | proc.ErrorDataReceived += Proc_ErrorDataReceived;
44 | });
45 | }
46 |
47 | ///
48 | /// 关闭当前关联程序
49 | ///
50 | public void CloseProc()
51 | {
52 | if (proc != null && !proc.HasExited)
53 | {
54 | proc.Close();
55 | Process.GetProcesses().Where(pr => pr.ProcessName == "sstap").FirstOrDefault().Kill();
56 | }
57 | }
58 |
59 | ///
60 | /// 程序执行命令信息输出,程序未执行完毕也可以实现输出
61 | ///
62 | ///
63 | ///
64 | private void Proc_OutputDataReceived(object sender, DataReceivedEventArgs e)
65 | {
66 | Main.ConsoleText.Value += e.Data + Environment.NewLine;
67 | }
68 |
69 | ///
70 | /// 程序错误信息输出
71 | ///
72 | ///
73 | ///
74 | private void Proc_ErrorDataReceived(object sender, DataReceivedEventArgs e)
75 | {
76 | if (null != e.Data)
77 | {
78 | Main.ConsoleText.Value += e.Data + Environment.NewLine;
79 | Main.ConsoleText.Value += "提醒:如果提示命令不存在,请检查当前程序是否在sstap.exe根目录下。";
80 | }
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/NodeTapGui/Framwork/Common/CommonEx.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows.Threading;
7 |
8 | namespace Common
9 | {
10 | public static class CommonEx
11 | {
12 | ///
13 | /// 显示网络延迟的计时器
14 | ///
15 | public static DispatcherTimer TimerGetHostDelays;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/NodeTapGui/Framwork/Common/CommonFunc.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Net;
6 | using System.Net.Sockets;
7 | using System.Threading.Tasks;
8 |
9 | namespace Common
10 | {
11 | public class CommonFunc
12 | {
13 | #region methods
14 |
15 | ///
16 | /// 获取地址的IP
17 | ///
18 | ///
19 | ///
20 | public static string GetIp(string address)
21 | {
22 | try
23 | {
24 | // ipv4
25 | var ip = Dns.GetHostEntry(address)
26 | .AddressList
27 | .FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork)
28 | ?.ToString();
29 | if (string.IsNullOrWhiteSpace(address))
30 | {
31 | // ipv6?
32 | ip = Dns.GetHostEntry(address)
33 | .AddressList
34 | .FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetworkV6)
35 | ?.ToString();
36 | }
37 |
38 | return ip;
39 | }
40 | catch (Exception ex)
41 | {
42 | #if DEBUG
43 | Console.WriteLine(ex.Message);
44 | #endif
45 | return string.Empty;
46 | }
47 | }
48 |
49 | ///
50 | /// 读取文本文件行信息
51 | ///
52 | ///
53 | ///
54 | public static async Task> ReadLineAsync(string filePath)
55 | {
56 | var list = new List();
57 |
58 | using (var reader = new StreamReader(filePath))
59 | {
60 | string line;
61 |
62 | while ((line = await reader.ReadLineAsync()) != null)
63 | {
64 | list.Add(line);
65 | }
66 | }
67 | return list;
68 | }
69 |
70 | #endregion
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/NodeTapGui/Framwork/Common/PasswordBoxBindingHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows;
3 | using System.Windows.Controls;
4 |
5 | /*
6 | [WPF]实现密码框的密码绑定 by:周银辉
7 | http://www.cnblogs.com/zhouyinhui/archive/2009/08/27/1554943.html
8 | */
9 | namespace Common
10 | {
11 | public static class PasswordBoxBindingHelper
12 | {
13 | public static bool GetIsPasswordBindingEnabled(DependencyObject obj)
14 | {
15 | return (bool)obj.GetValue(IsPasswordBindingEnabledProperty);
16 | }
17 |
18 | public static void SetIsPasswordBindingEnabled(DependencyObject obj, bool value)
19 | {
20 | obj.SetValue(IsPasswordBindingEnabledProperty, value);
21 | }
22 |
23 | public static readonly DependencyProperty IsPasswordBindingEnabledProperty =
24 | DependencyProperty.RegisterAttached("IsPasswordBindingEnabled", typeof(bool),
25 | typeof(PasswordBoxBindingHelper),
26 | new UIPropertyMetadata(false, OnIsPasswordBindingEnabledChanged));
27 |
28 | private static void OnIsPasswordBindingEnabledChanged(DependencyObject obj,
29 | DependencyPropertyChangedEventArgs e)
30 | {
31 | var passwordBox = obj as PasswordBox;
32 |
33 | if (passwordBox != null)
34 | {
35 | passwordBox.PasswordChanged -= PasswordBoxPasswordChanged;
36 |
37 | if ((bool)e.NewValue)
38 | {
39 | passwordBox.PasswordChanged += PasswordBoxPasswordChanged;
40 | }
41 |
42 | }
43 | }
44 |
45 | //when the passwordBox's password changed, update the buffer
46 | static void PasswordBoxPasswordChanged(object sender, RoutedEventArgs e)
47 | {
48 | var passwordBox = (PasswordBox)sender;
49 |
50 | if (!String.Equals(GetBindedPassword(passwordBox), passwordBox.Password))
51 | {
52 | SetBindedPassword(passwordBox, passwordBox.Password);
53 | }
54 | }
55 |
56 |
57 | public static string GetBindedPassword(DependencyObject obj)
58 | {
59 | return (string)obj.GetValue(BindedPasswordProperty);
60 | }
61 |
62 |
63 | public static void SetBindedPassword(DependencyObject obj, string value)
64 | {
65 | obj.SetValue(BindedPasswordProperty, value);
66 | }
67 |
68 | public static readonly DependencyProperty BindedPasswordProperty =
69 | DependencyProperty.RegisterAttached("BindedPassword", typeof(string),
70 | typeof(PasswordBoxBindingHelper),
71 | new UIPropertyMetadata(string.Empty, OnBindedPasswordChanged));
72 |
73 | //when the buffer changed, upate the passwordBox's password
74 | private static void OnBindedPasswordChanged(DependencyObject obj,
75 | DependencyPropertyChangedEventArgs e)
76 | {
77 | var passwordBox = obj as PasswordBox;
78 | if (passwordBox != null)
79 | {
80 |
81 | passwordBox.Password = e.NewValue == null ? string.Empty : e.NewValue.ToString();
82 | }
83 | }
84 |
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/NodeTapGui/Framwork/Imagin.Common.WPF.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EjiHuang/node-tap-gui/4e2938f8df559baa38ce0215a608aecbf48f9235/NodeTapGui/Framwork/Imagin.Common.WPF.dll
--------------------------------------------------------------------------------
/NodeTapGui/Framwork/Imagin.Common.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EjiHuang/node-tap-gui/4e2938f8df559baa38ce0215a608aecbf48f9235/NodeTapGui/Framwork/Imagin.Common.dll
--------------------------------------------------------------------------------
/NodeTapGui/Framwork/Net/PingHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Linq;
3 | using System.Net.NetworkInformation;
4 |
5 | namespace NodeTapGui.Framwork.Net
6 | {
7 | public class PingHelper
8 | {
9 |
10 | public delegate void DlgPingCompletedHandler(object sender, PingCompletedEventArgs p, params object[] parameters);
11 | public event DlgPingCompletedHandler PingCompleted = null;
12 |
13 | private object[] ps;
14 |
15 | public bool Ping(string ip, params object[] ps)
16 | {
17 | Ping p = new Ping();
18 | this.ps = ps;
19 | p.PingCompleted += new PingCompletedEventHandler(PingCompletedEx);
20 | if (!string.IsNullOrWhiteSpace(ip))
21 | {
22 | try
23 | {
24 | p.SendAsync(ip, 5000, null);
25 | return true;
26 | }
27 | catch
28 | {
29 | return false;
30 | }
31 | }
32 | return false;
33 | }
34 |
35 | private void PingCompletedEx(object sender, PingCompletedEventArgs e)
36 | {
37 | PingCompleted(this, e, ps);
38 | Ping ping = (Ping)sender;
39 | ping.Dispose();
40 | }
41 |
42 | public bool ValidateIPv4(string ipString)
43 | {
44 | if (String.IsNullOrWhiteSpace(ipString))
45 | {
46 | return false;
47 | }
48 |
49 | string[] splitValues = ipString.Split('.');
50 | if (splitValues.Length != 4)
51 | {
52 | return false;
53 | }
54 |
55 | byte tempForParsing;
56 |
57 | return splitValues.All(r => byte.TryParse(r, out tempForParsing));
58 | }
59 |
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/NodeTapGui/Framwork/NotifyProperty/NotifyPropertyEx.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.ComponentModel;
3 | using System.Runtime.CompilerServices;
4 | using System.Threading;
5 | using System.Windows;
6 | using System.Windows.Threading;
7 |
8 | namespace NotifyProperty
9 | {
10 | public class NotifyPropertyEx : INotifyPropertyChanged
11 | {
12 | public event PropertyChangedEventHandler PropertyChanged;
13 | private Dispatcher _dispatcher = Application.Current.Dispatcher;
14 | private object _value { get; set; }
15 |
16 | public NotifyPropertyEx()
17 | {
18 | Value = default(T);
19 | }
20 |
21 | public static implicit operator NotifyPropertyEx(T val)
22 | {
23 | return new NotifyPropertyEx { Value = val };
24 | }
25 |
26 | public static implicit operator T(NotifyPropertyEx prop)
27 | {
28 | return prop.Value;
29 | }
30 |
31 | public T Value
32 | {
33 | get => (T) _value;
34 |
35 | set => SetValue(value);
36 | }
37 |
38 | public void SetValue(T val)
39 | {
40 | if (val != null && !(val is T))
41 | {
42 | throw new InvalidCastException(string.Format("Cannot convert {0} to {1}", val.GetType(), typeof(T)));
43 | }
44 |
45 | if (Equals(val, _value))
46 | {
47 | return;
48 | }
49 |
50 | _value = val;
51 |
52 | OnPropertyChanged(nameof(Value));
53 | }
54 |
55 | protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
56 | {
57 | if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
58 | {
59 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
60 | }
61 | else
62 | {
63 | _dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
64 | {
65 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
66 | }));
67 | }
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/NodeTapGui/Images/Logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EjiHuang/node-tap-gui/4e2938f8df559baa38ce0215a608aecbf48f9235/NodeTapGui/Images/Logo.ico
--------------------------------------------------------------------------------
/NodeTapGui/Images/QRCode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EjiHuang/node-tap-gui/4e2938f8df559baa38ce0215a608aecbf48f9235/NodeTapGui/Images/QRCode.png
--------------------------------------------------------------------------------
/NodeTapGui/Models/RoutesTabelModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace NodeTapGui.Models
8 | {
9 | public class RoutesTabelModel
10 | {
11 | ///
12 | /// ip
13 | ///
14 | public string RouteIp { set; get; }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/NodeTapGui/NodeTapGui.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {530CB540-7F68-4D7C-BC26-23CD92C636CC}
8 | WinExe
9 | NodeTapGui
10 | NodeTapGui
11 | v4.6.1
12 | 512
13 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
14 | 4
15 | true
16 | false
17 | publish\
18 | true
19 | Disk
20 | false
21 | Foreground
22 | 7
23 | Days
24 | false
25 | false
26 | true
27 | 0
28 | 1.0.0.%2a
29 | false
30 | true
31 |
32 |
33 |
34 | AnyCPU
35 | true
36 | full
37 | false
38 | bin\Debug\
39 | DEBUG;TRACE
40 | prompt
41 | 4
42 |
43 |
44 | AnyCPU
45 | none
46 | true
47 | bin\Release\
48 | TRACE
49 | prompt
50 | 4
51 | Auto
52 |
53 |
54 | NodeTapGui.App
55 |
56 |
57 | LocalIntranet
58 |
59 |
60 | false
61 |
62 |
63 | Properties\app.manifest
64 |
65 |
66 | true
67 | bin\x64\Debug\
68 | DEBUG;TRACE
69 | full
70 | x64
71 | prompt
72 | MinimumRecommendedRules.ruleset
73 | true
74 |
75 |
76 | bin\x64\Release\
77 | TRACE
78 | true
79 | pdbonly
80 | x64
81 | prompt
82 | MinimumRecommendedRules.ruleset
83 | true
84 |
85 |
86 | Images\Logo.ico
87 |
88 |
89 |
90 | ..\packages\MetroRadiance.2.4.0\lib\net46\MetroRadiance.dll
91 |
92 |
93 | ..\packages\MetroRadiance.Chrome.2.2.0\lib\net46\MetroRadiance.Chrome.dll
94 |
95 |
96 | ..\packages\MetroRadiance.Core.2.4.0\lib\net46\MetroRadiance.Core.dll
97 |
98 |
99 | ..\packages\System.Windows.Interactivity.WPF.2.0.20525\lib\net40\Microsoft.Expression.Interactions.dll
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 | ..\packages\System.Windows.Interactivity.WPF.2.0.20525\lib\net40\System.Windows.Interactivity.dll
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 | 4.0
117 |
118 |
119 |
120 |
121 |
122 | ..\packages\ZXing.Net.0.16.4\lib\net461\zxing.dll
123 |
124 |
125 | ..\packages\ZXing.Net.0.16.4\lib\net461\zxing.presentation.dll
126 |
127 |
128 |
129 |
130 | MSBuild:Compile
131 | Designer
132 |
133 |
134 | QRCodeRect.xaml
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 | RoutesTableDialog.xaml
143 |
144 |
145 | Component
146 |
147 |
148 | NotifyIconComponent.cs
149 |
150 |
151 | Designer
152 | MSBuild:Compile
153 |
154 |
155 | Designer
156 | MSBuild:Compile
157 |
158 |
159 | Designer
160 | MSBuild:Compile
161 |
162 |
163 | MSBuild:Compile
164 | Designer
165 |
166 |
167 | App.xaml
168 | Code
169 |
170 |
171 |
172 |
173 |
174 | MainView.xaml
175 | Code
176 |
177 |
178 |
179 |
180 | Code
181 |
182 |
183 | True
184 | True
185 | Resources.resx
186 |
187 |
188 | True
189 | Settings.settings
190 | True
191 |
192 |
193 | ResXFileCodeGenerator
194 | Resources.Designer.cs
195 |
196 |
197 | NotifyIconComponent.cs
198 |
199 |
200 |
201 |
202 | SettingsSingleFileGenerator
203 | Settings.Designer.cs
204 |
205 |
206 |
207 |
208 | Designer
209 |
210 |
211 |
212 |
213 | False
214 | Microsoft .NET Framework 4.6.1 %28x86 和 x64%29
215 | true
216 |
217 |
218 | False
219 | .NET Framework 3.5 SP1
220 | false
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
--------------------------------------------------------------------------------
/NodeTapGui/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Resources;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 | using System.Windows;
6 |
7 | // 有关程序集的一般信息由以下
8 | // 控制。更改这些特性值可修改
9 | // 与程序集关联的信息。
10 | [assembly: AssemblyTitle("NodeTapGui")]
11 | [assembly: AssemblyDescription("")]
12 | [assembly: AssemblyConfiguration("")]
13 | [assembly: AssemblyCompany("Microsoft")]
14 | [assembly: AssemblyProduct("NodeTapGui")]
15 | [assembly: AssemblyCopyright("Copyright © Microsoft 2018")]
16 | [assembly: AssemblyTrademark("")]
17 | [assembly: AssemblyCulture("")]
18 |
19 | // 将 ComVisible 设置为 false 会使此程序集中的类型
20 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
21 | //请将此类型的 ComVisible 特性设置为 true。
22 | [assembly: ComVisible(false)]
23 |
24 | //若要开始生成可本地化的应用程序,请设置
25 | //.csproj 文件中的 CultureYouAreCodingWith
26 | //例如,如果您在源文件中使用的是美国英语,
27 | //使用的是美国英语,请将 设置为 en-US。 然后取消
28 | //对以下 NeutralResourceLanguage 特性的注释。 更新
29 | //以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
30 |
31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
32 |
33 |
34 | [assembly: ThemeInfo(
35 | ResourceDictionaryLocation.None, //主题特定资源词典所处位置
36 | //(未在页面中找到资源时使用,
37 | //或应用程序资源字典中找到时使用)
38 | ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
39 | //(未在页面中找到资源时使用,
40 | //、应用程序或任何主题专用资源字典中找到时使用)
41 | )]
42 |
43 |
44 | // 程序集的版本信息由下列四个值组成:
45 | //
46 | // 主版本
47 | // 次版本
48 | // 生成号
49 | // 修订号
50 | //
51 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
52 | // 方法是按如下所示使用“*”: :
53 | // [assembly: AssemblyVersion("1.0.*")]
54 | [assembly: AssemblyVersion("1.0.0.0")]
55 | [assembly: AssemblyFileVersion("1.0.0.0")]
56 |
--------------------------------------------------------------------------------
/NodeTapGui/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace NodeTapGui.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// 一个强类型的资源类,用于查找本地化的字符串等。
17 | ///
18 | // 此类是由 StronglyTypedResourceBuilder
19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
21 | // (以 /str 作为命令选项),或重新生成 VS 项目。
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// 返回此类使用的缓存的 ResourceManager 实例。
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NodeTapGui.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 使用此强类型资源类,为所有资源查找
51 | /// 重写当前线程的 CurrentUICulture 属性。
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/NodeTapGui/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/NodeTapGui/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace NodeTapGui.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/NodeTapGui/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/NodeTapGui/Properties/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
47 |
54 |
55 |
69 |
--------------------------------------------------------------------------------
/NodeTapGui/Styles/Generic.xaml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/NodeTapGui/Views/MainView.xaml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
42 |
43 |
52 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
84 |
100 |
101 |
102 |
111 |
118 |
119 |
128 |
136 |
137 |
146 |
153 |
154 |
163 |
167 |
174 |
180 |
187 |
188 |
189 |
190 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
208 |
209 |
219 |
229 |
230 |
242 |
243 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
263 |
271 |
279 |
280 |
281 |
282 |
290 |
291 |
292 |
304 |
305 |
306 |
307 |
--------------------------------------------------------------------------------
/NodeTapGui/Views/MainView.xaml.cs:
--------------------------------------------------------------------------------
1 | using Common;
2 | using NodeTapGui.Controls;
3 | using NodeTapGui.Framwork.Net;
4 | using NodeTapGui.Models;
5 | using NotifyProperty;
6 | using System;
7 | using System.Collections.Generic;
8 | using System.Collections.ObjectModel;
9 | using System.Configuration;
10 | using System.Drawing;
11 | using System.IO;
12 | using System.Linq;
13 | using System.Net.NetworkInformation;
14 | using System.Reflection;
15 | using System.Runtime.InteropServices;
16 | using System.Text;
17 | using System.Text.RegularExpressions;
18 | using System.Windows;
19 | using System.Windows.Controls;
20 | using System.Windows.Forms;
21 | using System.Windows.Threading;
22 | using ZXing;
23 | using ZXing.Common;
24 | using ZXing.QrCode;
25 | using MessageBox = System.Windows.MessageBox;
26 |
27 | namespace NodeTapGui
28 | {
29 | ///
30 | /// MainView.xaml 的交互逻辑
31 | ///
32 | public partial class MainView
33 | {
34 | #region constructor
35 |
36 | public MainView()
37 | {
38 | InitializeComponent();
39 | // 绑定数据上下文
40 | DataContext = this;
41 | // 加载事件方法
42 | HandleEvents();
43 |
44 | // 初始化Ping完成事件
45 | _ping.PingCompleted += _ping_PingCompleted;
46 | }
47 |
48 | #endregion
49 |
50 | #region Constants
51 |
52 | /*
53 | * 规则:.\sstap.exe --host [ss host] --port [ss port] --passwd [ss password] --xtudp [x times] --method [ss method]
54 | * 命令:host: 默认 Shadowsocks地址(可选)
55 | * port: 默认 Shadowsocks端口(可选)
56 | * passwd: 默认 Shadowsocks密码(可选)
57 | * method: 默认 Shadowsocks加密方式(可选)
58 | * tcphost: TCP Shadowsocks地址(可选)
59 | * tcpport: TCP Shadowsocks端口(可选)
60 | * tcppasswd: TCP Shadowsocks密码(可选)
61 | * tcpmethod: TCP Shadowsocks加密方式(可选)
62 | * udphost: UDP Shadowsocks地址(可选)
63 | * udpport: UDP Shadowsocks端口(可选)
64 | * udppasswd: UDP Shadowsocks密码(可选)
65 | * udpmethod: UDP Shadowsocks加密方式(可选)
66 | * xtudp: UDP 多倍发包倍率(适用于游戏)
67 | * dns: 指定DNS(默认8.8.8.8)
68 | * skipdns: DNS不经过Shadowsocks转发(默认false)
69 | * routes: 指定单个或多个CIDR被转发, 例如: 1.1.1.1/32,2.2.2.2/24(默认0.0.0.0/0)
70 | */
71 | const string CMD_NODE_TAP_EXE = @".\sstap.exe ";
72 | const string CMD_HOST = @"--host ";
73 | const string CMD_PORT = @"--port ";
74 | const string CMD_PASSWD = @"--passwd ";
75 | const string CMD_METHOD = @"--method ";
76 | const string CMD_TCPHOST = @"--tcphost ";
77 | const string CMD_TCPPORT = @"--tcpport ";
78 | const string CMD_TCPPASSWD = @"--tcppasswd ";
79 | const string CMD_TCPMETHOD = @"--tcpmethod ";
80 | const string CMD_UDPHOST = @"--udphost ";
81 | const string CMD_UDPPORT = @"--udpport ";
82 | const string CMD_UDPPASSWD = @"--udppasswd ";
83 | const string CMD_UDPMETHOD = @"--udpmethod ";
84 | const string CMD_XTUDP = @"--xtudp ";
85 | const string CMD_DNS = @"--dns ";
86 | const string CMD_SKIPDNS = @"--skipdns ";
87 | const string CMD_ROUTES = @"--routes ";
88 |
89 | #endregion
90 |
91 | #region properties
92 |
93 | ///
94 | /// 尾标
95 | ///
96 | public string CmdTag = Environment.NewLine + @"$ ";
97 |
98 | ///
99 | /// 命令字符串
100 | ///
101 | public string CmdString = string.Empty;
102 |
103 | ///
104 | /// 控制台帮助类
105 | ///
106 | public CmdHelper Cmd;
107 |
108 | ///
109 | /// 加密方式
110 | ///
111 | public NotifyPropertyEx> MethodList { get; } = new List
112 | {
113 | "rc4-md5", "aes-256-cfb", "aes-128-gcm", "aes-192-gcm", "aes-256-gcm"
114 | };
115 |
116 | ///
117 | /// 控制台输出文本
118 | ///
119 | public NotifyPropertyEx ConsoleText { get; } = string.Empty;
120 |
121 | ///
122 | /// 是否开启UDP多倍发包倍率
123 | ///
124 | public NotifyPropertyEx IsXtudp { get; } = true;
125 |
126 | ///
127 | /// Host
128 | ///
129 | public NotifyPropertyEx Host { get; } = ConfigurationManager.AppSettings["Host"];
130 |
131 | ///
132 | /// Port
133 | ///
134 | public NotifyPropertyEx Port { get; } = ConfigurationManager.AppSettings["Port"];
135 |
136 | ///
137 | /// Password
138 | ///
139 | public NotifyPropertyEx Password { get; } = ConfigurationManager.AppSettings["Password"];
140 |
141 | ///
142 | /// Method
143 | ///
144 | public NotifyPropertyEx Method { get; } = ConfigurationManager.AppSettings["Method"];
145 |
146 | ///
147 | /// Xtudp Times
148 | ///
149 | public NotifyPropertyEx XtudpTimes { get; } = "20";
150 |
151 | ///
152 | /// Udp Protocol?
153 | ///
154 | public NotifyPropertyEx IsUdpProtocol { get; } = false;
155 |
156 | ///
157 | /// Enable Separate Mode?
158 | ///
159 | public NotifyPropertyEx IsSeparateMode { get; } = false;
160 |
161 | ///
162 | /// Enable Routes Mode?
163 | ///
164 | public NotifyPropertyEx IsRoutesMode { get; } = false;
165 |
166 | ///
167 | /// 网络延迟
168 | ///
169 | public NotifyPropertyEx HostDelays { get; } = string.Empty;
170 |
171 | ///
172 | /// Ping Helper
173 | ///
174 | private PingHelper _ping = new PingHelper();
175 |
176 | ///
177 | /// 路由表文本路径
178 | ///
179 | private string _routesPath = ConfigurationManager.AppSettings["RoutesPath"];
180 |
181 | ///
182 | /// 路由表集合
183 | ///
184 | public ObservableCollection RoutesTableCollection = new ObservableCollection();
185 |
186 | #endregion
187 |
188 | #region methods
189 |
190 | ///
191 | /// 事件集合
192 | ///
193 | private void HandleEvents()
194 | {
195 | /// ##############################################################################
196 | /// 事件:窗口加载完成事件
197 | /// ##############################################################################
198 | Loaded += MainWindow_Loaded;
199 |
200 | /// ##############################################################################
201 | /// 事件:窗口关闭事件
202 | /// ##############################################################################
203 | Closed += MainWindow_Closed;
204 |
205 | /// ##############################################################################
206 | /// 事件:文本框编辑事件,使文本框一直保持文本最后
207 | /// ##############################################################################
208 | ConsoleView.TextChanged += ConsoleView_TextChanged;
209 |
210 | /// ##############################################################################
211 | /// 事件:扫描屏幕上的二维码并且绘制矩形标志
212 | /// ##############################################################################
213 | Btn_QRCodeImport.Click += Btn_QRCodeImport_Click;
214 |
215 | /// ##############################################################################
216 | /// 事件:路由表导入按钮单击事件
217 | /// ##############################################################################
218 | Btn_RoutesImport.Click += Btn_RoutesImport_ClickAsync;
219 |
220 | /// ##############################################################################
221 | /// 事件:显示当前路由表按钮单击事件
222 | /// ##############################################################################
223 | Btn_CurrRoutesTableShow.Click += Btn_CurrRoutesTableShow_Click;
224 |
225 | /// ##############################################################################
226 | /// 事件:启动按钮按钮单击事件
227 | /// ##############################################################################
228 | Btn_Start.Click += Btn_Start_ClickAsync;
229 | }
230 |
231 | ///
232 | /// 导入本地的路由表文件
233 | ///
234 | private async void ImportLocalRoutesTableAsync()
235 | {
236 | var list = await CommonFunc.ReadLineAsync(_routesPath);
237 | list?.ForEach(o => { RoutesTableCollection.Add(new RoutesTabelModel { RouteIp = o }); });
238 | }
239 |
240 | ///
241 | /// 识别二维码并且绘制矩形
242 | ///
243 | /// 二维码字符流
244 | private string DecodeQRCodeAndDrawRect()
245 | {
246 | foreach (var screen in Screen.AllScreens)
247 | {
248 | using (Bitmap bmpScreen = new Bitmap(screen.Bounds.Width, screen.Bounds.Height))
249 | {
250 | using (Graphics g = Graphics.FromImage(bmpScreen))
251 | {
252 | g.CopyFromScreen(screen.Bounds.X, screen.Bounds.Y, 0, 0, bmpScreen.Size, CopyPixelOperation.SourceCopy);
253 | }
254 |
255 | var source = new BitmapLuminanceSource(bmpScreen);
256 | var bitmap = new BinaryBitmap(new HybridBinarizer(source));
257 | var result = new QRCodeReader().decode(bitmap);
258 |
259 | if (null != result)
260 | {
261 | var retX = result.ResultPoints.Select(o => o.X);
262 | var retY = result.ResultPoints.Select(o => o.Y);
263 | var minX = retX.Min();
264 | var minY = retY.Min();
265 | var maxX = retX.Max();
266 | var maxY = retY.Max();
267 |
268 | var margin = (maxX - minX) * 0.20f;
269 | minX += -margin;
270 | maxX += margin;
271 | minY += -margin;
272 | maxY += margin;
273 |
274 | // 使用GDI+进行矩形绘制,不够炫酷,弃用
275 | //using (var pen = new Pen(ColorTranslator.FromHtml("#F7190B"), 4F))
276 | //{
277 | // using (var g = Graphics.FromHdc(GetWindowDC(IntPtr.Zero)))
278 | // g.DrawRectangle(pen, (float)minX, (float)minY, (float)(maxX - minX), (float)(maxY - minY));
279 | //}
280 |
281 | // 用于获取系统dpi缩放比例
282 | PresentationSource ps = PresentationSource.FromVisual(this);
283 | if (ps != null)
284 | {
285 | // 显示二维码矩形
286 | var qrcRect = new QRCodeRect
287 | (
288 | // 除于缩放比例以达到局部窗口禁用缩放比例的效果
289 | targetWidth: (maxX - minX) / (float)ps.CompositionTarget.TransformToDevice.M11,
290 | targetHeight: (maxY - minY) / (float)ps.CompositionTarget.TransformToDevice.M22,
291 | targetLeft: minX / (float)ps.CompositionTarget.TransformToDevice.M11,
292 | targetTop: minY / (float)ps.CompositionTarget.TransformToDevice.M22,
293 | fullHeight: screen.Bounds.Height,
294 | fullWidth: screen.Bounds.Width
295 | );
296 | qrcRect.Top = qrcRect.Left = 0;
297 | qrcRect.Width = screen.Bounds.Width;
298 | qrcRect.Height = screen.Bounds.Height;
299 | qrcRect.Show();
300 | }
301 |
302 | return result.Text;
303 | }
304 | }
305 | }
306 | // 到这里说明GG了
307 | return string.Empty;
308 | }
309 |
310 | ///
311 | /// 获取到Host的网络延迟
312 | ///
313 | public void GetHostDelays()
314 | {
315 | if (!_ping.Ping(Host.Value))
316 | {
317 | // 地址无效
318 | HostDelays.Value = "invalid addr";
319 | }
320 | }
321 |
322 | ///
323 | /// ping完成事件
324 | ///
325 | ///
326 | ///
327 | ///
328 | private void _ping_PingCompleted(object sender, PingCompletedEventArgs e, params object[] parameters)
329 | {
330 | HostDelays.Value = (e.Reply == null) ? "time out" : e.Reply.RoundtripTime.ToString() + " ms";
331 | }
332 |
333 | ///
334 | /// 检查当前网络是否连通
335 | ///
336 | ///
337 | private static bool IsConnectInternet()
338 | {
339 | int Description = 0;
340 | return InternetGetConnectedState(Description, 0);
341 | }
342 | [DllImport("wininet.dll")]
343 | private extern static bool InternetGetConnectedState(int Description, int ReservedValue);
344 |
345 | #endregion
346 |
347 | #region control event
348 |
349 | ///
350 | /// 事件:窗口加载完成事件
351 | ///
352 | ///
353 | ///
354 | private void MainWindow_Loaded(object sender, RoutedEventArgs e)
355 | {
356 | if (!IsConnectInternet())
357 | MessageBox.Show("网络电波貌似无法到达,请检查当前计算机网络是否连通。", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
358 | ConsoleView.ScrollToEnd();
359 | ConsoleText.Value += "ʕ •ᴥ•ʔ Welcome to use node sstap.";
360 |
361 | Cmd = new CmdHelper(this);
362 |
363 | // 判断是否存在路由表文档文件,没有则创建
364 | if (!File.Exists(_routesPath))
365 | File.Create(_routesPath).Close();
366 |
367 | // 导入当前路由表文档文件
368 | ImportLocalRoutesTableAsync();
369 |
370 | // 启动获取网络延迟定时器
371 | CommonEx.TimerGetHostDelays = new DispatcherTimer(DispatcherPriority.Background)
372 | {
373 | Interval = TimeSpan.FromSeconds(1),
374 | Tag = "TIMER_GET_HOST_DELAYS"
375 | };
376 | CommonEx.TimerGetHostDelays.Tick += (s, args) => GetHostDelays();
377 | CommonEx.TimerGetHostDelays.Start();
378 | }
379 |
380 | ///
381 | /// 事件:窗口关闭事件
382 | ///
383 | ///
384 | ///
385 | private void MainWindow_Closed(object sender, EventArgs e)
386 | {
387 | // 保存信息到程序配置中
388 | Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
389 | cfa.AppSettings.Settings["Host"].Value = Host.Value;
390 | cfa.AppSettings.Settings["Port"].Value = Port.Value;
391 | cfa.AppSettings.Settings["Password"].Value = Password.Value;
392 | cfa.AppSettings.Settings["Method"].Value = Method.Value;
393 | cfa.Save();
394 | // 关闭SSTAP进程
395 | Cmd.CloseProc();
396 | }
397 |
398 | ///
399 | /// 事件:启动按钮按钮单击事件
400 | ///
401 | ///
402 | ///
403 | private async void Btn_Start_ClickAsync(object sender, RoutedEventArgs e)
404 | {
405 | // 构造命令
406 | CmdString = CMD_NODE_TAP_EXE;
407 | // 添加Host
408 | CmdString += string.IsNullOrWhiteSpace(Host.Value) ? "" : string.Format("{0}{1} ", CMD_HOST, Host.Value);
409 | // 添加端口
410 | CmdString += string.IsNullOrWhiteSpace(Port.Value) ? "" : string.Format("{0}{1} ", CMD_PORT, Port.Value);
411 | // 添加密码
412 | CmdString += string.IsNullOrWhiteSpace(Password.Value) ? "" : string.Format("{0}{1} ", CMD_PASSWD, Password.Value);
413 | // 判断udp多倍发包倍率(适用于游戏)
414 | if (IsXtudp)
415 | {
416 | // Xtudp Times
417 | CmdString += string.IsNullOrWhiteSpace(XtudpTimes.Value) ? "" : string.Format("{0}{1} ", CMD_XTUDP, XtudpTimes.Value);
418 | }
419 | // 加密
420 | CmdString += string.IsNullOrWhiteSpace(Method.Value) ? "" : string.Format("{0}{1} ", CMD_METHOD, Method.Value);
421 |
422 | // 判断通信协议
423 | if (IsSeparateMode.Value && !IsUdpProtocol)
424 | {
425 | // tcp host
426 | CmdString += string.IsNullOrWhiteSpace(Host.Value) ? "" : string.Format("{0}{1} ", CMD_TCPHOST, Host.Value);
427 | // tcp port
428 | CmdString += string.IsNullOrWhiteSpace(Port.Value) ? "" : string.Format("{0}{1} ", CMD_TCPPORT, Port.Value);
429 | // tcp passwd
430 | CmdString += string.IsNullOrWhiteSpace(Password.Value) ? "" : string.Format("{0}{1} ", CMD_TCPPASSWD, Password.Value);
431 | // tcp method
432 | CmdString += string.IsNullOrWhiteSpace(Method.Value) ? "" : string.Format("{0}{1} ", CMD_TCPMETHOD, Method.Value);
433 | }
434 | else if (IsSeparateMode.Value && IsUdpProtocol)
435 | {
436 | // udp host
437 | CmdString += string.IsNullOrWhiteSpace(Host.Value) ? "" : string.Format("{0}{1} ", CMD_UDPHOST, Host.Value);
438 | // udp port
439 | CmdString += string.IsNullOrWhiteSpace(Port.Value) ? "" : string.Format("{0}{1} ", CMD_UDPPORT, Port.Value);
440 | // udp passwd
441 | CmdString += string.IsNullOrWhiteSpace(Password.Value) ? "" : string.Format("{0}{1} ", CMD_UDPPASSWD, Password.Value);
442 | // udp method
443 | CmdString += string.IsNullOrWhiteSpace(Method.Value) ? "" : string.Format("{0}{1} ", CMD_UDPMETHOD, Method.Value);
444 | }
445 |
446 | // 是否开启路由表转发
447 | if (IsRoutesMode.Value)
448 | {
449 | // routes
450 | CmdString += string.IsNullOrWhiteSpace(File.ReadAllText(_routesPath)) ? "" : string.Format("{0}{1} ", CMD_ROUTES, _routesPath);
451 | }
452 |
453 | ConsoleText.Value += CmdTag + CmdString + Environment.NewLine;
454 | await Cmd.ExecuteCommandAsync(CmdString);
455 |
456 | // ʕ •ᴥ•ʔ保持焦点
457 | ConsoleView.Focus();
458 | }
459 |
460 | ///
461 | /// 事件:文本框编辑事件,使文本框一直保持文本最后
462 | ///
463 | ///
464 | ///
465 | private void ConsoleView_TextChanged(object sender, TextChangedEventArgs e)
466 | {
467 | ConsoleView.SelectionStart = ConsoleView.Text.Length;
468 | ConsoleView.ScrollToEnd();
469 | }
470 |
471 | ///
472 | /// 事件:扫描屏幕上的二维码并且绘制矩形标志
473 | ///
474 | ///
475 | ///
476 | private void Btn_QRCodeImport_Click(object sender, RoutedEventArgs e)
477 | {
478 | var data = DecodeQRCodeAndDrawRect();
479 | if (string.IsNullOrWhiteSpace(data))
480 | MessageBox.Show("二维码识别错误,请检查当前屏幕下是否存在清晰的二维码?", "注意", MessageBoxButton.OK, MessageBoxImage.Warning);
481 | else
482 | {
483 | // 屏蔽掉ss://和等号后面的中文字符
484 | if (data.Substring(0, 5) != "ss://")
485 | {
486 | MessageBox.Show("好像不是ss的二维码吧?请尝试手动输入", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
487 | return;
488 | }
489 | byte[] buffer;
490 | if (data.IndexOf('#') == -1)
491 | {
492 | buffer = Convert.FromBase64String(data.Substring(5));
493 | }
494 | else
495 | {
496 | buffer = Convert.FromBase64String(data.Substring(5, data.IndexOf('#') - 5));
497 | }
498 | string decodedData = Encoding.UTF8.GetString(buffer);
499 | var arrayData = decodedData.Split(':');
500 | // 设置数据
501 | Method.Value = arrayData[0];
502 | Password.Value = arrayData[1].Split('@')[0];
503 | Host.Value = arrayData[1].Split('@')[1];
504 | Port.Value = arrayData[2];
505 |
506 | // 若不支持的加密方式则提示用户
507 | if (!MethodList.Value.Contains(arrayData[0].ToLower()))
508 | {
509 | MessageBox.Show($"当前版本的NodeTap貌似不支持{arrayData[0]}加密方式,您可以咨询NodeTap作者或者尝试继续使用。", "注意", MessageBoxButton.OK, MessageBoxImage.Warning);
510 | }
511 | #if DEBUG
512 | Console.WriteLine(decodedData);
513 | #endif
514 | }
515 | }
516 |
517 | ///
518 | /// 编辑当前路由表按钮单击事件
519 | ///
520 | ///
521 | ///
522 | private void Btn_CurrRoutesTableShow_Click(object sender, RoutedEventArgs e)
523 | {
524 | // 显示路由表对话框
525 | var dlg = new RoutesTableDialog(RoutesTableCollection);
526 | dlg.ShowDialog();
527 | // 编辑完毕后,写入路由表配置文件
528 | File.WriteAllBytes(_routesPath, new byte[0]);
529 | using (StreamWriter writer = new StreamWriter(_routesPath, false))
530 | {
531 | foreach (var item in RoutesTableCollection)
532 | {
533 | writer.WriteLine(item.RouteIp);
534 | }
535 | }
536 | }
537 |
538 | ///
539 | /// 路由表导入按钮单击事件
540 | ///
541 | ///
542 | ///
543 | private async void Btn_RoutesImport_ClickAsync(object sender, RoutedEventArgs e)
544 | {
545 | Microsoft.Win32.OpenFileDialog dlg =
546 | new Microsoft.Win32.OpenFileDialog { DefaultExt = ".txt", Filter = "Text Document (*.txt)|*.txt" };
547 | bool? ret = dlg.ShowDialog();
548 | if (ret == true)
549 | {
550 | // 清空之前
551 | RoutesTableCollection.Clear();
552 | var list = await CommonFunc.ReadLineAsync(dlg.FileName);
553 | list?.ForEach(o => { RoutesTableCollection.Add(new RoutesTabelModel { RouteIp = o }); });
554 | if (RoutesTableCollection.Count == 0)
555 | {
556 | MessageBox.Show("您导入的文件好像什么都没有哦", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
557 | }
558 | else
559 | {
560 | // 新导入的路由表覆盖本地路由表配置文件
561 | File.WriteAllBytes(_routesPath, new byte[0]);
562 | using (StreamWriter writer = new StreamWriter(_routesPath, false))
563 | {
564 | foreach (var item in RoutesTableCollection)
565 | {
566 | writer.WriteLine(item.RouteIp);
567 | }
568 | }
569 | }
570 | }
571 | }
572 |
573 | ///
574 | /// 密码框光标处理
575 | ///
576 | ///
577 | ///
578 | private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
579 | {
580 | PasswordBox pwdBox = (PasswordBox)sender;
581 | var select = pwdBox.GetType().GetMethod("Select", BindingFlags.Instance | BindingFlags.NonPublic);
582 | select.Invoke(pwdBox, new object[] { pwdBox.Password.Length + 1, pwdBox.Password.Length + 1 });
583 | }
584 |
585 |
586 |
587 | ///
588 | /// 只能输入数字
589 | ///
590 | ///
591 | ///
592 | private void TB_XtudpTimes_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
593 | {
594 | Regex regex = new Regex("[^0-9.-]+");
595 | e.Handled = regex.IsMatch(e.Text);
596 | }
597 |
598 |
599 | #endregion
600 |
601 | #region native api
602 |
603 | [DllImport("user32.dll")]
604 | public static extern IntPtr GetWindowDC(IntPtr hWnd);
605 |
606 | #endregion
607 |
608 | }
609 | }
610 |
--------------------------------------------------------------------------------
/NodeTapGui/Views/RoutesTableDialog.xaml:
--------------------------------------------------------------------------------
1 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
40 |
41 |
50 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
69 |
70 |
73 |
74 |
75 |
76 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/NodeTapGui/Views/RoutesTableDialog.xaml.cs:
--------------------------------------------------------------------------------
1 | using NodeTapGui.Models;
2 | using System;
3 | using System.Collections.ObjectModel;
4 | using System.Windows.Controls;
5 |
6 | namespace NodeTapGui
7 | {
8 | ///
9 | /// RoutesTableDialog.xaml 的交互逻辑
10 | ///
11 | public partial class RoutesTableDialog
12 | {
13 | #region properties
14 |
15 | ///
16 | /// 路由表集合
17 | ///
18 | public ObservableCollection RoutesTableCollection { set; get; }
19 |
20 | #endregion
21 |
22 | #region constructors
23 |
24 | public RoutesTableDialog()
25 | {
26 | InitializeComponent();
27 | // 设置数据上下文
28 | DataContext = this;
29 | }
30 |
31 | public RoutesTableDialog(ObservableCollection collection) : this()
32 | {
33 | // 接收路由表集合
34 | RoutesTableCollection = collection;
35 | }
36 |
37 |
38 | #endregion
39 |
40 | #region controls event
41 |
42 | ///
43 | /// 当前Cell改变事件
44 | ///
45 | ///
46 | ///
47 | private void DataGrid_CurrentCellChanged(object sender, EventArgs e)
48 | {
49 | DataGrid dg = sender as DataGrid;
50 | // 将为空的项从集合中移除
51 | if (null != dg.SelectedItem && string.IsNullOrWhiteSpace((dg.SelectedItem as RoutesTabelModel)?.RouteIp))
52 | {
53 | if (dg.SelectedIndex < RoutesTableCollection.Count)
54 | {
55 | RoutesTableCollection.RemoveAt(dg.SelectedIndex);
56 | }
57 | }
58 | }
59 |
60 | #endregion
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/NodeTapGui/WinFormComponent/NotifyIconComponent.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace NodeTapGui.WinFormComponent
2 | {
3 | partial class NotifyIconComponent
4 | {
5 | ///
6 | /// 必需的设计器变量。
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// 清理所有正在使用的资源。
12 | ///
13 | /// 如果应释放托管资源,为 true;否则为 false。
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region 组件设计器生成的代码
24 |
25 | ///
26 | /// 设计器支持所需的方法 - 不要修改
27 | /// 使用代码编辑器修改此方法的内容。
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NotifyIconComponent));
33 | this.NotifyIcon = new System.Windows.Forms.NotifyIcon(this.components);
34 | this.NotifyIconContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
35 | this.MenuItem_ShowWindow = new System.Windows.Forms.ToolStripMenuItem();
36 | this.MenuItem_CloseApp = new System.Windows.Forms.ToolStripMenuItem();
37 | this.NotifyIconContextMenuStrip.SuspendLayout();
38 | //
39 | // NotifyIcon
40 | //
41 | this.NotifyIcon.ContextMenuStrip = this.NotifyIconContextMenuStrip;
42 | this.NotifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("NotifyIcon.Icon")));
43 | this.NotifyIcon.Text = "NodeTapGui";
44 | this.NotifyIcon.Visible = true;
45 | //
46 | // NotifyIconContextMenuStrip
47 | //
48 | this.NotifyIconContextMenuStrip.ImageScalingSize = new System.Drawing.Size(24, 24);
49 | this.NotifyIconContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
50 | this.MenuItem_ShowWindow,
51 | this.MenuItem_CloseApp});
52 | this.NotifyIconContextMenuStrip.Name = "NotifyIconContextMenuStrip";
53 | this.NotifyIconContextMenuStrip.Size = new System.Drawing.Size(159, 60);
54 | //
55 | // MenuItem_ShowWindow
56 | //
57 | this.MenuItem_ShowWindow.Name = "MenuItem_ShowWindow";
58 | this.MenuItem_ShowWindow.Size = new System.Drawing.Size(158, 28);
59 | this.MenuItem_ShowWindow.Text = "Show me";
60 | //
61 | // MenuItem_CloseApp
62 | //
63 | this.MenuItem_CloseApp.Name = "MenuItem_CloseApp";
64 | this.MenuItem_CloseApp.Size = new System.Drawing.Size(158, 28);
65 | this.MenuItem_CloseApp.Text = "Close me";
66 | this.NotifyIconContextMenuStrip.ResumeLayout(false);
67 |
68 | }
69 |
70 | #endregion
71 |
72 | private System.Windows.Forms.NotifyIcon NotifyIcon;
73 | private System.Windows.Forms.ContextMenuStrip NotifyIconContextMenuStrip;
74 | private System.Windows.Forms.ToolStripMenuItem MenuItem_ShowWindow;
75 | private System.Windows.Forms.ToolStripMenuItem MenuItem_CloseApp;
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/NodeTapGui/WinFormComponent/NotifyIconComponent.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Diagnostics;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 | using System.Windows;
9 |
10 | namespace NodeTapGui.WinFormComponent
11 | {
12 | public partial class NotifyIconComponent: Component
13 | {
14 | #region properties
15 |
16 | ///
17 | /// 用于通知View显示窗口
18 | ///
19 | public EventHandler OnShowWindowHandler;
20 |
21 | #endregion
22 |
23 | #region constructor
24 |
25 | public NotifyIconComponent()
26 | {
27 | InitializeComponent();
28 | // 基本配置
29 | NotifyIcon.Visible = true;
30 | MenuItem_ShowWindow.Click +=
31 | (s, e) => OnShowWindowHandler?.Invoke(null, null);
32 | MenuItem_CloseApp.Click +=
33 | (s, e) => Application.Current.Shutdown();
34 | NotifyIcon.DoubleClick +=
35 | (s, e) => OnShowWindowHandler?.Invoke(null, null);
36 | }
37 |
38 | public NotifyIconComponent(IContainer container)
39 | {
40 | container.Add(this);
41 |
42 | InitializeComponent();
43 | }
44 |
45 | #endregion
46 |
47 | #region method
48 |
49 | ///
50 | /// 显示气泡提示
51 | ///
52 | ///
53 | ///
54 | public void ShowBalloonTip(string msg, string title = "Tip")
55 | => NotifyIcon.ShowBalloonTip(3000, msg, title, System.Windows.Forms.ToolTipIcon.Info);
56 |
57 | #endregion
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/NodeTapGui/WinFormComponent/NotifyIconComponent.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 179, 17
125 |
126 |
127 |
128 |
129 | AAABAAQAMDAAAAEAIACoJQAARgAAABAQAAABACAAaAQAAO4lAAAgIAAAAQAgAKgQAABWKgAAAAAAAAEA
130 | IAAMoQAA/joAACgAAAAwAAAAYAAAAAEAIAAAAAAAACQAABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAAAA
131 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
132 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
134 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
135 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
136 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
137 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
138 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
139 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
140 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
141 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
142 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
143 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
144 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
145 | AAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAA
146 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
147 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
148 | AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAIAAAACAAAAAgAA
149 | AAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
150 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
151 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAwAAAAMAAAAEAAAABQAAAAUAAAAFAAAABQAA
152 | AAQAAAAEAAAAAwAAAAMAAAADAAAAAgAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
153 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
154 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAHAAAAEwIC
155 | AloAAAAhAAAAEgAAAAoAAAAGAAAABQAAAAQAAAAEAAAAAwAAAAMAAAACAAAAAgAAAAEAAAABAAAAAAAA
156 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
157 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAMAAAAEAAAABQAA
158 | AAcAAAAKBgYGTA8PD9cAAAA1AAAALgAAAB0AAAARAAAACwAAAAgAAAAGAAAABQAAAAQAAAAEAAAAAwAA
159 | AAIAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
160 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAACAAAAAwAA
161 | AAUAAAAFAAAABwAAAAkAAAALDAwMbRcXF+4AAAAoAAAANQAAACwAAAAeAAAAFQAAAA4AAAAKAAAACAAA
162 | AAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
163 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAA
164 | AAIAAAAEAAAABQAAAAYAAAAHAAAACQAAAAsAAAANDw8PghoaGvQAAAAhAAAALgAAAC8AAAAmAAAAHAAA
165 | ABUAAAAQAAAADQAAAAwAAAAOAAAAEwAAAAoAAAAFAAAAAwAAAAIAAAACAAAAAQAAAAEAAAAAAAAAAAAA
166 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAA
167 | AAIAAAACAAAAAwAAAAQAAAAFAAAABgAAAAgAAAAKAAAACwAAAA0AAAAOEhISkRsbG/EAAAAaAAAAJwAA
168 | ACwAAAAqAAAAIgAAABsAAAAXAAAAEwAAABIEBARWBgYGnAAAACgAAAASAAAACAAAAAUAAAAEAAAAAgAA
169 | AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
170 | AAEAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAIAAAACQAAAAsAAAAMAAAADgAAAA8CAgIVJSUluSIi
171 | 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
241 | bG1KSkv/U1NW/lRUVf9GRlv/JiZ//ysri/9BQV7/RERE/zs7O/EoKCiSDw8PFgAAAAIAAAABAAAAAQAA
242 | AAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
243 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlJSUFIyMjmSQkJPk2Nja8NTU1+yMj
244 | I5YCAgIEHR0dCy0tLdo3Nzffb29vXUBAP8BBQUf2OTlR+T09VfpAQETyNTU1wCIhIVkLCwsMAAAAAQAA
245 | AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
246 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCwsAigo
247 | KAsZGRkQIiIi2j4+Pv8xMTHPMjIyqTMzM/8qKip1b29vAnV1dQZJSUkqODg4NiwsLDwqKiooGxsbCwEC
248 | AgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
249 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
250 | AAAAAAAAAAAAAAAAAAAAAAAAJycnCCcnJ4UzMzP+Ozs7/zAwMPobGxscAAAAAAAAAAAAAAAAAAAAAAAA
251 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
252 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
253 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMjIwEjIyNTJycnyCQkJIkAAAAAAAAAAAAA
254 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
255 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
256 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
257 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
258 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
259 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
260 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
261 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
262 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
263 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
264 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
265 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
266 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
267 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
268 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
269 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
270 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
271 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
272 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
273 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
274 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
275 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
276 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
277 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
278 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
279 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
280 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
281 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
282 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
283 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
284 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP//
285 | /AA//wAA///4AA//AAD///AAA/8AAP//4AAA/wAA//+AAAA/AAD//wAAAA8AAP/8AAAABwAA//AAAAAD
286 | AAD/wAAAAAMAAPAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAA
287 | AAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAQAAgAAAAAAB
288 | AACAAAAAAAEAAMAAAAAAAQAA4AAAAAABAADwAAAAAAEAAPwAAAAAAQAA/wAAAAADAAD/gAAAAB8AAP/g
289 | AAAB/wAA//AAAH//AAD/+AAD//8AAP//A////wAA//+H////AAD///////8AAP///////wAA////////
290 | AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAEAAAACAA
291 | AAABACAAAAAAAAAEAAASCwAAEgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
292 | AAIBAQEWAAAAFAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
293 | AAMAAAAACAgIWgMDA0wAAAAIAAAAAQAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
294 | AAMAAAAGAAAAAA8PD28FBQVIAAAACwAAAAUEBAROAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
295 | AAQAAAAHAAAAEAAAAA0cHBykCwsLVAAAAAkCAgIeCwsLhQAAAAkAAAAAAAAAAQAAAAAAAAAAAAAAAAAA
296 | AAEAAAADAAAAHgAAAEMAAABNGhoatAgICEoAAAAADQ0NYxQUFIQAAAAFAgICLAAAAAUEBAQkAAAAAgAA
297 | AAEAAAABAQEADAEBAFoHBwzDAQEBhBsbG8UEBARGAAAACRcXF50RERFTAAAADAkJCXsAAAAEERERZwIC
298 | AhsAAAAAAAAAAAICAh0jI1LfKipJ/xAQDdIgIB/UAQEBdAAAAFIeHh62AwMDEw0NDUARERF3AAAAABER
299 | EVoXFxeLAAAABgAAAAEAAAAASUlf2EFBPv8SEhH/JiYm+AoKCp0QEBCiHR0dsQAAABYeHh6nCgoKLQAA
300 | AAoFBQURIiIiwwcHBz4AAAAHBAQEBTIyL7xERET/Kioq/xcXF/8kJCT+NTU1/xYWFocQEBBlGhoaaQEB
301 | AQcFBQVMAAAAABEREUQmJia6HBwchxsbG7ErKyvaUlJS/zY2Mf8JCQb/EBAQ/yUlJv8nJyfKLS0t0woK
302 | ChcbGxt2BwcHLAAAAAAAAAAAJiYmASgoKH4TExN7HBwcoSwsKOYoKET/Li45/xISDf8eHh7zIyMjwRYW
303 | FoAbGxt3Hh4efgICAgIAAAAAAAAAAAQEBAEqKiqtJycnnREREEo1NTTdTk6D/1JSpv8oKEr/Hh4YyQwM
304 | DB8eHh6cKSkpvwQEBAQAAAAAAAAAAAAAAAAAAAAAFRUVCigoKAYiIiK2OTk6PklJY/o4OHr/OjpL7hwc
305 | GU0AAAAAAAAAAA8PDwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIyMOJycnkiYmJU9WVlIYAAAAAAAA
306 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEhIQYlJSUBRERFCgAA
307 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
308 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwPAAD9AwAA8QMAAOACAADgIAAAAAAAADAB
309 | AAAIAAAAAAAAAIAAAADAAAAAwAEAAOAbAADw/wAA+P8AAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAQ
310 | AAASCwAAEgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
311 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
312 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
313 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
314 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
315 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
316 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
317 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAAAgAA
318 | AAIAAAACAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
319 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABQAA
320 | AAkAAAAJAAAABQAAAAQAAAADAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
321 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABAAA
322 | AAYAAAAKCgoKpwAAADEAAAAcAAAADQAAAAcAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAA
323 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAwAA
324 | AAUAAAAGAAAACQAAAAsYGBjpAAAAKwAAAC8AAAAeAAAAEQAAAAsAAAAIAAAABwAAAAQAAAADAAAAAgAA
325 | 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
367 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
368 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
369 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
370 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
371 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
372 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
373 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
374 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
375 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
376 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
377 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
378 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////////8AP//+AA///AAD//A
379 | AAf/AAAD/AAAAYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAAB4AAAAfgA
380 | AAH8AAAP/wAB//+AD///4f//////////////////////////////////iVBORw0KGgoAAAANSUhEUgAA
381 | AQAAAAEACAYAAABccqhmAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AACAAElE
382 | QVR42uz9d9xs51Ufin+fsuu0t5yuc3QkHVmyZFuSu3EPbpRQDZibOECC4QachHKBAIGEJB8gxCHJL9xA
383 | gHu5ARJIckOS6wCmOGDARTa2Zcmy1a1ydOpbp+36lN8fs9d+n9lnz3veI3eY9fnMZ2b27Nnl2c9az1rf
384 | 1YAlLWlJS1rSkpa0pCUtaUlLWtKSlrSkJS1pSUta0pKWtKQlLWlJS1rSkpa0pCUtaUlLWtKSlrSkJS1p
385 | SUta0pKWtKQlLWlJS1rSkpa0pCUtaUlLWtKSlrSkJS1pSUta0pKWtKQlLWlJS1rSkpa0pCUtaUlLWtKS
386 | lrSkJS1pSUta0pKWtKQlLWlJS1rSkpa0pCUtaUlLWtKSlrSkJS1pSUta0pKWtKQlLWlJS1rSkpa0pCUt
387 | aUlLWtKSlrSkJS1pSUta0pKWtKQlLWlJS1rSkpa0pCUtaUlLWtKSlrSkJS1pSUta0pKWtKQlLWlJS1rS
388 | kpa0pCUtaUlLWtKSlrSkJS1pSUv6zNNdd90l7rrrLu/zfR1L+otL7PN9AUtqpzvvvDPM8/zLy7I8zRjL
389 | gyD4IyHEZcbY+N5771Wf7+tb0l8MWgqAL0C68847oyzL/rfpdPpdSqlbrLVCSvmElPIez/M+GEXRuzjn
390 | F+69997k832tS/ripqUA+AKiO+64Y0UpdYe19suUUl+ntX42YwzGGJRlCQBQSiWMsU/2+/1/89BDD/36
391 | 5/ual/TFTUsB8AVAz3ve865LkuTr8zz/G0KIWzzPG/i+DwDQWsMYA855/TlNU0gpf3ttbe2b77333unn
392 | +/qX9MVL8vN9AX/Z6dZbb33z+fPnf4xzflccx4iiCEEQQEqJoijAGIPneRBCIMsyFEWBMAyhtX5hWZbP
393 | B/Dez/c9LOmLl8Tn+wL+MtNtt9328uFw+PN5nt++srKCwWCAKIogpYS1FlEUodvtQsqZnLbWAgCEEADQ
394 | 0Vqn119//R9eunTJfL7vZUlfnLTUAD5PdPvtt79qPB7/ohDizPr6OgaDAcIwBGMMWmtYa+vPxphaCDDG
395 | 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
1068 |
1069 |
1070 |
1071 | False
1072 |
1073 |
--------------------------------------------------------------------------------
/NodeTapGui/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # node-tap-gui
2 | Srar的node-tap的Gui版本
3 |
4 | # 使用
5 | 首先您需要下载Srar的node-tap,按照要求完成环境的搭建并且运行测试成功
6 | 如果您还没有Srar的node-tap,请跳转到这里:https://github.com/Srar/node-tap
7 |
8 | 然后将node-tap-gui程序集合(包括里面的*.dll和*.Config)放到您node-tap文件夹下
9 | 最后您就可以使用本软件了
10 |
11 | 支持导入路由表配置文件,导入的路由表保存到根目录下的RoutesTable.txt文件中
12 | 用户可以通过edit table按钮修改路由表信息
13 |
14 | # 注意
15 | 填写程序的相关信息将会保存在*.Config文件中,下次启动时将无需再重新填写
16 |
17 | # 二进制文件下载
18 | 请到Releases频道获取最新版本( https://github.com/JerryAJ/node-tap-gui/releases )
19 |
20 | # 如何构建
21 | 本程序为WPF应用程序,在Visual Studio 2017下构建完成,需要.NET 4.5以上支持
22 |
23 | # 感谢
24 | Srar的node-tap( https://github.com/Srar/node-tap )
25 | Grabacr07的UI框架( https://github.com/Grabacr07/MetroRadiance )
26 |
--------------------------------------------------------------------------------
/Screenshots/Screenshot01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EjiHuang/node-tap-gui/4e2938f8df559baa38ce0215a608aecbf48f9235/Screenshots/Screenshot01.png
--------------------------------------------------------------------------------