├── NetLimiter Crack.exe
├── NetLimiter Crack
├── FodyWeavers.xml
├── App.config
├── Properties
│ ├── Settings.settings
│ ├── Settings.Designer.cs
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── Program.cs
├── manifest.manifest
├── packages.config
├── Form1.resx
├── FodyWeavers.xsd
├── Form1.Designer.cs
├── NetLimiter Crack.csproj
└── Form1.cs
├── README.md
└── NetLimiter Crack.sln
/NetLimiter Crack.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Baseult/NetLimiterCrack/HEAD/NetLimiter Crack.exe
--------------------------------------------------------------------------------
/NetLimiter Crack/FodyWeavers.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/NetLimiter Crack/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/NetLimiter Crack/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ### NetLimiter Crack Tool (C#): Automated Patching
2 | I coded a c# program that automatically patches NetLimiter for you to get free lifetime premium.
3 | Works with the latest NetLimiter Version 5.3.20.0
4 |
5 | [](https://gist.github.com/assets/45830921/28feb274-c0b9-4f2d-ac1b-3e9d492c2cb9)
6 |
7 | 
8 |
9 |
--------------------------------------------------------------------------------
/NetLimiter Crack/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace NetLimiter_Crack
8 | {
9 | internal static class Program
10 | {
11 | ///
12 | /// Der Haupteinstiegspunkt für die Anwendung.
13 | ///
14 | [STAThread]
15 | static void Main()
16 | {
17 | Application.EnableVisualStyles();
18 | Application.SetCompatibleTextRenderingDefault(false);
19 | Application.Run(new Form1());
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/NetLimiter Crack/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace NetLimiter_Crack.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/NetLimiter Crack.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.8.34525.116
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetLimiter Crack", "NetLimiter Crack\NetLimiter Crack.csproj", "{CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|x64 = Debug|x64
12 | Release|Any CPU = Release|Any CPU
13 | Release|x64 = Release|x64
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Debug|x64.ActiveCfg = Debug|x64
19 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Debug|x64.Build.0 = Debug|x64
20 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Release|Any CPU.Build.0 = Release|Any CPU
22 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Release|x64.ActiveCfg = Release|x64
23 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Release|x64.Build.0 = Release|x64
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {5967E558-8B75-41AF-BD1C-500BB1A29C02}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/NetLimiter Crack/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die einer Assembly zugeordnet sind.
8 | [assembly: AssemblyTitle("NetLimiter Crack")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("NetLimiter Crack")]
13 | [assembly: AssemblyCopyright("Copyright © 2024")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
18 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("cbb7045d-ff4c-4ea7-934f-d48dcd6b0bd6")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
33 | // indem Sie "*" wie unten gezeigt eingeben:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/NetLimiter Crack/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Dieser Code wurde von einem Tool generiert.
4 | // Laufzeitversion: 4.0.30319.42000
5 | //
6 | // Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
7 | // der Code neu generiert wird.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace NetLimiter_Crack.Properties
12 | {
13 |
14 |
15 | ///
16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
17 | ///
18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse
19 | // über ein Tool wie ResGen oder Visual Studio automatisch generiert.
20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
21 | // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NetLimiter_Crack.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
56 | /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden.
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/NetLimiter Crack/manifest.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
54 |
62 |
63 |
64 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/NetLimiter Crack/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/NetLimiter Crack/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/NetLimiter Crack/Form1.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/NetLimiter Crack/FodyWeavers.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
13 |
14 |
15 |
16 |
17 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
18 |
19 |
20 |
21 |
22 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
23 |
24 |
25 |
26 |
27 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
28 |
29 |
30 |
31 |
32 | A list of unmanaged 32 bit assembly names to include, delimited with line breaks.
33 |
34 |
35 |
36 |
37 | A list of unmanaged 64 bit assembly names to include, delimited with line breaks.
38 |
39 |
40 |
41 |
42 | The order of preloaded assemblies, delimited with line breaks.
43 |
44 |
45 |
46 |
47 |
48 | This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.
49 |
50 |
51 |
52 |
53 | Controls if .pdbs for reference assemblies are also embedded.
54 |
55 |
56 |
57 |
58 | Controls if runtime assemblies are also embedded.
59 |
60 |
61 |
62 |
63 | Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.
64 |
65 |
66 |
67 |
68 | Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.
69 |
70 |
71 |
72 |
73 | As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.
74 |
75 |
76 |
77 |
78 | Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.
79 |
80 |
81 |
82 |
83 | Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.
84 |
85 |
86 |
87 |
88 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
89 |
90 |
91 |
92 |
93 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.
94 |
95 |
96 |
97 |
98 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
99 |
100 |
101 |
102 |
103 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.
104 |
105 |
106 |
107 |
108 | A list of unmanaged 32 bit assembly names to include, delimited with |.
109 |
110 |
111 |
112 |
113 | A list of unmanaged 64 bit assembly names to include, delimited with |.
114 |
115 |
116 |
117 |
118 | The order of preloaded assemblies, delimited with |.
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 | 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
127 |
128 |
129 |
130 |
131 | A comma-separated list of error codes that can be safely ignored in assembly verification.
132 |
133 |
134 |
135 |
136 | 'false' to turn off automatic generation of the XML Schema file.
137 |
138 |
139 |
140 |
141 |
--------------------------------------------------------------------------------
/NetLimiter Crack/Form1.Designer.cs:
--------------------------------------------------------------------------------
1 | using System.Drawing;
2 | using System.Windows.Forms;
3 |
4 | namespace NetLimiter_Crack
5 | {
6 | partial class Form1
7 | {
8 | ///
9 | /// Erforderliche Designervariable.
10 | ///
11 | private System.ComponentModel.IContainer components = null;
12 |
13 | ///
14 | /// Verwendete Ressourcen bereinigen.
15 | ///
16 | /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.
17 | protected override void Dispose(bool disposing)
18 | {
19 | if (disposing && (components != null))
20 | {
21 | components.Dispose();
22 | }
23 | base.Dispose(disposing);
24 | }
25 |
26 | #region Vom Windows Form-Designer generierter Code
27 |
28 | ///
29 | /// Erforderliche Methode für die Designerunterstützung.
30 | /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
31 | ///
32 | private void InitializeComponent()
33 | {
34 | this.button1 = new System.Windows.Forms.Button();
35 | this.label1 = new System.Windows.Forms.Label();
36 | this.customProgressBar1 = new NetLimiter_Crack.CustomProgressBar();
37 | this.panel1 = new System.Windows.Forms.Panel();
38 | this.panel2 = new System.Windows.Forms.Panel();
39 | this.button2 = new System.Windows.Forms.Button();
40 | this.label2 = new System.Windows.Forms.Label();
41 | this.panel1.SuspendLayout();
42 | this.panel2.SuspendLayout();
43 | this.SuspendLayout();
44 | //
45 | // button1
46 | //
47 | this.button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32)))));
48 | this.button1.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
49 | this.button1.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
50 | this.button1.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
51 | this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
52 | this.button1.Font = new System.Drawing.Font("Consolas", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
53 | this.button1.ForeColor = System.Drawing.Color.White;
54 | this.button1.Location = new System.Drawing.Point(11, 16);
55 | this.button1.Name = "button1";
56 | this.button1.Size = new System.Drawing.Size(373, 30);
57 | this.button1.TabIndex = 0;
58 | this.button1.Text = "PATCH";
59 | this.button1.UseVisualStyleBackColor = false;
60 | this.button1.Click += new System.EventHandler(this.button1_Click);
61 | //
62 | // label1
63 | //
64 | this.label1.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
65 | this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
66 | this.label1.Location = new System.Drawing.Point(11, 82);
67 | this.label1.Name = "label1";
68 | this.label1.Size = new System.Drawing.Size(373, 20);
69 | this.label1.TabIndex = 3;
70 | this.label1.Text = "Status:";
71 | this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
72 | //
73 | // customProgressBar1
74 | //
75 | this.customProgressBar1.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
76 | this.customProgressBar1.ForeColor = System.Drawing.Color.Cyan;
77 | this.customProgressBar1.Location = new System.Drawing.Point(11, 54);
78 | this.customProgressBar1.Name = "customProgressBar1";
79 | this.customProgressBar1.Size = new System.Drawing.Size(373, 20);
80 | this.customProgressBar1.TabIndex = 4;
81 | this.customProgressBar1.Text = "customProgressBar1";
82 | this.customProgressBar1.Value = 0;
83 | //
84 | // panel1
85 | //
86 | this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
87 | this.panel1.Controls.Add(this.label1);
88 | this.panel1.Controls.Add(this.customProgressBar1);
89 | this.panel1.Controls.Add(this.button1);
90 | this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
91 | this.panel1.Location = new System.Drawing.Point(0, 27);
92 | this.panel1.Name = "panel1";
93 | this.panel1.Size = new System.Drawing.Size(397, 115);
94 | this.panel1.TabIndex = 5;
95 | this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Panel_MouseDown);
96 | this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Panel_MouseMove);
97 | //
98 | // panel2
99 | //
100 | this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(35)))), ((int)(((byte)(35)))), ((int)(((byte)(35)))));
101 | this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
102 | this.panel2.Controls.Add(this.button2);
103 | this.panel2.Controls.Add(this.label2);
104 | this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
105 | this.panel2.Location = new System.Drawing.Point(0, 0);
106 | this.panel2.Name = "panel2";
107 | this.panel2.Size = new System.Drawing.Size(397, 25);
108 | this.panel2.TabIndex = 6;
109 | //
110 | // button2
111 | //
112 | this.button2.BackColor = System.Drawing.Color.DarkRed;
113 | this.button2.FlatAppearance.BorderColor = System.Drawing.Color.Red;
114 | this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
115 | this.button2.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
116 | this.button2.ForeColor = System.Drawing.Color.Silver;
117 | this.button2.Location = new System.Drawing.Point(374, 1);
118 | this.button2.Name = "button2";
119 | this.button2.Size = new System.Drawing.Size(20, 20);
120 | this.button2.TabIndex = 0;
121 | this.button2.Text = "X";
122 | this.button2.UseVisualStyleBackColor = false;
123 | this.button2.Click += new System.EventHandler(this.button2_Click);
124 | //
125 | // label2
126 | //
127 | this.label2.BackColor = System.Drawing.Color.Transparent;
128 | this.label2.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
129 | this.label2.ForeColor = System.Drawing.SystemColors.ActiveBorder;
130 | this.label2.Location = new System.Drawing.Point(-1, 1);
131 | this.label2.Name = "label2";
132 | this.label2.Size = new System.Drawing.Size(397, 20);
133 | this.label2.TabIndex = 5;
134 | this.label2.Text = "Net Limiter Patcher v1.0 - Baseult";
135 | this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
136 | this.label2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Panel_MouseDown);
137 | this.label2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Panel_MouseMove);
138 | //
139 | // Form1
140 | //
141 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
142 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
143 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(16)))), ((int)(((byte)(16)))), ((int)(((byte)(16)))));
144 | this.ClientSize = new System.Drawing.Size(397, 142);
145 | this.Controls.Add(this.panel2);
146 | this.Controls.Add(this.panel1);
147 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
148 | this.Name = "Form1";
149 | this.Text = "Form1";
150 | this.panel1.ResumeLayout(false);
151 | this.panel2.ResumeLayout(false);
152 | this.ResumeLayout(false);
153 |
154 | }
155 |
156 | #endregion
157 |
158 | private Button button1;
159 | private Label label1;
160 | private CustomProgressBar customProgressBar1;
161 | private Panel panel1;
162 | private Panel panel2;
163 | private Button button2;
164 | private Label label2;
165 | }
166 | }
167 |
168 |
--------------------------------------------------------------------------------
/NetLimiter Crack/NetLimiter Crack.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Debug
7 | AnyCPU
8 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}
9 | WinExe
10 | NetLimiter_Crack
11 | NetLimiter Crack
12 | v4.8
13 | 512
14 | true
15 | true
16 |
17 |
18 |
19 |
20 | AnyCPU
21 | true
22 | full
23 | false
24 | bin\Debug\
25 | DEBUG;TRACE
26 | prompt
27 | 4
28 |
29 |
30 | AnyCPU
31 | pdbonly
32 | true
33 | bin\Release\
34 | TRACE
35 | prompt
36 | 4
37 |
38 |
39 | true
40 | bin\x64\Debug\
41 | DEBUG;TRACE
42 | full
43 | x64
44 | 7.3
45 | prompt
46 | true
47 |
48 |
49 | bin\x64\Release\
50 | TRACE
51 | true
52 | pdbonly
53 | x64
54 | 7.3
55 | prompt
56 | true
57 |
58 |
59 | manifest.manifest
60 |
61 |
62 |
63 | ..\packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll
64 |
65 |
66 | ..\packages\dnlib.4.4.0\lib\net45\dnlib.dll
67 |
68 |
69 | ..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll
70 | True
71 | True
72 |
73 |
74 |
75 | ..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll
76 | True
77 | True
78 |
79 |
80 |
81 | ..\packages\System.Console.4.3.0\lib\net46\System.Console.dll
82 | True
83 | True
84 |
85 |
86 |
87 | ..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll
88 |
89 |
90 | ..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll
91 | True
92 | True
93 |
94 |
95 | ..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll
96 | True
97 | True
98 |
99 |
100 | ..\packages\System.IO.4.3.0\lib\net462\System.IO.dll
101 | True
102 | True
103 |
104 |
105 | ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll
106 | True
107 | True
108 |
109 |
110 |
111 | ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll
112 | True
113 | True
114 |
115 |
116 | ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
117 | True
118 | True
119 |
120 |
121 | ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll
122 | True
123 | True
124 |
125 |
126 | ..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll
127 | True
128 | True
129 |
130 |
131 | ..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll
132 | True
133 | True
134 |
135 |
136 | ..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll
137 | True
138 | True
139 |
140 |
141 | ..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll
142 | True
143 | True
144 |
145 |
146 |
147 | ..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll
148 | True
149 | True
150 |
151 |
152 | ..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll
153 | True
154 | True
155 |
156 |
157 | ..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll
158 | True
159 | True
160 |
161 |
162 | ..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll
163 | True
164 | True
165 |
166 |
167 | ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll
168 | True
169 | True
170 |
171 |
172 | ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll
173 | True
174 | True
175 |
176 |
177 | ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll
178 | True
179 | True
180 |
181 |
182 | ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll
183 | True
184 | True
185 |
186 |
187 | ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll
188 | True
189 | True
190 |
191 |
192 | ..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll
193 | True
194 | True
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 | ..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll
206 | True
207 | True
208 |
209 |
210 |
211 |
212 | Form
213 |
214 |
215 | Form1.cs
216 |
217 |
218 |
219 |
220 | Form1.cs
221 |
222 |
223 | ResXFileCodeGenerator
224 | Resources.Designer.cs
225 | Designer
226 |
227 |
228 | True
229 | Resources.resx
230 |
231 |
232 |
233 |
234 | SettingsSingleFileGenerator
235 | Settings.Designer.cs
236 |
237 |
238 | True
239 | Settings.settings
240 | True
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 | Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".
251 |
252 |
253 |
254 |
255 |
256 |
257 |
--------------------------------------------------------------------------------
/NetLimiter Crack/Form1.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Forms;
10 | using System.Diagnostics;
11 | using Timer = System.Windows.Forms.Timer;
12 | using dnlib.DotNet;
13 | using dnlib.DotNet.Emit;
14 | using System.IO;
15 |
16 | namespace NetLimiter_Crack
17 | {
18 | public partial class Form1 : Form
19 | {
20 | private Point lastPoint;
21 |
22 | public Form1()
23 | {
24 | InitializeComponent();
25 | }
26 |
27 | protected override void OnMouseDown(MouseEventArgs e)
28 | {
29 | base.OnMouseDown(e);
30 | if (e.Button == MouseButtons.Left)
31 | {
32 | lastPoint = new Point(e.X, e.Y);
33 | }
34 | }
35 |
36 | protected override void OnMouseMove(MouseEventArgs e)
37 | {
38 | base.OnMouseMove(e);
39 | if (e.Button == MouseButtons.Left)
40 | {
41 | this.Left += e.X - lastPoint.X;
42 | this.Top += e.Y - lastPoint.Y;
43 | }
44 | }
45 |
46 | private void Panel_MouseDown(object sender, MouseEventArgs e)
47 | {
48 | lastPoint = new Point(e.X, e.Y); // Store the current mouse position
49 | }
50 |
51 | private void Panel_MouseMove(object sender, MouseEventArgs e)
52 | {
53 | if (e.Button == MouseButtons.Left)
54 | {
55 | this.Left += e.X - lastPoint.X;
56 | this.Top += e.Y - lastPoint.Y;
57 | }
58 | }
59 |
60 | private string FindNetLimiterDll()
61 | {
62 | try
63 | {
64 | string netLimiterFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Locktime Software", "NetLimiter");
65 | string dllPath = Path.Combine(netLimiterFolder, "NetLimiter.dll");
66 |
67 | if (File.Exists(dllPath))
68 | return dllPath;
69 | else
70 | return null;
71 | }
72 | catch (Exception ex)
73 | {
74 | MessageBox.Show($"An error occurred while finding NetLimiter.dll: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
75 | return null;
76 | }
77 | }
78 |
79 | private void ReplaceDll(string originalDllPath, ModuleDefMD modifiedModule)
80 | {
81 | try
82 | {
83 | string originalBackupPath = originalDllPath + ".bak";
84 | string modifiedDllPath = Path.ChangeExtension(originalDllPath, ".patched.dll");
85 |
86 | // Backup the original DLL
87 | // File.Replace(originalDllPath, originalBackupPath, null);
88 |
89 | // Save the modified assembly
90 | modifiedModule.Write(modifiedDllPath);
91 |
92 | // Replace the original DLL with the modified one
93 | File.Replace(modifiedDllPath, originalDllPath, null);
94 | }
95 | catch (Exception ex)
96 | {
97 | MessageBox.Show($"An error occurred while replacing DLL: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
98 | }
99 | }
100 |
101 | private async void button1_Click(object sender, EventArgs e)
102 | {
103 | button1.Enabled = false;
104 | button1.Text = "PATCHING...";
105 |
106 | try
107 | {
108 | await DisplayMessage("Stopping NLClientApp.exe...", 5);
109 |
110 | // Stop NLClientApp.exe
111 | await Task.Run(async () =>
112 | {
113 | try
114 | {
115 | var process = Process.Start(new ProcessStartInfo
116 | {
117 | FileName = "taskkill",
118 | Arguments = "/f /im NLClientApp.exe",
119 | UseShellExecute = false,
120 | CreateNoWindow = true
121 | });
122 |
123 | if (process != null)
124 | {
125 | process.WaitForExit();
126 | await DisplayMessage("NLClientApp.exe stopped successfully", 10);
127 | }
128 | else
129 | {
130 | throw new Exception("Failed to start taskkill process");
131 | }
132 | }
133 | catch (Exception ex)
134 | {
135 | throw new Exception("Error stopping NLClientApp.exe", ex);
136 | }
137 | });
138 |
139 | await DisplayMessage("Stopping nlsvc...", 15);
140 | // Stop nlsvc
141 | await Task.Run(async () =>
142 | {
143 | try
144 | {
145 | var process = Process.Start(new ProcessStartInfo
146 | {
147 | FileName = "net",
148 | Arguments = "stop nlsvc",
149 | UseShellExecute = false,
150 | CreateNoWindow = true
151 | });
152 |
153 | if (process != null)
154 | {
155 | process.WaitForExit();
156 | await DisplayMessage("Nlsvc stopped successfully", 20);
157 | }
158 | else
159 | {
160 | throw new Exception("Failed to start 'net' process to stop nlsvc");
161 | }
162 | }
163 | catch (Exception ex)
164 | {
165 | throw new Exception("Error stopping nlsvc", ex);
166 | }
167 | });
168 |
169 |
170 | await DisplayMessage("Searching NetLimiter.dll...", 25);
171 |
172 | string dllPath = FindNetLimiterDll();
173 | if (dllPath == null)
174 | {
175 | OpenFileDialog openFileDialog = new OpenFileDialog();
176 | openFileDialog.Title = "Select NetLimiter.dll";
177 | openFileDialog.Filter = "NetLimiter DLL|NetLimiter.dll";
178 |
179 | if (openFileDialog.ShowDialog() == DialogResult.OK)
180 | {
181 | dllPath = openFileDialog.FileName;
182 | }
183 | else
184 | {
185 | MessageBox.Show("NetLimiter.dll not found. Program will exit.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
186 | Environment.Exit(1);
187 | return;
188 | }
189 | }
190 |
191 | await DisplayMessage("NetLimiter.dll found", 30);
192 | await DisplayMessage("Opening NetLimiter.dll...", 40);
193 |
194 | // Load the assembly
195 | ModuleDefMD module = ModuleDefMD.Load(dllPath);
196 |
197 | await DisplayMessage("NetLimiter.dll loaded successfully", 50);
198 |
199 | // Navigate to the NLLicense constructor
200 | await DisplayMessage("Navigating to NLLicense constructor...", 60);
201 |
202 | TypeDef nLLicenseType = module.Find("NetLimiter.Service.NLLicense", true);
203 | MethodDef nLLicenseConstructor = nLLicenseType.FindMethod(".ctor");
204 |
205 | // Modify the IL to change this.IsRegistered = false; to true;
206 | await DisplayMessage("Modifying NLLicense constructor...", 70);
207 |
208 | foreach (Instruction instruction in nLLicenseConstructor.Body.Instructions)
209 | {
210 | if (instruction.OpCode == OpCodes.Ldc_I4_0) // Find the instruction loading false
211 | {
212 | instruction.OpCode = OpCodes.Ldc_I4_1; // Replace it with loading true
213 | break;
214 | }
215 | }
216 |
217 | await DisplayMessage("Modified NLLicense succesfully", 76);
218 |
219 | // Navigate to the InitLicense method
220 | await DisplayMessage("Navigating to InitLicense method...", 80);
221 |
222 | TypeDef nLServiceTempType = module.Find("NetLimiter.Service.NLServiceTemp", true);
223 | MethodDef initLicenseMethod = nLServiceTempType.FindMethod("InitLicense");
224 |
225 | // Modify the IL to change the expiration time
226 | await DisplayMessage("Modifying InitLicense succesfully", 90);
227 |
228 | foreach (Instruction instruction in initLicenseMethod.Body.Instructions)
229 | {
230 | if (instruction.OpCode == OpCodes.Ldc_R8 && (double)instruction.Operand == 28.0) // Find the instruction loading 28.0
231 | {
232 | instruction.Operand = 99999.0; // Change it to 99999.0
233 | break;
234 | }
235 | }
236 |
237 | await DisplayMessage("Modified InitLicense method", 93);
238 |
239 | // Save the modified assembly
240 | await DisplayMessage("Saving the modified assembly...", 94);
241 |
242 | module.Write(Path.ChangeExtension(dllPath, ".patched.dll"));
243 |
244 | await DisplayMessage("Modified assembly saved successfully", 95);
245 |
246 | await DisplayMessage("Replacing patched dll with the original...", 96);
247 |
248 | // Replace the original DLL with the modified one
249 | await Task.Run(() => ReplaceDll(dllPath, module));
250 |
251 | await DisplayMessage("Replaced patched dll succesfully", 97);
252 |
253 | await DisplayMessage("Starting nlsvc service...", 98);
254 |
255 | // Start nlsvc
256 | await Task.Run(async () =>
257 | {
258 | try
259 | {
260 | var process = Process.Start(new ProcessStartInfo
261 | {
262 | FileName = "net",
263 | Arguments = "start nlsvc",
264 | UseShellExecute = false,
265 | CreateNoWindow = true
266 | });
267 |
268 | if (process != null)
269 | {
270 | process.WaitForExit();
271 | await DisplayMessage("Nlsvc started successfully", 99);
272 | }
273 | else
274 | {
275 | throw new Exception("Failed to start 'net' process to start nlsvc");
276 | }
277 | }
278 | catch (Exception ex)
279 | {
280 | throw new Exception("Error starting nlsvc", ex);
281 | }
282 | });
283 |
284 | // Show final message
285 | await DisplayMessage("Net Limiter Succesfully Cracked!", 100);
286 | label1.Text = "You can close this program now!";
287 | }
288 | catch (Exception ex)
289 | {
290 | MessageBox.Show($"An error occurred: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
291 | }
292 | }
293 |
294 | // Display messages with delay and update progress bar
295 | private async Task DisplayMessage(string message, int progress)
296 | {
297 | if (label1.InvokeRequired)
298 | {
299 | label1.BeginInvoke((Action)(() => label1.Text = ""));
300 | }
301 | else
302 | {
303 | label1.Text = "";
304 | }
305 |
306 | Progressbar(progress);
307 |
308 | foreach (char c in message)
309 | {
310 | if (label1.InvokeRequired)
311 | {
312 | label1.BeginInvoke((Action)(() => label1.Text += c));
313 | }
314 | else
315 | {
316 | label1.Text += c;
317 | }
318 | await Task.Delay(25); // Adjust delay for typing animation
319 | }
320 |
321 | await Task.Delay(500); // Delay before clearing message
322 |
323 | if (label1.InvokeRequired)
324 | {
325 | label1.BeginInvoke((Action)(() => label1.Text = ""));
326 | }
327 | else
328 | {
329 | label1.Text = "";
330 | }
331 | }
332 |
333 | int previousprogress = 0;
334 | private async Task Progressbar(int progress)
335 | {
336 |
337 | customProgressBar1.Value = progress;
338 |
339 | previousprogress = progress;
340 | }
341 |
342 | private void Form1_Load(object sender, EventArgs e)
343 | {
344 | customProgressBar1.Value = 0;
345 | }
346 |
347 | private void button2_Click(object sender, EventArgs e)
348 | {
349 | this.Close();
350 | }
351 | }
352 |
353 | public class CustomProgressBar : Control
354 | {
355 | private bool started = false;
356 | private int _value = 0;
357 | private int _targetValue = 0;
358 | private int _animationIncrement = 1;
359 | private Timer loadingAnimationTimer;
360 | private List particles = new List();
361 | private Random random = new Random();
362 | private int highlightedBlockIndex = 0; // Index of the currently highlighted block
363 | private Timer waveAnimationTimer;
364 |
365 | public int Value
366 | {
367 | get { return _value; }
368 | set
369 | {
370 | if (value == 0 && !started)
371 | {
372 | started = true;
373 | GenerateParticles(50);
374 | loadingAnimationTimer.Start();
375 | waveAnimationTimer.Start(); // Start the wave animation when the progress bar starts
376 | }
377 |
378 | if (value < 0)
379 | _targetValue = 0;
380 | else if (value > 100)
381 | _targetValue = 100;
382 | else
383 | _targetValue = value;
384 |
385 | if (_targetValue != _value)
386 | {
387 | if (_animationIncrement == 0)
388 | _animationIncrement = Math.Sign(_targetValue - _value);
389 | loadingAnimationTimer.Start();
390 | }
391 | }
392 | }
393 |
394 | public CustomProgressBar()
395 | {
396 | SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
397 | InitializeLoadingAnimationTimer();
398 | InitializeWaveAnimationTimer();
399 | }
400 |
401 | private void InitializeLoadingAnimationTimer()
402 | {
403 | loadingAnimationTimer = new Timer();
404 | loadingAnimationTimer.Interval = 2; // Adjust speed of animation here
405 | loadingAnimationTimer.Tick += LoadingAnimationTimer_Tick;
406 | }
407 |
408 | private void LoadingAnimationTimer_Tick(object sender, EventArgs e)
409 | {
410 | GenerateParticles(1);
411 |
412 | if (_value != _targetValue)
413 | {
414 | _value += _animationIncrement;
415 | if ((_animationIncrement > 0 && _value > _targetValue) || (_animationIncrement < 0 && _value < _targetValue))
416 | _value = _targetValue;
417 |
418 | UpdateParticles();
419 |
420 | Invalidate();
421 | }
422 | else
423 | {
424 | UpdateParticles(); // Update particles even when idle
425 | Invalidate();
426 | }
427 | }
428 |
429 | private void InitializeWaveAnimationTimer()
430 | {
431 | waveAnimationTimer = new Timer();
432 | waveAnimationTimer.Interval = 100; // Adjust speed of wave animation here
433 | waveAnimationTimer.Tick += WaveAnimationTimer_Tick;
434 | }
435 |
436 | private void WaveAnimationTimer_Tick(object sender, EventArgs e)
437 | {
438 | highlightedBlockIndex = (highlightedBlockIndex + 1) % 20; // Update the highlighted block index
439 | Invalidate();
440 | }
441 |
442 | private void GenerateParticles(int number)
443 | {
444 | // Generate particles at the edge where the current value of the progress bar is
445 | float progressWidth = ((float)_value / 100) * ClientRectangle.Width;
446 | if (progressWidth < ClientRectangle.Width)
447 | {
448 | int numParticles = random.Next(number, number); // Adjust number of particles
449 | for (int i = 0; i < numParticles; i++)
450 | {
451 | float x = progressWidth - 1 + random.Next(3); // Randomize X coordinate near the edge
452 | float y = random.Next(ClientRectangle.Height); // Randomize Y coordinate
453 | float speedX = (float)random.NextDouble() * 2 - 1; // Adjust speed
454 | float speedY = (float)random.NextDouble() * 2 - 1; // Adjust speed
455 | Color color = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256)); // Random color
456 | particles.Add(new Particle(x, y, speedX, speedY, color));
457 | }
458 | }
459 | }
460 |
461 | private void UpdateParticles()
462 | {
463 | for (int i = particles.Count - 1; i >= 0; i--)
464 | {
465 | Particle particle = particles[i];
466 | particle.Update();
467 | if (!ClientRectangle.Contains(new Point((int)particle.X, (int)particle.Y)))
468 | {
469 | particles.RemoveAt(i);
470 | }
471 | }
472 | }
473 |
474 | protected override void OnPaint(PaintEventArgs e)
475 | {
476 | base.OnPaint(e);
477 |
478 | // Draw background
479 | e.Graphics.Clear(Color.Black);
480 |
481 | // Draw border
482 | using (Pen borderPen = new Pen(Color.FromArgb(45, 45, 45), 2))
483 | {
484 | e.Graphics.DrawRectangle(borderPen, ClientRectangle);
485 | }
486 |
487 | // Draw blocks
488 | int blockCount = 20; // Number of blocks
489 | float blockWidth = (ClientRectangle.Width - 4) / (float)blockCount;
490 | for (int i = 0; i < blockCount; i++)
491 | {
492 | float blockX = 2 + i * (blockWidth + 1); // Adjusted to include a gap between blocks
493 | float blockProgress = ((float)_value / 100) * ClientRectangle.Width;
494 | if (blockX < blockProgress)
495 | {
496 | float blockWidthAdjusted = Math.Min(blockWidth, blockProgress - blockX);
497 | RectangleF blockRect = new RectangleF(blockX, 2, blockWidthAdjusted, ClientRectangle.Height - 4);
498 |
499 | // Calculate color interpolation based on progress
500 | float progress = i / (float)blockCount;
501 | int red = (int)(255 * (1 - progress));
502 | int green = (int)(255 * progress);
503 | Color blockColor = Color.FromArgb(red, green, 0);
504 |
505 | if (i == highlightedBlockIndex && _value != 100) // Highlight the current block with a lighter color
506 | {
507 | blockColor = Color.FromArgb(Math.Min(red + 50, 255), Math.Min(green + 50, 255), 0);
508 | // Increase the size of the highlighted block
509 | blockRect.Inflate(1, 1);
510 | }
511 |
512 | using (SolidBrush brush = new SolidBrush(blockColor))
513 | {
514 | e.Graphics.FillRectangle(brush, blockRect);
515 | }
516 | }
517 | }
518 |
519 | // Draw particles
520 | foreach (Particle particle in particles)
521 | {
522 | e.Graphics.FillEllipse(new SolidBrush(particle.Color), particle.X, particle.Y, 2, 2); // Adjust size of particles
523 | }
524 |
525 | // Draw text
526 | using (Font font = new Font("Consolas", 10))
527 | using (SolidBrush brush = new SolidBrush(Color.Cyan))
528 | {
529 | string text = $"{_value}%";
530 | SizeF textSize = e.Graphics.MeasureString(text, font);
531 | PointF textLocation = new PointF((ClientRectangle.Width - textSize.Width) / 2, (ClientRectangle.Height - textSize.Height) / 2);
532 | e.Graphics.DrawString(text, font, brush, textLocation);
533 | }
534 | }
535 |
536 | private class Particle
537 | {
538 | public float X { get; set; }
539 | public float Y { get; set; }
540 | public float SpeedX { get; set; }
541 | public float SpeedY { get; set; }
542 | public Color Color { get; set; }
543 |
544 | public Particle(float x, float y, float speedX, float speedY, Color color)
545 | {
546 | X = x;
547 | Y = y;
548 | SpeedX = speedX;
549 | SpeedY = speedY;
550 | Color = color;
551 | }
552 |
553 | public void Update()
554 | {
555 | X += SpeedX;
556 | Y += SpeedY;
557 |
558 | // Apply force towards the right
559 | SpeedX += 0.05f;
560 | }
561 | }
562 | }
563 | }
564 |
--------------------------------------------------------------------------------