From 0e70196e2ca593932fdae504578c930a0a57a60d Mon Sep 17 00:00:00 2001 From: Ambratolm Date: Tue, 8 Jun 2021 05:14:34 +0000 Subject: [PATCH] Initial Commit --- .gitignore | 362 ++++++++++++++++++ LICENSE | 21 + Ping Tester Aluminium.sln | 20 + .../API/Extensions/ByteExtension.cs | 29 ++ .../API/Extensions/ControlExtension.cs | 55 +++ .../API/Extensions/FormExtension.cs | 35 ++ .../API/Extensions/ProgressBarExtension.cs | 27 ++ .../API/Extensions/StringExtension.cs | 28 ++ Ping Tester Aluminium/API/PingResult.cs | 24 ++ Ping Tester Aluminium/API/PingTest.cs | 56 +++ .../GUI/AluminiumForm.Designer.cs | 182 +++++++++ Ping Tester Aluminium/GUI/AluminiumForm.cs | 21 + Ping Tester Aluminium/GUI/AluminiumForm.resx | 138 +++++++ .../GUI/Form_About.Designer.cs | 132 +++++++ Ping Tester Aluminium/GUI/Form_About.cs | 29 ++ Ping Tester Aluminium/GUI/Form_About.resx | 123 ++++++ .../GUI/Form_Main.Designer.cs | 254 ++++++++++++ Ping Tester Aluminium/GUI/Form_Main.cs | 143 +++++++ Ping Tester Aluminium/GUI/Form_Main.resx | 225 +++++++++++ .../GUI/Form_Settings.Designer.cs | 161 ++++++++ Ping Tester Aluminium/GUI/Form_Settings.cs | 56 +++ Ping Tester Aluminium/GUI/Form_Settings.resx | 123 ++++++ Ping Tester Aluminium/GUI/Form_Template.resx | 147 +++++++ .../Ping Tester Aluminium.csproj | 182 +++++++++ Ping Tester Aluminium/Program.cs | 19 + .../Properties/AssemblyInfo.cs | 35 ++ .../Properties/Resources.Designer.cs | 173 +++++++++ .../Properties/Resources.resx | 154 ++++++++ .../Properties/Settings.Designer.cs | 50 +++ .../Properties/Settings.settings | 12 + Ping Tester Aluminium/Resources/about.png | Bin 0 -> 384 bytes .../Resources/background.jpg | Bin 0 -> 5174 bytes Ping Tester Aluminium/Resources/cancel.png | Bin 0 -> 375 bytes Ping Tester Aluminium/Resources/close.png | Bin 0 -> 260 bytes Ping Tester Aluminium/Resources/minimize.png | Bin 0 -> 229 bytes Ping Tester Aluminium/Resources/pause.png | Bin 0 -> 179 bytes Ping Tester Aluminium/Resources/play.png | Bin 0 -> 199 bytes Ping Tester Aluminium/Resources/rectangle.png | Bin 0 -> 124 bytes Ping Tester Aluminium/Resources/save.png | Bin 0 -> 294 bytes Ping Tester Aluminium/Resources/settings.png | Bin 0 -> 411 bytes Ping Tester Aluminium/Resources/visitor.ttf | Bin 0 -> 27552 bytes Ping Tester Aluminium/app.config | 18 + .../bin/Release/PingTester.vshost.exe.config | 18 + .../Release/PingTester.vshost.exe.manifest | 11 + .../Release/PingTesterAluminium.exe.config | 18 + .../Release/PingTesterAluminium.vshost.exe | Bin 0 -> 11600 bytes .../PingTesterAluminium.vshost.exe.config | 18 + .../PingTesterAluminium.vshost.exe.manifest | 11 + Ping Tester Aluminium/icon.ico | Bin 0 -> 76788 bytes README.md | 25 ++ icon.jpg | Bin 0 -> 2617 bytes logo.jpg | Bin 0 -> 27264 bytes 52 files changed, 3135 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 Ping Tester Aluminium.sln create mode 100644 Ping Tester Aluminium/API/Extensions/ByteExtension.cs create mode 100644 Ping Tester Aluminium/API/Extensions/ControlExtension.cs create mode 100644 Ping Tester Aluminium/API/Extensions/FormExtension.cs create mode 100644 Ping Tester Aluminium/API/Extensions/ProgressBarExtension.cs create mode 100644 Ping Tester Aluminium/API/Extensions/StringExtension.cs create mode 100644 Ping Tester Aluminium/API/PingResult.cs create mode 100644 Ping Tester Aluminium/API/PingTest.cs create mode 100644 Ping Tester Aluminium/GUI/AluminiumForm.Designer.cs create mode 100644 Ping Tester Aluminium/GUI/AluminiumForm.cs create mode 100644 Ping Tester Aluminium/GUI/AluminiumForm.resx create mode 100644 Ping Tester Aluminium/GUI/Form_About.Designer.cs create mode 100644 Ping Tester Aluminium/GUI/Form_About.cs create mode 100644 Ping Tester Aluminium/GUI/Form_About.resx create mode 100644 Ping Tester Aluminium/GUI/Form_Main.Designer.cs create mode 100644 Ping Tester Aluminium/GUI/Form_Main.cs create mode 100644 Ping Tester Aluminium/GUI/Form_Main.resx create mode 100644 Ping Tester Aluminium/GUI/Form_Settings.Designer.cs create mode 100644 Ping Tester Aluminium/GUI/Form_Settings.cs create mode 100644 Ping Tester Aluminium/GUI/Form_Settings.resx create mode 100644 Ping Tester Aluminium/GUI/Form_Template.resx create mode 100644 Ping Tester Aluminium/Ping Tester Aluminium.csproj create mode 100644 Ping Tester Aluminium/Program.cs create mode 100644 Ping Tester Aluminium/Properties/AssemblyInfo.cs create mode 100644 Ping Tester Aluminium/Properties/Resources.Designer.cs create mode 100644 Ping Tester Aluminium/Properties/Resources.resx create mode 100644 Ping Tester Aluminium/Properties/Settings.Designer.cs create mode 100644 Ping Tester Aluminium/Properties/Settings.settings create mode 100644 Ping Tester Aluminium/Resources/about.png create mode 100644 Ping Tester Aluminium/Resources/background.jpg create mode 100644 Ping Tester Aluminium/Resources/cancel.png create mode 100644 Ping Tester Aluminium/Resources/close.png create mode 100644 Ping Tester Aluminium/Resources/minimize.png create mode 100644 Ping Tester Aluminium/Resources/pause.png create mode 100644 Ping Tester Aluminium/Resources/play.png create mode 100644 Ping Tester Aluminium/Resources/rectangle.png create mode 100644 Ping Tester Aluminium/Resources/save.png create mode 100644 Ping Tester Aluminium/Resources/settings.png create mode 100644 Ping Tester Aluminium/Resources/visitor.ttf create mode 100644 Ping Tester Aluminium/app.config create mode 100644 Ping Tester Aluminium/bin/Release/PingTester.vshost.exe.config create mode 100644 Ping Tester Aluminium/bin/Release/PingTester.vshost.exe.manifest create mode 100644 Ping Tester Aluminium/bin/Release/PingTesterAluminium.exe.config create mode 100644 Ping Tester Aluminium/bin/Release/PingTesterAluminium.vshost.exe create mode 100644 Ping Tester Aluminium/bin/Release/PingTesterAluminium.vshost.exe.config create mode 100644 Ping Tester Aluminium/bin/Release/PingTesterAluminium.vshost.exe.manifest create mode 100644 Ping Tester Aluminium/icon.ico create mode 100644 README.md create mode 100644 icon.jpg create mode 100644 logo.jpg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..006595d --- /dev/null +++ b/.gitignore @@ -0,0 +1,362 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +_[Tt]est/ +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +# [Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +# [Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +# *.nupkg +# NuGet Symbol Packages +# *.snupkg +# The packages folder can be ignored because of Package Restore +#**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +#!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +# *.nuget.props +# *.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0c33b28 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 ambratolm + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Ping Tester Aluminium.sln b/Ping Tester Aluminium.sln new file mode 100644 index 0000000..554d178 --- /dev/null +++ b/Ping Tester Aluminium.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ping Tester Aluminium", "Ping Tester Aluminium\Ping Tester Aluminium.csproj", "{C15B5D96-0397-4CA0-915D-118F8DE69E73}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C15B5D96-0397-4CA0-915D-118F8DE69E73}.Debug|x86.ActiveCfg = Debug|x86 + {C15B5D96-0397-4CA0-915D-118F8DE69E73}.Debug|x86.Build.0 = Debug|x86 + {C15B5D96-0397-4CA0-915D-118F8DE69E73}.Release|x86.ActiveCfg = Release|x86 + {C15B5D96-0397-4CA0-915D-118F8DE69E73}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Ping Tester Aluminium/API/Extensions/ByteExtension.cs b/Ping Tester Aluminium/API/Extensions/ByteExtension.cs new file mode 100644 index 0000000..3fdfa13 --- /dev/null +++ b/Ping Tester Aluminium/API/Extensions/ByteExtension.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.InteropServices; +using System.Drawing; +using System.Drawing.Text; + +namespace PingTesterAluminium +{ + public static class ByteExtension + { + [DllImport("gdi32.dll")] + private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [In] ref uint pcFonts); + + public static FontFamily ToFontFamily(this byte[] resource) + { + int length = resource.Length; + IntPtr data = Marshal.AllocCoTaskMem(length); + Marshal.Copy(resource, 0, data, length); + PrivateFontCollection privateFonts = new PrivateFontCollection(); + privateFonts.AddMemoryFont(data, length); + uint cFonts = 0; + AddFontMemResourceEx(data, (uint)length, IntPtr.Zero, ref cFonts); + Marshal.FreeCoTaskMem(data); + return privateFonts.Families[privateFonts.Families.Length - 1]; + } + } +} \ No newline at end of file diff --git a/Ping Tester Aluminium/API/Extensions/ControlExtension.cs b/Ping Tester Aluminium/API/Extensions/ControlExtension.cs new file mode 100644 index 0000000..e46c4c9 --- /dev/null +++ b/Ping Tester Aluminium/API/Extensions/ControlExtension.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Drawing; + +namespace PingTesterAluminium +{ + public static class ControlExtension + { + public const int WM_NCLBUTTONDOWN = 0xA1; + public const int HT_CAPTION = 0x2; + + [DllImport("user32.dll")] + public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); + [DllImport("user32.dll")] + public static extern bool ReleaseCapture(); + [DllImport("user32.dll")] + private static extern IntPtr GetForegroundWindow(); + + public static void EnableMovingByMouseDrag(this Control control) + { + control.MouseDown += (s, e) => + { + if (e.Button == MouseButtons.Left) + { + control.Cursor = Cursors.SizeAll; + ReleaseCapture(); + SendMessage(GetForegroundWindow(), WM_NCLBUTTONDOWN, HT_CAPTION, 0); + control.Cursor = Cursors.Default; + } + }; + } + + public static void SetFont(this Control control, FontFamily fontFamily) + { + control.Font = new Font(fontFamily, control.Font.Size); + } + + public static void SetFont(this Control control, Font font) + { + control.Font = new Font(font.FontFamily, control.Font.Size); + } + + public static void CenterHorizontally(this Control control) + { + if (control.Parent != null) + { + control.Location = new Point((int)(0.5 * control.Parent.Width - 0.5 * control.Width), control.Location.Y); + } + } + } +} diff --git a/Ping Tester Aluminium/API/Extensions/FormExtension.cs b/Ping Tester Aluminium/API/Extensions/FormExtension.cs new file mode 100644 index 0000000..60a9df5 --- /dev/null +++ b/Ping Tester Aluminium/API/Extensions/FormExtension.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Drawing; + +namespace PingTesterAluminium +{ + public static class FormExtension + { + public static void EnableButtonsHoverEffects(this Form form) + { + foreach (Control control in form.Controls) + { + if (control is Button) + { + Button button = (Button)control; + Image backgroundImage = button.BackgroundImage; + + button.MouseEnter += (s, args) => + { + button.BackgroundImage = null; + }; + + button.MouseLeave += (s, args) => + { + button.BackgroundImage = backgroundImage; + }; + } + } + } + } +} diff --git a/Ping Tester Aluminium/API/Extensions/ProgressBarExtension.cs b/Ping Tester Aluminium/API/Extensions/ProgressBarExtension.cs new file mode 100644 index 0000000..b4d1beb --- /dev/null +++ b/Ping Tester Aluminium/API/Extensions/ProgressBarExtension.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Runtime.InteropServices; + +namespace PingTesterAluminium +{ + public static class ProgressBarExtension + { + public enum State + { + Normal = 1, + Error = 2, + Warning = 3 + } + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] + static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr w, IntPtr l); + + public static void SetState(this ProgressBar progressBar, State state) + { + SendMessage(progressBar.Handle, 1040, (IntPtr)state, IntPtr.Zero); + } + } +} diff --git a/Ping Tester Aluminium/API/Extensions/StringExtension.cs b/Ping Tester Aluminium/API/Extensions/StringExtension.cs new file mode 100644 index 0000000..03d6fde --- /dev/null +++ b/Ping Tester Aluminium/API/Extensions/StringExtension.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace PingTesterAluminium +{ + public static class StringExtension + { + public static bool IsEmpty(this string str) + { + return str == string.Empty; + } + public static bool IsValidHost(this string str) + { + //try + //{ + // IPHostEntry ipHost = Dns.GetHostEntry(host); + // return true; + //} + //catch (SocketException) + //{ + // return false; + //} + return Uri.CheckHostName(str) != UriHostNameType.Unknown; + } + } +} diff --git a/Ping Tester Aluminium/API/PingResult.cs b/Ping Tester Aluminium/API/PingResult.cs new file mode 100644 index 0000000..affd20d --- /dev/null +++ b/Ping Tester Aluminium/API/PingResult.cs @@ -0,0 +1,24 @@ +using System; +using System.Drawing; +using System.Net.NetworkInformation; + +namespace PingTesterAluminium +{ + public class PingResult + { + public long Time { get; set; } + public string Rating { get; set; } + public Color Color { get; set; } + public string Message { get; set; } + public string Host { get; set; } + + public PingResult(int time, string rating, Color color, string message, string host) + { + this.Time = time; + this.Rating = rating; + this.Color = color; + this.Message = message; + this.Host = host; + } + } +} diff --git a/Ping Tester Aluminium/API/PingTest.cs b/Ping Tester Aluminium/API/PingTest.cs new file mode 100644 index 0000000..53d3220 --- /dev/null +++ b/Ping Tester Aluminium/API/PingTest.cs @@ -0,0 +1,56 @@ +using System; +using System.Drawing; +using System.Net.NetworkInformation; + +namespace PingTesterAluminium +{ + public static class PingTest + { + public static PingResult Ping(string host) + { + if (host.IsEmpty() || !host.IsValidHost()) + { + host = "google.com"; + } + PingReply pingReply = null; + try + { + pingReply = new Ping().Send(host); + } + catch (Exception exception) + { + return new PingResult(-1, "Error", Color.DarkRed, exception.Message, host); + + } + if (pingReply.Status != IPStatus.Success) + { + return new PingResult((int)pingReply.RoundtripTime, "No Response", + Color.Gray, pingReply.Status.ToString(), host); + } + else + { + return new PingResult((int)pingReply.RoundtripTime, GetRating(pingReply.RoundtripTime), + GetColor(pingReply.RoundtripTime), pingReply.Status.ToString(), host); + } + } + + public static string GetRating(long time) + { + if (time <= 30) return "Amazing"; + if (time <= 60) return "Excellent"; + if (time <= 100) return "Good"; + if (time <= 150) return "Not Bad"; + if (time <= 200) return "Bad"; + if (time <= 250) return "Mediocre"; + if (time <= 300) return "Poor"; + return "Terrible"; + } + + private static Color GetColor(long time) + { + if (time <= 100) return Color.Green; + if (time <= 150) return Color.Yellow; + return Color.Red; + } + } +} diff --git a/Ping Tester Aluminium/GUI/AluminiumForm.Designer.cs b/Ping Tester Aluminium/GUI/AluminiumForm.Designer.cs new file mode 100644 index 0000000..6f7a4a8 --- /dev/null +++ b/Ping Tester Aluminium/GUI/AluminiumForm.Designer.cs @@ -0,0 +1,182 @@ +namespace PingTesterAluminium +{ + partial class Form_Template + { + /// + /// Variable nécessaire au concepteur. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Nettoyage des ressources utilisées. + /// + /// true si les ressources managées doivent être supprimées ; sinon, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Code généré par le Concepteur Windows Form + + /// + /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas + /// le contenu de cette méthode avec l'éditeur de code. + /// + private void InitializeComponent() + { + this.panel_title = new System.Windows.Forms.Panel(); + this.pictureBox_icon = new System.Windows.Forms.PictureBox(); + this.button_minimize = new System.Windows.Forms.Button(); + this.button_close = new System.Windows.Forms.Button(); + this.label_title = new System.Windows.Forms.Label(); + this.panel_main = new System.Windows.Forms.Panel(); + this.button_ok = new System.Windows.Forms.Button(); + this.panel_title.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_icon)).BeginInit(); + this.panel_main.SuspendLayout(); + this.SuspendLayout(); + // + // panel_title + // + this.panel_title.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.panel_title.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.panel_title.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel_title.Controls.Add(this.pictureBox_icon); + this.panel_title.Controls.Add(this.button_minimize); + this.panel_title.Controls.Add(this.button_close); + this.panel_title.Controls.Add(this.label_title); + this.panel_title.Dock = System.Windows.Forms.DockStyle.Top; + this.panel_title.Location = new System.Drawing.Point(0, 0); + this.panel_title.Name = "panel_title"; + this.panel_title.Size = new System.Drawing.Size(394, 48); + this.panel_title.TabIndex = 12; + // + // pictureBox_icon + // + this.pictureBox_icon.BackColor = System.Drawing.Color.Transparent; + this.pictureBox_icon.Image = global::PingTesterAluminium.Properties.Resources.rectangle; + this.pictureBox_icon.Location = new System.Drawing.Point(11, 7); + this.pictureBox_icon.Name = "pictureBox_icon"; + this.pictureBox_icon.Size = new System.Drawing.Size(40, 33); + this.pictureBox_icon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pictureBox_icon.TabIndex = 14; + this.pictureBox_icon.TabStop = false; + // + // button_minimize + // + this.button_minimize.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.button_minimize.BackColor = System.Drawing.Color.Transparent; + this.button_minimize.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button_minimize.Cursor = System.Windows.Forms.Cursors.Hand; + this.button_minimize.FlatAppearance.BorderSize = 0; + this.button_minimize.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button_minimize.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.button_minimize.Image = global::PingTesterAluminium.Properties.Resources.minimize; + this.button_minimize.Location = new System.Drawing.Point(293, 7); + this.button_minimize.Margin = new System.Windows.Forms.Padding(4); + this.button_minimize.Name = "button_minimize"; + this.button_minimize.Size = new System.Drawing.Size(40, 33); + this.button_minimize.TabIndex = 13; + this.button_minimize.UseVisualStyleBackColor = false; + // + // button_close + // + this.button_close.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.button_close.BackColor = System.Drawing.Color.Transparent; + this.button_close.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button_close.Cursor = System.Windows.Forms.Cursors.Hand; + this.button_close.FlatAppearance.BorderSize = 0; + this.button_close.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button_close.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.button_close.Image = global::PingTesterAluminium.Properties.Resources.close; + this.button_close.Location = new System.Drawing.Point(341, 7); + this.button_close.Margin = new System.Windows.Forms.Padding(4); + this.button_close.Name = "button_close"; + this.button_close.Size = new System.Drawing.Size(40, 33); + this.button_close.TabIndex = 1; + this.button_close.UseVisualStyleBackColor = false; + // + // label_title + // + this.label_title.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.label_title.AutoEllipsis = true; + this.label_title.BackColor = System.Drawing.Color.Transparent; + this.label_title.Font = new System.Drawing.Font("Visitor TT1 BRK", 20F); + this.label_title.Location = new System.Drawing.Point(57, 5); + this.label_title.Name = "label_title"; + this.label_title.Size = new System.Drawing.Size(228, 36); + this.label_title.TabIndex = 12; + this.label_title.Text = "Window"; + this.label_title.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // panel_main + // + this.panel_main.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.panel_main.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.panel_main.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel_main.Controls.Add(this.button_ok); + this.panel_main.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel_main.Location = new System.Drawing.Point(0, 0); + this.panel_main.Name = "panel_main"; + this.panel_main.Size = new System.Drawing.Size(394, 272); + this.panel_main.TabIndex = 11; + // + // button_ok + // + this.button_ok.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.button_ok.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.button_ok.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button_ok.Cursor = System.Windows.Forms.Cursors.Hand; + this.button_ok.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button_ok.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.button_ok.Location = new System.Drawing.Point(237, 225); + this.button_ok.Margin = new System.Windows.Forms.Padding(4); + this.button_ok.Name = "button_ok"; + this.button_ok.Size = new System.Drawing.Size(143, 33); + this.button_ok.TabIndex = 0; + this.button_ok.Text = "Ok"; + this.button_ok.UseVisualStyleBackColor = false; + // + // Form_Template + // + this.AutoScaleDimensions = new System.Drawing.SizeF(24F, 36F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ClientSize = new System.Drawing.Size(394, 272); + this.Controls.Add(this.panel_title); + this.Controls.Add(this.panel_main); + this.Font = new System.Drawing.Font("Visitor TT1 BRK", 30F); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Margin = new System.Windows.Forms.Padding(10, 8, 10, 8); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Form_Template"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "About"; + this.panel_title.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_icon)).EndInit(); + this.panel_main.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button_ok; + private System.Windows.Forms.Panel panel_main; + private System.Windows.Forms.Panel panel_title; + private System.Windows.Forms.Label label_title; + private System.Windows.Forms.Button button_close; + private System.Windows.Forms.Button button_minimize; + private System.Windows.Forms.PictureBox pictureBox_icon; + + } +} + diff --git a/Ping Tester Aluminium/GUI/AluminiumForm.cs b/Ping Tester Aluminium/GUI/AluminiumForm.cs new file mode 100644 index 0000000..9243af0 --- /dev/null +++ b/Ping Tester Aluminium/GUI/AluminiumForm.cs @@ -0,0 +1,21 @@ +using System; +using System.Windows.Forms; +using PingTesterAluminium.Properties; + +namespace PingTesterAluminium +{ + public partial class Form_Template : Form + { + public Form_Template() + { + InitializeComponent(); + this.FormBorderStyle = FormBorderStyle.None; + this.panel_title.EnableMovingByMouseDrag(); + this.label_title.Text = this.Text; + this.button_close.Click += (s, e) => this.Close(); + this.button_minimize.Click += (s, e) => this.WindowState = FormWindowState.Maximized; + this.SetFont(Resources.visitor.ToFontFamily()); + this.EnableButtonsHoverEffects(); + } + } +} diff --git a/Ping Tester Aluminium/GUI/AluminiumForm.resx b/Ping Tester Aluminium/GUI/AluminiumForm.resx new file mode 100644 index 0000000..5cc0b9c --- /dev/null +++ b/Ping Tester Aluminium/GUI/AluminiumForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/Ping Tester Aluminium/GUI/Form_About.Designer.cs b/Ping Tester Aluminium/GUI/Form_About.Designer.cs new file mode 100644 index 0000000..89438f9 --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_About.Designer.cs @@ -0,0 +1,132 @@ +namespace PingTesterAluminium +{ + partial class FormAbout + { + /// + /// Variable nécessaire au concepteur. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Nettoyage des ressources utilisées. + /// + /// true si les ressources managées doivent être supprimées ; sinon, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Code généré par le Concepteur Windows Form + + /// + /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas + /// le contenu de cette méthode avec l'éditeur de code. + /// + private void InitializeComponent() + { + this.button_ok = new System.Windows.Forms.Button(); + this.labelCopyright1 = new System.Windows.Forms.Label(); + this.labelCopyright2 = new System.Windows.Forms.Label(); + this.labelCopyright3 = new System.Windows.Forms.Label(); + this.labelCopyright4 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // button_ok + // + this.button_ok.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.button_ok.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.button_ok.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button_ok.Cursor = System.Windows.Forms.Cursors.Hand; + this.button_ok.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button_ok.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.button_ok.Location = new System.Drawing.Point(198, 293); + this.button_ok.Margin = new System.Windows.Forms.Padding(4); + this.button_ok.Name = "button_ok"; + this.button_ok.Size = new System.Drawing.Size(143, 33); + this.button_ok.TabIndex = 0; + this.button_ok.Text = "Ok"; + this.button_ok.UseVisualStyleBackColor = false; + this.button_ok.Click += new System.EventHandler(this.buttonOk_Click); + // + // labelCopyright1 + // + this.labelCopyright1.AutoSize = true; + this.labelCopyright1.BackColor = System.Drawing.Color.Transparent; + this.labelCopyright1.Location = new System.Drawing.Point(96, 91); + this.labelCopyright1.Name = "labelCopyright1"; + this.labelCopyright1.Size = new System.Drawing.Size(347, 36); + this.labelCopyright1.TabIndex = 1; + this.labelCopyright1.Text = "AmbraPing 1.0.0.0"; + // + // labelCopyright2 + // + this.labelCopyright2.AutoSize = true; + this.labelCopyright2.BackColor = System.Drawing.Color.Transparent; + this.labelCopyright2.Location = new System.Drawing.Point(130, 149); + this.labelCopyright2.Name = "labelCopyright2"; + this.labelCopyright2.Size = new System.Drawing.Size(279, 36); + this.labelCopyright2.TabIndex = 2; + this.labelCopyright2.Text = "© Ambratolm"; + // + // labelCopyright3 + // + this.labelCopyright3.AutoSize = true; + this.labelCopyright3.BackColor = System.Drawing.Color.Transparent; + this.labelCopyright3.Location = new System.Drawing.Point(42, 185); + this.labelCopyright3.Name = "labelCopyright3"; + this.labelCopyright3.Size = new System.Drawing.Size(455, 36); + this.labelCopyright3.TabIndex = 3; + this.labelCopyright3.Text = "© Elhafid Softwares"; + // + // labelCopyright4 + // + this.labelCopyright4.AutoSize = true; + this.labelCopyright4.BackColor = System.Drawing.Color.Transparent; + this.labelCopyright4.Location = new System.Drawing.Point(220, 221); + this.labelCopyright4.Name = "labelCopyright4"; + this.labelCopyright4.Size = new System.Drawing.Size(99, 36); + this.labelCopyright4.TabIndex = 4; + this.labelCopyright4.Text = "2019"; + // + // FormAbout + // + this.AutoScaleDimensions = new System.Drawing.SizeF(24F, 36F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ClientSize = new System.Drawing.Size(538, 340); + this.Controls.Add(this.labelCopyright4); + this.Controls.Add(this.labelCopyright3); + this.Controls.Add(this.labelCopyright2); + this.Controls.Add(this.labelCopyright1); + this.Controls.Add(this.button_ok); + this.Font = new System.Drawing.Font("Visitor TT1 BRK", 30F); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Margin = new System.Windows.Forms.Padding(10, 8, 10, 8); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FormAbout"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "About"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button_ok; + private System.Windows.Forms.Label labelCopyright1; + private System.Windows.Forms.Label labelCopyright2; + private System.Windows.Forms.Label labelCopyright3; + private System.Windows.Forms.Label labelCopyright4; + + } +} + diff --git a/Ping Tester Aluminium/GUI/Form_About.cs b/Ping Tester Aluminium/GUI/Form_About.cs new file mode 100644 index 0000000..3be92f1 --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_About.cs @@ -0,0 +1,29 @@ +using System; +using System.Windows.Forms; +using PingTesterAluminium.Properties; + +namespace PingTesterAluminium +{ + public partial class FormAbout : Form + { + public FormAbout() + { + InitializeComponent(); + + // Set Custom Font for Form + this.SetFont(Resources.visitor.ToFontFamily()); + + // Enable Hover Animation on Buttons + this.EnableButtonsHoverEffects(); + + // Set Copyright Infromations + labelCopyright1.Text = Application.ProductName + " " + Application.ProductVersion; + labelCopyright1.CenterHorizontally(); + } + + private void buttonOk_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/Ping Tester Aluminium/GUI/Form_About.resx b/Ping Tester Aluminium/GUI/Form_About.resx new file mode 100644 index 0000000..fa6b66e --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_About.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 52 + + \ No newline at end of file diff --git a/Ping Tester Aluminium/GUI/Form_Main.Designer.cs b/Ping Tester Aluminium/GUI/Form_Main.Designer.cs new file mode 100644 index 0000000..46f5b47 --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_Main.Designer.cs @@ -0,0 +1,254 @@ +namespace PingTesterAluminium +{ + partial class FormMain + { + /// + /// Variable nécessaire au concepteur. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Nettoyage des ressources utilisées. + /// + /// true si les ressources managées doivent être supprimées ; sinon, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Code généré par le Concepteur Windows Form + + /// + /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas + /// le contenu de cette méthode avec l'éditeur de code. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain)); + this.label_time = new System.Windows.Forms.Label(); + this.timerPing = new System.Windows.Forms.Timer(this.components); + this.label_rating = new System.Windows.Forms.Label(); + this.progressBarTime = new System.Windows.Forms.ProgressBar(); + this.button_settings = new System.Windows.Forms.Button(); + this.label_host = new System.Windows.Forms.Label(); + this.button_about = new System.Windows.Forms.Button(); + this.button_pause = new System.Windows.Forms.Button(); + this.backgroundWorkerPing = new System.ComponentModel.BackgroundWorker(); + this.button_close = new System.Windows.Forms.Button(); + this.label_applicationTitle = new System.Windows.Forms.Label(); + this.button_minimize = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label_time + // + this.label_time.AutoSize = true; + this.label_time.BackColor = System.Drawing.Color.Transparent; + this.label_time.ForeColor = System.Drawing.Color.Gray; + this.label_time.Location = new System.Drawing.Point(125, 92); + this.label_time.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label_time.Name = "label_time"; + this.label_time.Size = new System.Drawing.Size(167, 36); + this.label_time.TabIndex = 3; + this.label_time.Text = "Timeout"; + // + // timerPing + // + this.timerPing.Interval = 1000; + this.timerPing.Tick += new System.EventHandler(this.timerPing_Tick); + // + // label_rating + // + this.label_rating.AutoSize = true; + this.label_rating.BackColor = System.Drawing.Color.Transparent; + this.label_rating.ForeColor = System.Drawing.Color.Gray; + this.label_rating.Location = new System.Drawing.Point(65, 180); + this.label_rating.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label_rating.Name = "label_rating"; + this.label_rating.Size = new System.Drawing.Size(287, 36); + this.label_rating.TabIndex = 5; + this.label_rating.Text = "Disconnected"; + // + // progressBarTime + // + this.progressBarTime.ForeColor = System.Drawing.SystemColors.ControlText; + this.progressBarTime.Location = new System.Drawing.Point(135, 136); + this.progressBarTime.Margin = new System.Windows.Forms.Padding(4); + this.progressBarTime.MarqueeAnimationSpeed = 0; + this.progressBarTime.Maximum = 300; + this.progressBarTime.Name = "progressBarTime"; + this.progressBarTime.Size = new System.Drawing.Size(150, 34); + this.progressBarTime.Step = 0; + this.progressBarTime.TabIndex = 4; + this.progressBarTime.Value = 300; + // + // button_settings + // + this.button_settings.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.button_settings.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.button_settings.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button_settings.Cursor = System.Windows.Forms.Cursors.Hand; + this.button_settings.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button_settings.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.button_settings.Location = new System.Drawing.Point(136, 328); + this.button_settings.Margin = new System.Windows.Forms.Padding(4); + this.button_settings.Name = "button_settings"; + this.button_settings.Size = new System.Drawing.Size(142, 33); + this.button_settings.TabIndex = 0; + this.button_settings.Text = "Settings"; + this.button_settings.UseVisualStyleBackColor = false; + this.button_settings.Click += new System.EventHandler(this.buttonSettings_Click); + // + // label_host + // + this.label_host.AutoSize = true; + this.label_host.BackColor = System.Drawing.Color.Transparent; + this.label_host.ForeColor = System.Drawing.Color.Gray; + this.label_host.Location = new System.Drawing.Point(154, 248); + this.label_host.Name = "label_host"; + this.label_host.Size = new System.Drawing.Size(111, 36); + this.label_host.TabIndex = 6; + this.label_host.Text = "Host"; + // + // button_about + // + this.button_about.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.button_about.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.button_about.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button_about.Cursor = System.Windows.Forms.Cursors.Hand; + this.button_about.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button_about.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.button_about.Image = global::PingTesterAluminium.Properties.Resources.about; + this.button_about.Location = new System.Drawing.Point(362, 328); + this.button_about.Margin = new System.Windows.Forms.Padding(4); + this.button_about.Name = "button_about"; + this.button_about.Size = new System.Drawing.Size(40, 33); + this.button_about.TabIndex = 2; + this.button_about.UseVisualStyleBackColor = false; + this.button_about.Click += new System.EventHandler(this.buttonAbout_Click); + // + // button_pause + // + this.button_pause.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.button_pause.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.button_pause.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button_pause.Cursor = System.Windows.Forms.Cursors.Hand; + this.button_pause.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button_pause.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.button_pause.Image = global::PingTesterAluminium.Properties.Resources.pause; + this.button_pause.Location = new System.Drawing.Point(14, 328); + this.button_pause.Margin = new System.Windows.Forms.Padding(4); + this.button_pause.Name = "button_pause"; + this.button_pause.Size = new System.Drawing.Size(40, 33); + this.button_pause.TabIndex = 1; + this.button_pause.UseVisualStyleBackColor = false; + this.button_pause.Click += new System.EventHandler(this.buttonPause_Click); + // + // backgroundWorkerPing + // + this.backgroundWorkerPing.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorkerPing_DoWork); + this.backgroundWorkerPing.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorkerPing_RunWorkerCompleted); + // + // button_close + // + this.button_close.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.button_close.BackColor = System.Drawing.Color.Transparent; + this.button_close.BackgroundImage = global::PingTesterAluminium.Properties.Resources.close; + this.button_close.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button_close.Cursor = System.Windows.Forms.Cursors.Hand; + this.button_close.FlatAppearance.BorderSize = 0; + this.button_close.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button_close.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.button_close.Location = new System.Drawing.Point(369, 14); + this.button_close.Margin = new System.Windows.Forms.Padding(4); + this.button_close.Name = "button_close"; + this.button_close.Size = new System.Drawing.Size(33, 33); + this.button_close.TabIndex = 2; + this.button_close.UseVisualStyleBackColor = false; + this.button_close.Click += new System.EventHandler(this.button_close_Click); + // + // label_applicationTitle + // + this.label_applicationTitle.BackColor = System.Drawing.Color.Transparent; + this.label_applicationTitle.Font = new System.Drawing.Font("Visitor TT1 BRK", 30F); + this.label_applicationTitle.ForeColor = System.Drawing.Color.Black; + this.label_applicationTitle.Location = new System.Drawing.Point(13, 14); + this.label_applicationTitle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label_applicationTitle.Name = "label_applicationTitle"; + this.label_applicationTitle.Size = new System.Drawing.Size(307, 33); + this.label_applicationTitle.TabIndex = 3; + this.label_applicationTitle.Text = "Ping Tester"; + this.label_applicationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // button_minimize + // + this.button_minimize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.button_minimize.BackColor = System.Drawing.Color.Transparent; + this.button_minimize.BackgroundImage = global::PingTesterAluminium.Properties.Resources.minimize; + this.button_minimize.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button_minimize.Cursor = System.Windows.Forms.Cursors.Hand; + this.button_minimize.FlatAppearance.BorderSize = 0; + this.button_minimize.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button_minimize.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.button_minimize.Location = new System.Drawing.Point(328, 14); + this.button_minimize.Margin = new System.Windows.Forms.Padding(4); + this.button_minimize.Name = "button_minimize"; + this.button_minimize.Size = new System.Drawing.Size(33, 33); + this.button_minimize.TabIndex = 2; + this.button_minimize.UseVisualStyleBackColor = false; + this.button_minimize.Click += new System.EventHandler(this.button_minimize_Click); + // + // FormMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(24F, 36F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ClientSize = new System.Drawing.Size(416, 376); + this.Controls.Add(this.label_host); + this.Controls.Add(this.button_pause); + this.Controls.Add(this.button_minimize); + this.Controls.Add(this.button_close); + this.Controls.Add(this.button_about); + this.Controls.Add(this.button_settings); + this.Controls.Add(this.progressBarTime); + this.Controls.Add(this.label_rating); + this.Controls.Add(this.label_applicationTitle); + this.Controls.Add(this.label_time); + this.Cursor = System.Windows.Forms.Cursors.Default; + this.Font = new System.Drawing.Font("Visitor TT1 BRK", 30F); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(10, 8, 10, 8); + this.MaximizeBox = false; + this.Name = "FormMain"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Ping Tester"; + this.Load += new System.EventHandler(this.FormMain_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label_time; + private System.Windows.Forms.Label label_rating; + private System.Windows.Forms.ProgressBar progressBarTime; + private System.Windows.Forms.Button button_settings; + private System.Windows.Forms.Label label_host; + private System.Windows.Forms.Button button_about; + private System.Windows.Forms.Button button_pause; + private System.ComponentModel.BackgroundWorker backgroundWorkerPing; + public System.Windows.Forms.Timer timerPing; + private System.Windows.Forms.Button button_close; + private System.Windows.Forms.Label label_applicationTitle; + private System.Windows.Forms.Button button_minimize; + + } +} + diff --git a/Ping Tester Aluminium/GUI/Form_Main.cs b/Ping Tester Aluminium/GUI/Form_Main.cs new file mode 100644 index 0000000..c6ae920 --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_Main.cs @@ -0,0 +1,143 @@ +using System; +using System.Windows.Forms; +using PingTesterAluminium.Properties; + +namespace PingTesterAluminium +{ + public partial class FormMain : Form + { + public FormMain() + { + InitializeComponent(); + this.EnableMovingByMouseDrag(); + + // Set Custom Font for Form + this.SetFont(Resources.visitor.ToFontFamily()); + + // Enable Hover Animation on Buttons + this.EnableButtonsHoverEffects(); + + // Set Custom Font for Buttons + button_settings.SetFont(this.Font); + button_about.SetFont(this.Font); + button_pause.SetFont(this.Font); + + // Start Pinging Timer + timerPing.Start(); + } + + private void timerPing_Tick(object sender, EventArgs e) + { + // Set Timer Interval from Settings + if (Settings.Default.Interval < 100) timerPing.Interval = 100; + else timerPing.Interval = Settings.Default.Interval; + + // Save Timer Interval + if (timerPing.Interval != Settings.Default.Interval) + { + Settings.Default.Interval = timerPing.Interval; + Settings.Default.Save(); + } + + // Get Ping Response using Host from Settings + if (!backgroundWorkerPing.IsBusy) backgroundWorkerPing.RunWorkerAsync(); + } + + private void backgroundWorkerPing_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) + { + e.Result = PingTest.Ping(Settings.Default.Host); + } + + private void backgroundWorkerPing_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) + { + PingResult response = (PingResult)e.Result; + + // Display Time + label_time.Text = response.Time > 0 ? response.Time.ToString() + " ms" : "Timeout"; + label_time.ForeColor = response.Color; + label_time.CenterHorizontally(); + + // Display Progression + if (response.Time > progressBarTime.Maximum) progressBarTime.Value = progressBarTime.Maximum; + else if (response.Time < progressBarTime.Minimum) progressBarTime.Value = progressBarTime.Minimum; + else progressBarTime.Value = (int)response.Time; + progressBarTime.ForeColor = response.Color; + + // Display Rating + label_rating.Text = response.Rating; + label_rating.ForeColor = response.Color; + label_rating.CenterHorizontally(); + + // Display Host + label_host.Text = response.Host; + label_host.CenterHorizontally(); + + // Save Host + if (response.Host != Settings.Default.Host) + { + Settings.Default.Host = response.Host; + Settings.Default.Save(); + } + } + + + private void buttonSettings_Click(object sender, EventArgs e) + { + // Stop Timer + bool timerStatus = timerPing.Enabled; + TimerSwitch(false); + + // Create & Open Settings Form + FormSettings formSettings = new FormSettings(); + formSettings.ShowDialog(); + + // Restore Timer Status + TimerSwitch(timerStatus); + } + + private void buttonAbout_Click(object sender, EventArgs e) + { + // Stop Timer + bool timerStatus = timerPing.Enabled; + TimerSwitch(false); + + // Create & Open About Form + FormAbout formAbout = new FormAbout(); + formAbout.ShowDialog(); + + // Restore Timer Status + TimerSwitch(timerStatus); + } + + private void buttonPause_Click(object sender, EventArgs e) + { + TimerSwitch(); + } + + public void TimerSwitch() + { + timerPing.Enabled = !timerPing.Enabled; + button_pause.Image = timerPing.Enabled ? Resources.pause : Resources.play; + } + public void TimerSwitch(bool status) + { + timerPing.Enabled = status; + button_pause.Image = timerPing.Enabled ? Resources.pause : Resources.play; + } + + private void FormMain_Load(object sender, EventArgs e) + { + + } + + private void button_close_Click(object sender, EventArgs e) + { + Close(); + } + + private void button_minimize_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + } + } +} diff --git a/Ping Tester Aluminium/GUI/Form_Main.resx b/Ping Tester Aluminium/GUI/Form_Main.resx new file mode 100644 index 0000000..67a2644 --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_Main.resx @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 121, 17 + + + 52 + + + + + AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAADAE + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBGNlBQRziqUEc4qlBHOKpQRziqUEc4qlBH + OKpQRziqUEc4qlBHOKpQRziqTkg4TgAAAAAAAAAAAAAAAFVJPRVSSzzvYFhJ/09HN/9PRzf/xbES/8Wx + Ev/FsRL/xbES/09HN/9PRzf/WlND/1NKOu5NTTMUAAAAAAAAAABPRziFhX9y/6qlmv+CfG7/T0c3/8Wx + Ev/FsRL/xbES/8WxEv9PRzf/h4Fz/6ynm/+EfXD/Tkc3ggAAAAAAAAAAT0c30a6qnv9RSTj/WFFB/09H + N/9PRzf/T0c3/09HN/9PRzf/T0c3/1hRQf9RSTn/r6qe/09HNs4AAAAAAAAAAE9HN/SyraH/dW5f/09H + N/9PRzf/T0c3/xhAw/8aQb3/T0c3/09HN/9PRzf/dW5f/7Ktof9PRzfzAAAAAAAAAABPRzfzsq2i/353 + av9QSDj/T0c3/09HN/8NP9//Bz7u/yZCn/9MR0D/UEg4/353av+yraL/T0c38gAAAAAAAAAAT0c30bCr + oP9RSTr/XVVG/09HN/9PRzf/T0c3/09HN/81Q3r/FT/J/zdEc/9QSDn/sKqf/09HNs4AAAAAAAAAAE5H + N4KNiHv/qaSY/3pzZf9PRzf/T0c3/09HN/9PRzf/T0c3/01HO/8vQ4j/e3Vs/4yFeP9ORjZ/AAAAAAAA + AABVST0VVUw78bWwpP9gWEn/iYN1/1dPP/9PRzf/T0c3/15WR/97dGb/YFhJ/7Svpf9TTD3vUUM2EwAA + AAAAAAAAAAAAAE5INlVeVkf+s62i/6Oekf9QSDn/fndq/353av9RSTv/qaKY/7Ktof9dVkb+Tkg4UgAA + AAAAAAAAAAAAAAAAAAAAAAAAT0c2WlNKPPSJgnX/sayh/7Ktov+yraL/sayh/4eBdP9SSzrzT0Y4VwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRRjoWTkY2f1BHOMpPRzfpT0c36VBHOMpPRzd+VUk9FQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA4AcAAMADAACAAQAAgAEAAIABAACAAQAAgAEAAIAD + AADAAwAA4AcAAPAPAAD8PwAA//8AAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExF + NyVPRzhET0c4RE9HOERPRzhET0c4RE9HOERPRzhET0c4RE9HOERPRzhET0c4RE9HOERPRzhET0c4RE9H + OERPRzhET0c4RE9HOERPRzhET0c4RE5HOSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABRRjoWT0c35U9HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H + N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0Y35FVJPRUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAU5GNsBPRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/insl/4p7Jf+KeyX/insl/4p7 + Jf+KeyX/insl/4p7Jf9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/UEg3vQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABNRzdPT0c3/15XSP+MhXj/UUk5/09HN/9PRzf/T0c3/09HN///5QD//+UA///l + AP//5QD//+UA///lAP//5QD//+UA/09HN/9PRzf/T0c3/09HN/9QSDj/gntt/11WRv9PRzf/UUY2TAAA + AAAAAAAAAAAAAAAAAAAAAAAAgIAAAk9HN9RPRzf/qaOY/8vHvf+7tqv/amNU/09HN/9PRzf/T0c3///l + AP//5QD//+UA///lAP//5QD//+UA///lAP//5QD/T0c3/09HN/9PRzf/bWZX/7q2qv/MyL//qKKX/09H + N/9PRzfRAAAAAQAAAAAAAAAAAAAAAAAAAABNSDU1T0c3/15WR//a1s3/kIl9/7m0qf/b187/cWpc/09H + N/9PRzf/insl/4p7Jf+KeyX/insl/4p7Jf+KeyX/insl/4p7Jf9PRzf/T0c3/3ZvYv/c2M//t7Kn/5CK + ff/a1s3/XVVG/09HN/9NRzgyAAAAAAAAAAAAAAAAAAAAAFBIOIBPRzf/kYt+/9LNxP9TSzv/T0c3/3dw + Yf9QSDn/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/UUk4/3Zv + Yv9PRzf/VEw7/9LNxP+OiHv/T0c3/1BHN30AAAAAAAAAAAAAAAAAAAAAT0c3wk9HN/+yraL/raic/09H + N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H + N/9PRzf/T0c3/09HN/9PRzf/rqid/7CroP9PRzf/T0c3vwAAAAAAAAAAAAAAAAAAAABPRzbcT0c3/83I + vv+PiXz/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/88RWf/FEDN/xdAxf9DRVX/T0c3/09H + N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/+Qin7/y8e9/09HN/9QRzfaAAAAAAAAAAAAAAAAAAAAAE9H + N/RPRzf/19PK/6qlmf+tqJz/raic/1BIOf9PRzf/T0c3/09HN/9PRzf/T0c3/wk+5/8APf//AD3//xU/ + yf9PRzf/T0c3/09HN/9PRzf/T0c3/1FJOP+tqJz/raic/6qkmf/W08n/T0c3/09HN/MAAAAAAAAAAAAA + AAAAAAAAT0c3809HN//W0cj/r6me/7axp/+2saf/UUk4/09HN/9PRzf/T0c3/09HN/9ORjn/BD71/wA9 + //8APf//Aj35/zdEc/9PRzf/T0c3/09HN/9PRzf/UUk5/7axp/+2saf/r6mf/9XRx/9PRzf/T0c38gAA + AAAAAAAAAAAAAAAAAABQRzfaT0c3/8fDuf+SjID/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H + N/8wQ4X/BD71/wY97/8SQNP/AD3//x1Btv9GRk7/T0c3/09HN/9PRzf/T0c3/09HN/+UjYH/xsK3/09H + N/9PRzfYAAAAAAAAAAAAAAAAAAAAAE9HN79PRzf/tK+l/6ummv9PRzf/T0c3/09HN/9PRzf/T0c3/09H + N/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/85RG//DD7g/wI9+f8nQpv/TEY//09HN/9PRzf/T0c3/62n + nP+zrqP/T0c3/1BIN70AAAAAAAAAAAAAAAAAAAAAT0c4hU9HN/+Nh3r/0s7E/1FJOf9UTDz/iYN2/1FJ + OP9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9ORzr/LUOO/wU+8v8KP+f/N0Rz/09H + N/9RSjr/0s/F/4uFd/9PRzf/Tkc3ggAAAAAAAAAAAAAAAAAAAABNSDU1T0c3/2BYSf/a1s7/l5GF/8vH + vf/V0cf/aWJT/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/SkdD/yNB + pv8EPvT/RUVP/4J8bv/a1s7/X1hJ/09HN/9NRzgyAAAAAAAAAAAAAAAAAAAAAAAAAAFPRzfXT0c3/6ah + lf/NyL7/q6ab/15WR/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H + N/9PRzf/T0c3/0pHRP9UTDv/y8e9/6Sek/9PRzf/T0c31QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBI + NllPRzf/XlZH/9XRx/+inJD/T0c3/09HN/9PRzf/fndq/1BIOf9PRzf/T0c3/09HN/9PRzf/T0c3/09H + N/9RSTn/a2RV/09HN/9PRzf/T0c3/6Sekv/Uz8b/XVVG/09HN/9QRzhWAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAU9HN8lPRzf/e3Rm/9vXzf+Nh3r/T0c3/353av/b187/bWVX/09HN/9PRzf/T0c3/09H + N/9PRzf/T0c3/4qEd//W0sj/XldI/09HN/+OiHv/29fN/3lyZf9PRzf/T0c2xQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAATUc1K09HN/FPRzf/jYh7/9vXzv+jnZL/yMS4/6mjmP9PRzf/T0c3/09H + N/+tqJz/raic/09HN/9PRzf/VEw8/8vHvf+qpJn/pZ+U/9vXzf+Nhnn/T0c3/09HN+5MRTclAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATkc3QU9HN/pPRzf/fXVo/9bSyP/Nyb//iYR2/1JK + O/9PRzf/T0c3/62onP+tqJz/T0c3/09HN/9SSjv/l5KF/87KwP/W0cj/e3Vn/09HN/9PRzf5TkY1PgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0Y4TU9HN/NPRzf/XldI/6Se + kv/a1cz/1NDH/66onf+WkIT/sq2i/66qnv+WkIT/rqme/9XRx//a1cz/op2R/15WR/9PRzf/T0c38lFG + NkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUUo2JlBH + N81PRzf/T0c3/11VRv+Jg3b/trCl/8bAt//RzcP/0c3D/8bAt/+1sKT/iYN1/11URf9PRzf/T0c3/09I + N8tQSTojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAU5GN1hPRzfZT0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09HN/9PRzf/T0c3/09H + N9hQRzhWAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOSTkxT0c3flBHN7pPRzjTT0c36U9HN+lPRzjTUEc3ulBH + N31QRTUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////+AAAH/AAAA/wAAAP4AAAB+AA + AAfAAAAHwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA+AAAAfgAAAH8AAAD/AAAA/4AAAf/AAAP/4A + AH//AAD//8AD///4H/////////////////////// + + + \ No newline at end of file diff --git a/Ping Tester Aluminium/GUI/Form_Settings.Designer.cs b/Ping Tester Aluminium/GUI/Form_Settings.Designer.cs new file mode 100644 index 0000000..1a4287a --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_Settings.Designer.cs @@ -0,0 +1,161 @@ +namespace PingTesterAluminium +{ + partial class FormSettings + { + /// + /// Variable nécessaire au concepteur. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Nettoyage des ressources utilisées. + /// + /// true si les ressources managées doivent être supprimées ; sinon, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Code généré par le Concepteur Windows Form + + /// + /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas + /// le contenu de cette méthode avec l'éditeur de code. + /// + private void InitializeComponent() + { + this.buttonSave = new System.Windows.Forms.Button(); + this.labelHost = new System.Windows.Forms.Label(); + this.textBoxHost = new System.Windows.Forms.TextBox(); + this.textBoxInterval = new System.Windows.Forms.TextBox(); + this.labelInterval = new System.Windows.Forms.Label(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // buttonSave + // + this.buttonSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonSave.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.buttonSave.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonSave.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.buttonSave.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonSave.Location = new System.Drawing.Point(411, 185); + this.buttonSave.Margin = new System.Windows.Forms.Padding(4); + this.buttonSave.Name = "buttonSave"; + this.buttonSave.Size = new System.Drawing.Size(150, 33); + this.buttonSave.TabIndex = 2; + this.buttonSave.Text = "Save"; + this.buttonSave.UseVisualStyleBackColor = false; + this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click); + // + // labelHost + // + this.labelHost.AutoSize = true; + this.labelHost.BackColor = System.Drawing.Color.Transparent; + this.labelHost.Font = new System.Drawing.Font("Visitor TT1 BRK", 25F); + this.labelHost.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.labelHost.Location = new System.Drawing.Point(120, 14); + this.labelHost.Name = "labelHost"; + this.labelHost.Size = new System.Drawing.Size(334, 31); + this.labelHost.TabIndex = 4; + this.labelHost.Text = "Host (Name or IP)"; + // + // textBoxHost + // + this.textBoxHost.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxHost.Location = new System.Drawing.Point(13, 48); + this.textBoxHost.Name = "textBoxHost"; + this.textBoxHost.Size = new System.Drawing.Size(547, 44); + this.textBoxHost.TabIndex = 0; + this.textBoxHost.Text = "google.com"; + this.textBoxHost.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // textBoxInterval + // + this.textBoxInterval.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxInterval.Location = new System.Drawing.Point(12, 129); + this.textBoxInterval.Name = "textBoxInterval"; + this.textBoxInterval.Size = new System.Drawing.Size(548, 44); + this.textBoxInterval.TabIndex = 1; + this.textBoxInterval.Text = "1000"; + this.textBoxInterval.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.textBoxInterval.TextChanged += new System.EventHandler(this.textBoxInterval_TextChanged); + // + // labelInterval + // + this.labelInterval.AutoSize = true; + this.labelInterval.BackColor = System.Drawing.Color.Transparent; + this.labelInterval.Font = new System.Drawing.Font("Visitor TT1 BRK", 25F); + this.labelInterval.Location = new System.Drawing.Point(160, 95); + this.labelInterval.Name = "labelInterval"; + this.labelInterval.Size = new System.Drawing.Size(254, 31); + this.labelInterval.TabIndex = 5; + this.labelInterval.Text = "Interval (ms)"; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCancel.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.buttonCancel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonCancel.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonCancel.Font = new System.Drawing.Font("Visitor TT1 BRK", 15F); + this.buttonCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonCancel.Location = new System.Drawing.Point(13, 185); + this.buttonCancel.Margin = new System.Windows.Forms.Padding(4); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(150, 33); + this.buttonCancel.TabIndex = 3; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = false; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // FormSettings + // + this.AcceptButton = this.buttonSave; + this.AutoScaleDimensions = new System.Drawing.SizeF(24F, 36F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = global::PingTesterAluminium.Properties.Resources.background; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.CancelButton = this.buttonCancel; + this.ClientSize = new System.Drawing.Size(574, 232); + this.Controls.Add(this.textBoxInterval); + this.Controls.Add(this.textBoxHost); + this.Controls.Add(this.labelInterval); + this.Controls.Add(this.labelHost); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonSave); + this.Font = new System.Drawing.Font("Visitor TT1 BRK", 30F); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Margin = new System.Windows.Forms.Padding(10, 8, 10, 8); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FormSettings"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Settings"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonSave; + private System.Windows.Forms.Label labelHost; + private System.Windows.Forms.TextBox textBoxHost; + private System.Windows.Forms.TextBox textBoxInterval; + private System.Windows.Forms.Label labelInterval; + private System.Windows.Forms.Button buttonCancel; + + } +} + diff --git a/Ping Tester Aluminium/GUI/Form_Settings.cs b/Ping Tester Aluminium/GUI/Form_Settings.cs new file mode 100644 index 0000000..9eb3900 --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_Settings.cs @@ -0,0 +1,56 @@ +using System; +using System.Windows.Forms; +using PingTesterAluminium.Properties; + +namespace PingTesterAluminium +{ + public partial class FormSettings : Form + { + public FormSettings() + { + InitializeComponent(); + this.SetFont(Resources.visitor.ToFontFamily()); + this.EnableButtonsHoverEffects(); + textBoxHost.Text = Settings.Default.Host; + textBoxInterval.Text = Settings.Default.Interval.ToString(); + } + + private void buttonSave_Click(object sender, EventArgs e) + { + string host = textBoxHost.Text.Trim(); + if (host == string.Empty) + { + MessageBox.Show("A host name or ip must be given."); + return; + } + + int interval = 0; + if (!int.TryParse(textBoxInterval.Text, out interval)) + { + MessageBox.Show("Interval must be a number."); + return; + } + + if (interval <= 100) + { + interval = 100; + } + + Settings.Default.Host = host; + Settings.Default.Interval = interval; + Settings.Default.Save(); + ((FormMain)this.ParentForm).timerPing.Interval = interval; + this.Close(); + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void textBoxInterval_TextChanged(object sender, EventArgs e) + { + + } + } +} diff --git a/Ping Tester Aluminium/GUI/Form_Settings.resx b/Ping Tester Aluminium/GUI/Form_Settings.resx new file mode 100644 index 0000000..fa6b66e --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_Settings.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 52 + + \ No newline at end of file diff --git a/Ping Tester Aluminium/GUI/Form_Template.resx b/Ping Tester Aluminium/GUI/Form_Template.resx new file mode 100644 index 0000000..b70a6c9 --- /dev/null +++ b/Ping Tester Aluminium/GUI/Form_Template.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 52 + + \ No newline at end of file diff --git a/Ping Tester Aluminium/Ping Tester Aluminium.csproj b/Ping Tester Aluminium/Ping Tester Aluminium.csproj new file mode 100644 index 0000000..f46fd7a --- /dev/null +++ b/Ping Tester Aluminium/Ping Tester Aluminium.csproj @@ -0,0 +1,182 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {C15B5D96-0397-4CA0-915D-118F8DE69E73} + WinExe + Properties + PingTesterAluminium + PingTesterAluminium + v4.0 + Client + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + icon.ico + + + + + + + + + + + + + + + + + + + + + + + Form + + + AluminiumForm.cs + + + Form + + + Form_About.cs + + + Form + + + Form_Settings.cs + + + Form + + + Form_Main.cs + + + + + AluminiumForm.cs + + + Form_About.cs + + + Form_Settings.cs + + + Form_Main.cs + + + AluminiumForm.cs + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + False + Microsoft .NET Framework 4 Client Profile %28x86 et x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/Ping Tester Aluminium/Program.cs b/Ping Tester Aluminium/Program.cs new file mode 100644 index 0000000..f0b7c18 --- /dev/null +++ b/Ping Tester Aluminium/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Windows.Forms; + +namespace PingTesterAluminium +{ + static class Program + { + /// + /// Point d'entrée principal de l'application. + /// + [STAThread] + static void Main() + { + //Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form_Template()); + } + } +} diff --git a/Ping Tester Aluminium/Properties/AssemblyInfo.cs b/Ping Tester Aluminium/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..00cb64b --- /dev/null +++ b/Ping Tester Aluminium/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// Les informations générales relatives à un assembly dépendent de +// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations +// associées à un assembly. +[assembly: AssemblyTitle("Ping Tester Aluminium")] +[assembly: AssemblyDescription("Simple ping utility for testing network connection latency.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Ambratolm")] +[assembly: AssemblyProduct("Ping Tester Aluminium")] +[assembly: AssemblyCopyright("© 2019 Elhafid Softwares @Ambratolm")] +[assembly: AssemblyTrademark("Ambratolm")] +[assembly: AssemblyCulture("")] + +// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly +// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de +// COM, affectez la valeur true à l'attribut ComVisible sur ce type. +[assembly: ComVisible(false)] + +// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM +[assembly: Guid("7f2ff1af-3ee2-4da1-9815-1613bbc0656e")] + +// Les informations de version pour un assembly se composent des quatre valeurs suivantes : +// +// Version principale +// Version secondaire +// Numéro de build +// Révision +// +// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut +// en utilisant '*', comme indiqué ci-dessous : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Ping Tester Aluminium/Properties/Resources.Designer.cs b/Ping Tester Aluminium/Properties/Resources.Designer.cs new file mode 100644 index 0000000..18bc648 --- /dev/null +++ b/Ping Tester Aluminium/Properties/Resources.Designer.cs @@ -0,0 +1,173 @@ +//------------------------------------------------------------------------------ +// +// Ce code a été généré par un outil. +// Version du runtime :4.0.30319.42000 +// +// Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si +// le code est régénéré. +// +//------------------------------------------------------------------------------ + +namespace PingTesterAluminium.Properties { + using System; + + + /// + /// Une classe de ressource fortement typée destinée, entre autres, à la consultation des chaînes localisées. + /// + // Cette classe a été générée automatiquement par la classe StronglyTypedResourceBuilder + // à l'aide d'un outil, tel que ResGen ou Visual Studio. + // Pour ajouter ou supprimer un membre, modifiez votre fichier .ResX, puis réexécutez ResGen + // avec l'option /str ou régénérez votre projet VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Retourne l'instance ResourceManager mise en cache utilisée par cette classe. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PingTesterAluminium.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Remplace la propriété CurrentUICulture du thread actuel pour toutes + /// les recherches de ressources à l'aide de cette classe de ressource fortement typée. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap about { + get { + object obj = ResourceManager.GetObject("about", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap background { + get { + object obj = ResourceManager.GetObject("background", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cancel { + get { + object obj = ResourceManager.GetObject("cancel", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap close { + get { + object obj = ResourceManager.GetObject("close", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap minimize { + get { + object obj = ResourceManager.GetObject("minimize", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pause { + get { + object obj = ResourceManager.GetObject("pause", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap play { + get { + object obj = ResourceManager.GetObject("play", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap rectangle { + get { + object obj = ResourceManager.GetObject("rectangle", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap save { + get { + object obj = ResourceManager.GetObject("save", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap settings { + get { + object obj = ResourceManager.GetObject("settings", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Byte[]. + /// + internal static byte[] visitor { + get { + object obj = ResourceManager.GetObject("visitor", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/Ping Tester Aluminium/Properties/Resources.resx b/Ping Tester Aluminium/Properties/Resources.resx new file mode 100644 index 0000000..611d8c0 --- /dev/null +++ b/Ping Tester Aluminium/Properties/Resources.resx @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cancel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\background.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pause.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\about.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\visitor.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\minimize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\rectangle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Ping Tester Aluminium/Properties/Settings.Designer.cs b/Ping Tester Aluminium/Properties/Settings.Designer.cs new file mode 100644 index 0000000..e0f8234 --- /dev/null +++ b/Ping Tester Aluminium/Properties/Settings.Designer.cs @@ -0,0 +1,50 @@ +//------------------------------------------------------------------------------ +// +// Ce code a été généré par un outil. +// Version du runtime :4.0.30319.42000 +// +// Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si +// le code est régénéré. +// +//------------------------------------------------------------------------------ + +namespace PingTesterAluminium.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("google.com")] + public string Host { + get { + return ((string)(this["Host"])); + } + set { + this["Host"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + public int Interval { + get { + return ((int)(this["Interval"])); + } + set { + this["Interval"] = value; + } + } + } +} diff --git a/Ping Tester Aluminium/Properties/Settings.settings b/Ping Tester Aluminium/Properties/Settings.settings new file mode 100644 index 0000000..348fc7d --- /dev/null +++ b/Ping Tester Aluminium/Properties/Settings.settings @@ -0,0 +1,12 @@ + + + + + + google.com + + + 0 + + + \ No newline at end of file diff --git a/Ping Tester Aluminium/Resources/about.png b/Ping Tester Aluminium/Resources/about.png new file mode 100644 index 0000000000000000000000000000000000000000..4d76661924d675e54b7c943fc87bfa108feccd2a GIT binary patch literal 384 zcmV-`0e}99P)5E@CXfdZ6h*PHv`k|mf?yf2^(`#p z3y2n4*a(&);tL2$v`}0V@LC9>5HH_ZcH!S~hZxTHU(VT?W#io6-#pe9oWo;+W_fe$ zL5-3e!A~C!$*Yi2ovj1@;WNAqcmkV6>@|p0p|-(3kj{(v(k>8f_Uf% zTOYdhty;L+tA(<|9U}#W-SudXe*Fgw95i^y@DU?RM~yBUGk(IvNt35coi=mU>^XDi z&0nx+@sg#>makY@yJl_Oy7e3CH*eXxZTpUfoxAq#Yuta};Gx4uj-NPr>hzhWv*#{e zx_ss8wd*%--oA79-u(v;A3c8d{Kd;xuiw0V_x|Ij&tJZN`~KtSFU$)9(V&I?8pM)# zArYV;Nus1;UQk$uKB8ZeyA~_$OU9`)ssnj_;-28JO?!@A@aFfe_|Tzh;VmuHt>3eP zkC+-^#zt&)M$9NNo7ZEIB|_9Z(GP}#FGnlFRW(^-VLd30DLS|U!n?&Fa4+?4X59^K z(^3cu6`mW}%B_^Jy4k$+BC|S1=yWS|dN#>XohYli=CvSKH>GNnCaP1m0M;}+S=cle znM-U?Ic>X|k81Xrty4sFW~fW_1F$~ksG<^ouR)qdYb;}p#wKgPhRZdmj>m0iq&6(V zrN+W2km*YVJ8yLb!DvWgO#&k!O)Hn<@EeJrdy}LUIJ_AxYTCOpC7;nTD;mv5swW{y zcvKel2?iV08b{@TQe*xN(Onx|1Jmq_ywXVgwO}bQlMZ*IAUUQcD~=x9tpPJDOZQNg13Bp^iz+ zxCs`~7Hi_zR5_TMsnG)^M|EsawjIb>1$`W7RU7f{x>QLt zL#@dajc>W@U4pGsHkHGZtWaBY z3BNzFb?WaomE+-)8T$W-ZW)c^j=%-|=S=Ma2Gj%en|@~FF+~R9AgCM*(N~7IC>lnn O(SQzir}-x)9{mPP(xRXM literal 0 HcmV?d00001 diff --git a/Ping Tester Aluminium/Resources/cancel.png b/Ping Tester Aluminium/Resources/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..778cb33c16da4e7f86a0568eaade41a813a803e6 GIT binary patch literal 375 zcmV--0f_#IP)XCwc@C5jzDT;vLfF29isNCa!uE!2<~PiM5AF z7fT~Hf>G1zd#e*-vWrN&wwVbGk^S$+o{!FTR zh2~G!D3%AfG34Eied;*DStK45Qn=^=in&^W%Q@pQb!_4$pdeH7F1Tnd=6)@E*7C~C z29#Fd75{@bVeQ*i{wsSKFLFULfx0L0vGa@=i*Tt-=A7?!MBRox&_=jBxP=#(*%!7* VmO5l1)A0ZR002ovPDHLkV1h|4rzHRY literal 0 HcmV?d00001 diff --git a/Ping Tester Aluminium/Resources/close.png b/Ping Tester Aluminium/Resources/close.png new file mode 100644 index 0000000000000000000000000000000000000000..93252310f6e52f356acb63d29fef0c6a36186aca GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^TJzX3_ zECi2EI>>v-L4aBL$0dfT4lIiV{6rl0xwBr7)xE$RFJZ4U_nX-VpOozUx3RCMq)1Gw zyY`UD{g-gfAs+D~yfp{;lut?5CA12fvsBKyS^O>_z$788>hS4r=ggAk3fL^ES}tB{ zwm!pN(0R{_U*$JXMtbbp^T}<+?F*~Vn!J>i*VvWkwwM1+<&o6b=$yl8&Rjd+CM-37 zl&)iT%j(h#^+1oOG7kmLzFGA0-vP({+N!NKXO}!PdL$li>M)m~VM-s+6AYfNelF{r G5}E*KtZ455 literal 0 HcmV?d00001 diff --git a/Ping Tester Aluminium/Resources/minimize.png b/Ping Tester Aluminium/Resources/minimize.png new file mode 100644 index 0000000000000000000000000000000000000000..7d8c1120f04dcec01448308c51dfdf23073fc716 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_$JY5_^ zECk<9*v)k)K){9FWpUH3AD4eAdZsU)YUa4*d;b@n6ooym~rER&H#l7gkOf^^@E2RaXCz`ZxU9?Qn+U$n-{uwsj1WlN|o=cgQn;EO26w XpT#}PO>gx|pq&h!u6{1-oD!MW`)@VKoO4^-D*a9!lis~g4^RZ95^UH1CU)*aKf&2D?|*!ETUH8FQrCqQj66Jx6AdH|HL%X;>u3CUK#_rWJ=1b; S?tkJy%?zHdelF{r5}E+d!X%Xd literal 0 HcmV?d00001 diff --git a/Ping Tester Aluminium/Resources/save.png b/Ping Tester Aluminium/Resources/save.png new file mode 100644 index 0000000000000000000000000000000000000000..40a47e0824ab125ddd510b129206cb938cc2c5a9 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_)JzX3_ zEClaPvgSJEAkd~RHQ`6Y4UVvBatE?27|u^PW__bmp=s+20C5tQsaA+t;10H58;V@Cy+88myS=lodKeEw3`Vci`Mny=}9 zNJ_qy@WsUO)c2F@3%>I2$?CZoZjfrCX?@_Lx@vrYzglO7@190$6NPE6OSliZUTTe7 zq;WgM@}1+FFAYByc?bm6G^jlZ?RI+0c~qN5pXD~k5|I(lBh0&MaVzEu% qWO8@eL^SdLTK;g~sfCAF-?N(SR0_(H6nO;nCWEJ|pUXO@geCx=lzNr` literal 0 HcmV?d00001 diff --git a/Ping Tester Aluminium/Resources/settings.png b/Ping Tester Aluminium/Resources/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..f538aa6822217ada913cbc23c5e16da37312828f GIT binary patch literal 411 zcmV;M0c8G(P)UqK~y*qm65?NLs1k(ua-!NK@$npFsC&Y@d-jo|3T6Z@E=Hw_yv+O zHfmDw1*Ak$Lqf!WGAP!n_e8xHjb^XA&)N6fzWds22!DPy*xbJ@fFBMtm2p8-ZMT6 zsj8EnLmu|wDPj+wgbO%D3Iu8^kiSHjit2>j8^je4ov+QHFl6u*Qt9u#9^K>s6gL{t>sS?;^JF zDQJZdQh!A9P-1C=*KOiu7>lUjH{hOs;~aHD$0QE;C8yNBj=fkn$lS9(qE2Xrqy|M$ z6&8oZ+t7Az>EUUceoQdnVaZXaYA`kZ3U9Fu=)fbS>J!gIUx`HqfwKSr002ovPDHLk FV1ik*w;ccg literal 0 HcmV?d00001 diff --git a/Ping Tester Aluminium/Resources/visitor.ttf b/Ping Tester Aluminium/Resources/visitor.ttf new file mode 100644 index 0000000000000000000000000000000000000000..04ce123d4bbfbe14c4e60982181804b847a96025 GIT binary patch literal 27552 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 Ps8Xvx0u{mUV6OhZx}kpw literal 0 HcmV?d00001 diff --git a/Ping Tester Aluminium/app.config b/Ping Tester Aluminium/app.config new file mode 100644 index 0000000..a499647 --- /dev/null +++ b/Ping Tester Aluminium/app.config @@ -0,0 +1,18 @@ + + + + +
+ + + + + + google.com + + + 0 + + + + \ No newline at end of file diff --git a/Ping Tester Aluminium/bin/Release/PingTester.vshost.exe.config b/Ping Tester Aluminium/bin/Release/PingTester.vshost.exe.config new file mode 100644 index 0000000..a499647 --- /dev/null +++ b/Ping Tester Aluminium/bin/Release/PingTester.vshost.exe.config @@ -0,0 +1,18 @@ + + + + +
+ + + + + + google.com + + + 0 + + + + \ No newline at end of file diff --git a/Ping Tester Aluminium/bin/Release/PingTester.vshost.exe.manifest b/Ping Tester Aluminium/bin/Release/PingTester.vshost.exe.manifest new file mode 100644 index 0000000..061c9ca --- /dev/null +++ b/Ping Tester Aluminium/bin/Release/PingTester.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Ping Tester Aluminium/bin/Release/PingTesterAluminium.exe.config b/Ping Tester Aluminium/bin/Release/PingTesterAluminium.exe.config new file mode 100644 index 0000000..a499647 --- /dev/null +++ b/Ping Tester Aluminium/bin/Release/PingTesterAluminium.exe.config @@ -0,0 +1,18 @@ + + + + +
+ + + + + + google.com + + + 0 + + + + \ No newline at end of file diff --git a/Ping Tester Aluminium/bin/Release/PingTesterAluminium.vshost.exe b/Ping Tester Aluminium/bin/Release/PingTesterAluminium.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..bb84a51ac4f20534146c09f2fd9c928d15a903b2 GIT binary patch literal 11600 zcmeG?2~<)?tG75|5OPOMcC{DsnWb(K|p-9Gz zCYX{WA(Jm;dIfQqiJ};SrLL}G(n&hl8zFy;j>apOj_;bS1<^27Oc^0Hz(7W(Czb%1 z@VUW90w!d%4!)s8@lWO`4L-o%@Fz33`3PxI|9bMyD%lrO3DBh`b_0^65V}%-gn|b^ zWm*RtcF<41tL^XP%x>1H-pWw-?KO@iBWB8={z?S^v{7pXzI!Jo%+8WXB|Jbhzz%$;+6FHiiU_~N3I z3EN^9UtHuj{7z%|8vGH<%)(m1Ea7^jMXH#Y>ya2$DiaMPF|c+I&NvSYVbqF9*~#r#ILj8dWjm251tb7C6J%*T7omHQ z|3QZ`M<(G55b{zd>0OBcT-q z$5D_+!Bh&aq+kUFn<&Vjy~Gre83lc5nD5M>aGT=)?fZgOM>nV`Kqv zI0bDf=!~2J||60WgZ0+&DGHhBHk2136`;HfS!lVrq~L;Qp?LLw4#2#K5zlOj)1BCy1d77#r{JpDO<77O@Xp{xhn!4xZ$h!p@= zFfDSIN{Pg1K}r~3)_Zst+KZ6#Bz!U1wTDViV=OmGAajRFq+hp^({qI>UpIiLVv=~h zxay+kDH5kh_;K;yXzG;G*Tj7I0^&~_{e-b1Ng|izo-6pOSGO>vq9h3^M-Ep;2n2i? z;VA;Ob9u6_h6EBx&>#pUI*0gkg>gyTxL$JaT8kGU;HGf+ao-Tzcp`=5x@Rq2jC5KA zDL81CbnCa%R49SU_|be|v6omoM|<(PaYE7-c~ay>L?^|?aX&MN4jh;n*m;M|z$BDt zLV?wpRH>I1yLLe*EkY6~5>Aj35>FW2!};IZ6RZg`l4U+2WpPr3Jg{aVFJ1yBKdala z!{Q|bH-_8;-f}`H`;N<(`ErFZ0s_H?nELq^^AiFst^h{IAPxchk}HJW2r40D)L?1| zN5+-NKyKu|BH5O9=>_$oO%{WM1RNkt$|LX>+U#yGW4SL{W#Dq<^-?pWTs_=s z+sMi))7<${{lWc@(;pS&e4xt(nf|K_4fiC?yA3+_%vvY*l!4@4iv}=BM|c$3*(8Ejv=a+B_=Ss*JEQXuIqpixQ3a_4(W> zyEKm#xtQrM)b=Fwn2Ghv>;fV#EMt&fQn_Nx)Omd`sf+@qw7IY%8d=~wU}z94&^xT# z?O1hMy$gBFV<=2Rx4X%UFBOAX2ZDn_3e*V(5c0klQtL7p%59=S80yz;986D8eMaINL%0wc8G%|*e$MEHmK74Q% z!Aa2qJ`Z*(ODar2$dFuS7_I+z60R6Fg7-`wLHR_mTT!wUQ^u&61Y`_zfv7uESG-PI zL=b$z5K9F^02Rvd;_$Xby>8#V-GB3vXN;}hekVw2b}%EC!sUQGG$K1h+L_tfM2e!P zOCtHUjw8EKEOAUULMMT4SGq-(nO(Kd^R74+p{XEA@0kR39#JP2L9k*3WE=-K98<(} zqe}k)-;w}E#jg-2r+wZ^?F0lS_7$G&N8TMKx*>Foia|&WS+)ZhjyMosg(Ghi3MD_V zlt8Ha0ra7)2BA8})Ao*tk&JOg@{U+nBp*Xj>4k4odB9b z6pKVuFB2+W3WHWIV5QK`MKb6of?7waV3?3D4|tM6FFxSozD0@ZgTuNz{_IdRDFbAO z)M2bA&`X3r0!GVV7PvbAj0da~>bA%RB0vJogpW-A5a@S}5mS7nfE2jYc(OeJxZnXV z z&=#?g6V$=wK;MbkDI7SI!WeQ^CS`v~K!cP!6Ls~m0g03HCzBh+@8@%Usja`( zRUhEh9p)q@kq8zn0BMtae6H~x8XbD4CjSrk|1SY%$D7f!QUCv!`kxhkEdlC{lSV^$ z#(*)3eJrzmv)`&?O0<%U0XU$nXc)#;#rr5K4A-F31}PvsUQuPZBF4Zn9B3G$Bm$p^ z+xEg};-+*Al`u;U)AZq(Ape5E<&Z}jc}SDTg)8}o8}*{e(B;nwSKrv~9H~AQdwjF4 zytOrcZE;D4HXF}iOv5wi{v~u8Mx&{)%KP37{uH^cp}uRh0dOQ{563MO=@S^LIzzi} z*-Ueu1(WUMCW9mBJY@F8S7T}Q7cHV+lSJGOh0EM6pm>nUzHKpl6$ z9c>`lvT>V;0qSfUsM-S(QUsnti42G+>d+=|*gAM$lA^MX%6D98JY3pjA|YD~*C3Hf zI!d8LOrl5_)5VyI&Yv)5j2m?@HmHX&^2W*}Z{k3e8SLqfXJA8d^=>_4m;$0_V49#^ zOof(#VW>J~&gG~|Z>JyZwzIFlH?{XmuKzHk_$TifPtW_@znJ%9f`4fAtJSn01FrfB ztW8{r!)J`EReh`HB{h53l@(|NA2%KTqU3jV<00qWP1>SYpB?DEdD*xjtD7pVhyFNj zM5^doKSSp{CoQMuI*V7a&Lc3JPwm5ex9k;QIcq=E?BUJJcpq7ko;81Q#f$yRH=cFe z5b>h8C`l0N{0;jDkyEj#=T`F^;m(Gk`yGp8_z3auXm&^k}+WEW& zt7|si1E186D{>Cz=$(lTNh#Zrb28j@eMWGuP+_y>1}xWTU-akX<*7w!&MZO!KM`yl<0Iky_CdajPx~l`pPt| z$>+pR`I2Jekh!{h0v3O2*dY1m?JYwS9YKpmkIwCT-t`Ud(QP+eljKnc!#*(-a5`kT z0g2FH^k?Wc8k~_M@#J04uOACs6XM0%=*4@6tCG!{3|R?3Oanu+%XiKlXZGUE z!9ZE*#9=baq{{4%<^IcOqJRgdAL`xYAJ-^NeM$2?aXP2*9jEc=`nqt@GoIHrFZ877 z5D5;-{if^h*b5Dr3*JQX3MwLMovuvFn~*ig_O zk_@%dsf#MDsyA$ID8J6!cNiZypQ)>Ec`)>qd&?C3ZlO6p=ZN^1ms`uvq8sKAQ zfscvq^f6rQtSjXuHGA(P1@JTf#$8Q194GKG4mLJ+xQ!F(aM-wQcNI_1{9o}n>XhMt zUu6UY1&4MyDEgl`sDJ5u>hJ|0yd^(y5{efDA>;Z(7Y$r?PjYj7DP5Xj_FIuQ;#||u z&=`HjptkOe`hci{cqM?Z7vhf99GoD>l0v+ePeXBU3qPaY&~t<=wFG+B6+ z#7wd_Toon!sa($~gE+SJV0lvRz}B3Vx@ML0%;cLcIyzbFJj7-Qx%H5C{?KB zV)bs>V(P#!&?I*~Y-FW0>YOq#X6WJl)4sj!y~u4pgyDia<4z?GCHC32@iLisl(jWa zB48zUKl$@SiPqu-K8dx4=Na<-T59ddf#ZY)DBQQpJ7O4PG(HMRG=3gh!hRVYf4>Vg|mrXkTWVH8ZMCy}ER7;eB(l^wQ%yM`u5I9&Q(rmhn*QiiF;(9r&nOJ#V&GkQz7Xqj0TK z^O@lhdg@LU(>`AR#3-X}yxO*SV{P4$>0!?7srRge4bKBC^T#* z8ujN(wwQ*TObBqI$!owPV^5*ifid&vi=Rmq1C#e1#Vx2JfMM)~-!tV!vGuFB3ApEfFq{p}!dMD5Lx^n8<%5`h3 zY-+WGLQiHscD23c$1XJAw=||@NN`ro(edZ!DZG1{bZF5}KU~_$7st*V7JGkR_0#zW znx2$>)ZU~zX{d$uS+{H9jKT7~i7|=e!frG_zjb(h=1*z2=lRndmcOnqRt`6eAKP@T zULI*ZXP+sfDtz*Eecq?E)X`5aF-!xTl4VL!MXRyOUndaGYI)>Z zu(EiD##GB7z36E+#TPOIhYyX6_g-|%I!h~f&-=ZD@&!*!zt?%!pmk-w#;XjubmWN@ zvq~GMDLzuD$hNJ1w|sJzd)CDH%Y_v~tb7|qYdu@0-=Al;IHAMeWMJmtnN7asag_gW zL_1oFeLAlk{V+0wLA}Bq(fzv%BYsbNImS0lGAXnxP6jvn0VS z#1pxH9tnLFM)iuE;l!sL)bfD7?4zl{wS5Y+0p(P_1#@O>=Il@ACm``x-gY^mDc=9xt-l|Et>xj!WIP z1-I_UI^@3^TC}#YA~`H%)Mbg+9^*IQpvu5O6?TP3ipxh(;ZdJ2UDH1o9)0Bq$neM! zq9J>5O*U-GN0Gr1RM}(|Pp|wZ!lPlhDV(|55w>#zR?u zTwZiW!KDt92M?pa%c}05oj>hRl!evkvztGzim*2b>R<18)sQ>JWn^WzZolLe&RT7# zV%aZI4&}pYc~-u<=@ae>TDJ{fk)NwEcO%-IY@)QvQcT}(X|iO^t>dLb#~=2eq?jBg z@vLx-X0QbUz#${W|Dpclw{v_*5rdhcl@VV|HTHR zycK$~{f}QRhRQV}l%a z_&OAc+Zt`Rn&<6T-6zvAudYnGW7+4IMM1Y$jagZ3r=8xa)ogIHCgyBlu(SWdj{}=c zcU~&WX&ry;*JtnD2Si~HzssE?pY^M#J%_n{+1k7{ho=rI>4%%Nl+NWYHL$Sw(QnBp z&&&l+Ze7Z34zjX${@vXjD?@6kFE0BHKI4%;yW-`D{3we%hw|qw?I*9A_Ca@8nMj-G zVLoxxLgz(p_o|OK7JjGi6P{4eP#6%dfKI=|-Mj;D56rE5t@W&V&~0MpNl^k?eUsD@or(o=%<5Y<=i#wO)^B40xI9 zd0bOvYv8?G`+?W!9>`$BRsYAMOGaLJDR*7+mp%W0d-Wor22q<`$)Gg7 zKl^2B1Kb=sBlyp*1HDZPo{$(B7^<@0ds1VI&%VctZnxQM6_;AD?KkZ_-IB+AQuFR- z*T@4KKV+yLG;cjqr21gk0kg5c?SFGQ1q0uRBF8snjVnaH&pIK9b_#y4rru^YJE+h7&5x zs9AY=_}k`&Dd{i6GvD}@ZFQneOa0+~>&jEiPnP;qT3sG&zv|har+8omHf8dz22H=; z|G3?jRGN1{Sif4WDVp0bTj*@RtN(Vr;u|t(L+}jR;2s?)vNLFEfKvX)jqS?= z5R9$oSXSzMt1XGb^?I14vsJq*N*EYgw<#&GH6ftVGuOHLi0kD!oT# zDkga({4jf8)|P2o8}DIStxW-pd_APHW6y?rQ=9OU`%I(z6l^RuzPlq2jlZ((H}0Xz zol`F;9lGF}@iatK!0=jeLS@HJSJ!c7;z64O-#&Dg&#>pd-(SCc=u5RdrFLto)@OT1 zr0ohy+M*GwvZH-+f&1KvF_Z3; + + + +
+ + + + + + google.com + + + 0 + + + + \ No newline at end of file diff --git a/Ping Tester Aluminium/bin/Release/PingTesterAluminium.vshost.exe.manifest b/Ping Tester Aluminium/bin/Release/PingTesterAluminium.vshost.exe.manifest new file mode 100644 index 0000000..061c9ca --- /dev/null +++ b/Ping Tester Aluminium/bin/Release/PingTesterAluminium.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Ping Tester Aluminium/icon.ico b/Ping Tester Aluminium/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c8f727d3a6a13eea00eb8d672f81d67a5af104bd GIT binary patch literal 76788 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..fb36cec --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# ![Icon](./icon.jpg?raw=true) Ping Tester (Aluminium) + +![Ongoing Work](https://img.shields.io/badge/Ongoing%20Work-yellow) +![Incomplete](https://img.shields.io/badge/Incomplete-red) +[![Windows](https://img.shields.io/badge/Windows-blue?logo=windows)](https://github.com/topics/windows) +[![C# 4.0](https://img.shields.io/badge/C%23-4.0-blue?logo=c-sharp)](https://github.com/topics/csharp) +[![.NET Framework 4.0](https://img.shields.io/badge/.NET%20Framework-4.0-blue?logo=dot-net)](https://github.com/topics/dotnet) + +Simple ping utility for testing network connection latency. + + + + + +## :rocket: Development +- Language: **[C#](https://github.com/dotnet/csharplang) 4.0** +- Framework: **[.NET](https://github.com/dotnet) Framework 4.0** +- IDE: **[Visual Studio](https://github.com/microsoft) 2010** + +## :page_facing_up: License +- Licensed under [MIT License](./LICENSE). +- Using [Icons8 Icons](https://icons8.com) licensed under [Icons8 License](https://icons8.com/license). +- Using [Visitor Font by Ænigma](https://www.dafont.com/visitor.font). + + diff --git a/icon.jpg b/icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bef046e7f33ef5c0be9607d6ff5355266265955f GIT binary patch literal 2617 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 k+lSfgjI;x0Gs9Nf<=Gef`mA_1t!sD5FH>y|I