From 1c1c072a0f5ff5607dfb39bf4bd02c033f771a8e Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 20 Nov 2019 13:49:47 +0200 Subject: [PATCH] Minor design/functionality changes in "About" window - Removed app logo; - Able to get (copied to clipboard) debug info by clicking to app version text; - Left only the main information about the app; --- Crypto Notepad/AboutFrom.Designer.cs | 202 ++--- Crypto Notepad/AboutFrom.cs | 155 +++- Crypto Notepad/AboutFrom.resx | 284 +----- Crypto Notepad/Crypto Notepad.csproj | 4 + Crypto Notepad/ExRichTextBox.cs | 12 +- Crypto Notepad/HideCaretRichTextBox.cs | 18 + Crypto Notepad/OSVersionInfoClass.cs | 1089 ++++++++++++++++++++++++ 7 files changed, 1309 insertions(+), 455 deletions(-) create mode 100644 Crypto Notepad/HideCaretRichTextBox.cs create mode 100644 Crypto Notepad/OSVersionInfoClass.cs diff --git a/Crypto Notepad/AboutFrom.Designer.cs b/Crypto Notepad/AboutFrom.Designer.cs index 0e4b7db..c174bb2 100644 --- a/Crypto Notepad/AboutFrom.Designer.cs +++ b/Crypto Notepad/AboutFrom.Designer.cs @@ -28,171 +28,74 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutFrom)); this.appVersionLabel = new System.Windows.Forms.Label(); - this.appLogoPictureBox = new System.Windows.Forms.PictureBox(); - this.thirdPartyDevLabel = new System.Windows.Forms.Label(); - this.appInfoLabel1 = new System.Windows.Forms.LinkLabel(); - this.appInfoLabel2 = new System.Windows.Forms.LinkLabel(); - this.appInfoLabel3 = new System.Windows.Forms.LinkLabel(); - this.contributorsLabel = new System.Windows.Forms.Label(); - this.contributorsRichTextBox = new Crypto_Notepad.ExRichTextBox(); - this.thirdPartyDevRichTextBox = new Crypto_Notepad.ExRichTextBox(); - ((System.ComponentModel.ISupportInitialize)(this.appLogoPictureBox)).BeginInit(); + this.randomColorTimer = new System.Windows.Forms.Timer(this.components); + this.copyToClipboardLabel = new System.Windows.Forms.Label(); + this.appInfoRichTextBox = new Crypto_Notepad.HideCaretRichTextBox(); this.SuspendLayout(); // // appVersionLabel // this.appVersionLabel.AutoSize = true; this.appVersionLabel.Cursor = System.Windows.Forms.Cursors.Hand; - this.appVersionLabel.Font = new System.Drawing.Font("Consolas", 14.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.appVersionLabel.ForeColor = System.Drawing.SystemColors.Highlight; - this.appVersionLabel.Location = new System.Drawing.Point(5, 9); + this.appVersionLabel.Font = new System.Drawing.Font("Consolas", 14.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.appVersionLabel.ForeColor = System.Drawing.SystemColors.HotTrack; + this.appVersionLabel.Location = new System.Drawing.Point(4, 10); this.appVersionLabel.Name = "appVersionLabel"; - this.appVersionLabel.Size = new System.Drawing.Size(220, 22); - this.appVersionLabel.TabIndex = 0; - this.appVersionLabel.Text = "Crypto Notepad v1.0.0"; - this.appVersionLabel.Click += new System.EventHandler(this.AppVersionLabel_Click); + this.appVersionLabel.Size = new System.Drawing.Size(210, 22); + this.appVersionLabel.TabIndex = 1; + this.appVersionLabel.Text = "Crypto Notepad 1.0.0"; + this.appVersionLabel.MouseClick += new System.Windows.Forms.MouseEventHandler(this.appVersionLabel_MouseClick); // - // appLogoPictureBox + // randomColorTimer // - this.appLogoPictureBox.Cursor = System.Windows.Forms.Cursors.Hand; - this.appLogoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("appLogoPictureBox.Image"))); - this.appLogoPictureBox.Location = new System.Drawing.Point(341, 2); - this.appLogoPictureBox.Name = "appLogoPictureBox"; - this.appLogoPictureBox.Size = new System.Drawing.Size(77, 68); - this.appLogoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.appLogoPictureBox.TabIndex = 1; - this.appLogoPictureBox.TabStop = false; - this.appLogoPictureBox.Click += new System.EventHandler(this.AppLogoPictureBox_Click); + this.randomColorTimer.Interval = 200; + this.randomColorTimer.Tick += new System.EventHandler(this.RandomColorTimer_Tick); // - // thirdPartyDevLabel + // copyToClipboardLabel // - this.thirdPartyDevLabel.AutoSize = true; - this.thirdPartyDevLabel.Font = new System.Drawing.Font("Consolas", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.thirdPartyDevLabel.ForeColor = System.Drawing.SystemColors.Highlight; - this.thirdPartyDevLabel.Location = new System.Drawing.Point(5, 173); - this.thirdPartyDevLabel.Name = "thirdPartyDevLabel"; - this.thirdPartyDevLabel.Size = new System.Drawing.Size(200, 18); - this.thirdPartyDevLabel.TabIndex = 4; - this.thirdPartyDevLabel.Text = "Third-party developments"; + this.copyToClipboardLabel.AutoSize = true; + this.copyToClipboardLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.copyToClipboardLabel.Font = new System.Drawing.Font("Segoe UI Semibold", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.copyToClipboardLabel.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.copyToClipboardLabel.Location = new System.Drawing.Point(214, 15); + this.copyToClipboardLabel.Name = "copyToClipboardLabel"; + this.copyToClipboardLabel.Size = new System.Drawing.Size(143, 14); + this.copyToClipboardLabel.TabIndex = 3; + this.copyToClipboardLabel.Text = "debug info was copied to clipboard"; + this.copyToClipboardLabel.Visible = false; // - // appInfoLabel1 + // appInfoRichTextBox // - this.appInfoLabel1.ActiveLinkColor = System.Drawing.Color.White; - this.appInfoLabel1.AutoSize = true; - this.appInfoLabel1.DisabledLinkColor = System.Drawing.Color.White; - this.appInfoLabel1.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.appInfoLabel1.ForeColor = System.Drawing.SystemColors.Control; - this.appInfoLabel1.LinkArea = new System.Windows.Forms.LinkArea(38, 8); - this.appInfoLabel1.LinkColor = System.Drawing.Color.White; - this.appInfoLabel1.Location = new System.Drawing.Point(8, 38); - this.appInfoLabel1.Name = "appInfoLabel1"; - this.appInfoLabel1.Size = new System.Drawing.Size(317, 19); - this.appInfoLabel1.TabIndex = 9; - this.appInfoLabel1.TabStop = true; - this.appInfoLabel1.Text = "This is an open-source app created by Sigmanor"; - this.appInfoLabel1.UseCompatibleTextRendering = true; - this.appInfoLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.AppInfoLabel1_LinkClicked); - // - // appInfoLabel2 - // - this.appInfoLabel2.ActiveLinkColor = System.Drawing.Color.White; - this.appInfoLabel2.AutoSize = true; - this.appInfoLabel2.DisabledLinkColor = System.Drawing.Color.White; - this.appInfoLabel2.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.appInfoLabel2.ForeColor = System.Drawing.SystemColors.Control; - this.appInfoLabel2.LinkArea = new System.Windows.Forms.LinkArea(18, 3); - this.appInfoLabel2.LinkColor = System.Drawing.Color.White; - this.appInfoLabel2.Location = new System.Drawing.Point(8, 57); - this.appInfoLabel2.Name = "appInfoLabel2"; - this.appInfoLabel2.Size = new System.Drawing.Size(202, 19); - this.appInfoLabel2.TabIndex = 9; - this.appInfoLabel2.TabStop = true; - this.appInfoLabel2.Text = "Distributed under MIT license"; - this.appInfoLabel2.UseCompatibleTextRendering = true; - this.appInfoLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.AppInfoLabel1_LinkClicked); - // - // appInfoLabel3 - // - this.appInfoLabel3.ActiveLinkColor = System.Drawing.Color.White; - this.appInfoLabel3.AutoSize = true; - this.appInfoLabel3.DisabledLinkColor = System.Drawing.Color.White; - this.appInfoLabel3.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.appInfoLabel3.ForeColor = System.Drawing.SystemColors.Control; - this.appInfoLabel3.LinkArea = new System.Windows.Forms.LinkArea(52, 6); - this.appInfoLabel3.LinkColor = System.Drawing.Color.White; - this.appInfoLabel3.Location = new System.Drawing.Point(8, 75); - this.appInfoLabel3.Name = "appInfoLabel3"; - this.appInfoLabel3.Size = new System.Drawing.Size(399, 19); - this.appInfoLabel3.TabIndex = 9; - this.appInfoLabel3.TabStop = true; - this.appInfoLabel3.Text = "The source code, issues and documentation posted on GitHub"; - this.appInfoLabel3.UseCompatibleTextRendering = true; - this.appInfoLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.AppInfoLabel3_LinkClicked); - // - // contributorsLabel - // - this.contributorsLabel.AutoSize = true; - this.contributorsLabel.Font = new System.Drawing.Font("Consolas", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.contributorsLabel.ForeColor = System.Drawing.SystemColors.Highlight; - this.contributorsLabel.Location = new System.Drawing.Point(5, 105); - this.contributorsLabel.Name = "contributorsLabel"; - this.contributorsLabel.Size = new System.Drawing.Size(168, 18); - this.contributorsLabel.TabIndex = 4; - this.contributorsLabel.Text = "Contributors/testers"; - // - // contributorsRichTextBox - // - this.contributorsRichTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(50))))); - this.contributorsRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.contributorsRichTextBox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.contributorsRichTextBox.ForeColor = System.Drawing.SystemColors.Control; - this.contributorsRichTextBox.Location = new System.Drawing.Point(-1, 126); - this.contributorsRichTextBox.Name = "contributorsRichTextBox"; - this.contributorsRichTextBox.ReadOnly = true; - this.contributorsRichTextBox.RightMargin = 700; - this.contributorsRichTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None; - this.contributorsRichTextBox.ShowSelectionMargin = true; - this.contributorsRichTextBox.Size = new System.Drawing.Size(414, 40); - this.contributorsRichTextBox.TabIndex = 11; - this.contributorsRichTextBox.Text = "h5p9sl https://github.com/h5p9sl\nsmaragdus https://github.com/smaragdus"; - this.contributorsRichTextBox.WordWrap = false; - this.contributorsRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.ContributorsRichTextBox_LinkClicked); - // - // thirdPartyDevRichTextBox - // - this.thirdPartyDevRichTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(50))))); - this.thirdPartyDevRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.thirdPartyDevRichTextBox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.thirdPartyDevRichTextBox.ForeColor = System.Drawing.SystemColors.Control; - this.thirdPartyDevRichTextBox.Location = new System.Drawing.Point(-1, 194); - this.thirdPartyDevRichTextBox.Name = "thirdPartyDevRichTextBox"; - this.thirdPartyDevRichTextBox.ReadOnly = true; - this.thirdPartyDevRichTextBox.RightMargin = 700; - this.thirdPartyDevRichTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedHorizontal; - this.thirdPartyDevRichTextBox.ShowSelectionMargin = true; - this.thirdPartyDevRichTextBox.Size = new System.Drawing.Size(414, 141); - this.thirdPartyDevRichTextBox.TabIndex = 10; - this.thirdPartyDevRichTextBox.Text = resources.GetString("thirdPartyDevRichTextBox.Text"); - this.thirdPartyDevRichTextBox.WordWrap = false; - this.thirdPartyDevRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.ThirdPartyDevRichTextBox_LinkClicked); + this.appInfoRichTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(50))))); + this.appInfoRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.appInfoRichTextBox.Cursor = System.Windows.Forms.Cursors.IBeam; + this.appInfoRichTextBox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.appInfoRichTextBox.ForeColor = System.Drawing.SystemColors.ButtonFace; + this.appInfoRichTextBox.Location = new System.Drawing.Point(0, 44); + this.appInfoRichTextBox.Name = "appInfoRichTextBox"; + this.appInfoRichTextBox.ReadOnly = true; + this.appInfoRichTextBox.RightMargin = 700; + this.appInfoRichTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None; + this.appInfoRichTextBox.ShowSelectionMargin = true; + this.appInfoRichTextBox.Size = new System.Drawing.Size(439, 303); + this.appInfoRichTextBox.TabIndex = 2; + this.appInfoRichTextBox.TabStop = false; + this.appInfoRichTextBox.Text = resources.GetString("appInfoRichTextBox.Text"); + this.appInfoRichTextBox.WordWrap = false; + this.appInfoRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.AppInfoRichTextBox_LinkClicked); // // AboutFrom // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(50))))); - this.ClientSize = new System.Drawing.Size(411, 335); - this.Controls.Add(this.contributorsRichTextBox); - this.Controls.Add(this.thirdPartyDevRichTextBox); - this.Controls.Add(this.appInfoLabel3); - this.Controls.Add(this.appInfoLabel2); - this.Controls.Add(this.appInfoLabel1); - this.Controls.Add(this.appLogoPictureBox); + this.ClientSize = new System.Drawing.Size(435, 323); + this.Controls.Add(this.copyToClipboardLabel); + this.Controls.Add(this.appInfoRichTextBox); this.Controls.Add(this.appVersionLabel); - this.Controls.Add(this.contributorsLabel); - this.Controls.Add(this.thirdPartyDevLabel); this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); @@ -203,8 +106,6 @@ private void InitializeComponent() this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "About"; this.Load += new System.EventHandler(this.AboutWindow_Load); - this.Click += new System.EventHandler(this.AboutFrom_Click); - ((System.ComponentModel.ISupportInitialize)(this.appLogoPictureBox)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -213,13 +114,8 @@ private void InitializeComponent() #endregion private System.Windows.Forms.Label appVersionLabel; - private System.Windows.Forms.PictureBox appLogoPictureBox; - private System.Windows.Forms.Label thirdPartyDevLabel; - private System.Windows.Forms.LinkLabel appInfoLabel1; - private System.Windows.Forms.LinkLabel appInfoLabel2; - private System.Windows.Forms.LinkLabel appInfoLabel3; - private System.Windows.Forms.Label contributorsLabel; - private ExRichTextBox thirdPartyDevRichTextBox; - private ExRichTextBox contributorsRichTextBox; + private HideCaretRichTextBox appInfoRichTextBox; + private System.Windows.Forms.Timer randomColorTimer; + private System.Windows.Forms.Label copyToClipboardLabel; } } \ No newline at end of file diff --git a/Crypto Notepad/AboutFrom.cs b/Crypto Notepad/AboutFrom.cs index 08edd2a..307866e 100644 --- a/Crypto Notepad/AboutFrom.cs +++ b/Crypto Notepad/AboutFrom.cs @@ -1,29 +1,115 @@ -using System; +using JCS; +using Microsoft.Win32; +using System; using System.Diagnostics; +using System.Drawing; +using System.Text; +using System.Threading.Tasks; using System.Windows.Forms; namespace Crypto_Notepad { public partial class AboutFrom : Form { + private Random rnd = new Random(); public AboutFrom() { InitializeComponent(); } + private static string CheckFor45DotVersion(int releaseKey) + { + if (releaseKey >= 461808) + { + return "4.7.2 or later"; + } + if (releaseKey >= 461308) + { + return "4.7.1 or later"; + } + if (releaseKey >= 460798) + { + return "4.7 or later"; + } + if (releaseKey >= 394802) + { + return "4.6.2 or later"; + } + if (releaseKey >= 394254) + { + return "4.6.1 or later"; + } + if (releaseKey >= 393295) + { + return "4.6 or later"; + } + if (releaseKey >= 393273) + { + return "4.6 RC or later"; + } + if ((releaseKey >= 379893)) + { + return "4.5.2 or later"; + } + if ((releaseKey >= 378675)) + { + return "4.5.1 or later"; + } + if ((releaseKey >= 378389)) + { + return "4.5 or later"; + } + return "No 4.5 or later version detected"; + } - /*Form Events*/ + private async void GetDebugInfo() + { + copyToClipboardLabel.Visible = true; + Version vrs = new Version(Application.ProductVersion); + StringBuilder sb = new StringBuilder(string.Empty); + + sb.AppendLine("App Information"); + sb.AppendLine("----------------------------"); + sb.AppendLine("Version = " + vrs); + + sb.AppendLine(); + sb.AppendLine("Operation System Information"); + sb.AppendLine("----------------------------"); + sb.AppendLine(string.Format("Name = {0}", OSVersionInfo.Name)); + if (!string.IsNullOrEmpty(OSVersionInfo.Edition)) + sb.AppendLine(string.Format("Edition = {0}", OSVersionInfo.Edition)); + else + sb.AppendLine(string.Format("Edition = None")); + if (!string.IsNullOrEmpty(OSVersionInfo.ServicePack)) + sb.AppendLine(string.Format("Service Pack = {0}", OSVersionInfo.ServicePack)); + else + sb.AppendLine("Service Pack = None"); + sb.AppendLine(string.Format("Version = {0}", OSVersionInfo.VersionString)); + sb.AppendLine(string.Format("OSBits = {0}", OSVersionInfo.OSBits)); + sb.AppendLine(string.Format("ProcessorBits = {0}", OSVersionInfo.ProcessorBits)); + sb.AppendLine(string.Format("ProgramBits = {0}", OSVersionInfo.ProgramBits)); + + sb.AppendLine(); + sb.AppendLine(".Net Framework Information"); + sb.AppendLine("----------------------------"); + using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\")) + { + int releaseKey = Convert.ToInt32(ndpKey.GetValue("Release")); + sb.AppendLine("Version = " + CheckFor45DotVersion(releaseKey)); + } + Clipboard.SetText(sb.ToString()); + await Task.Delay(3000); + copyToClipboardLabel.Visible = false; + } + + + /*Event Handlers*/ private void AboutWindow_Load(object sender, EventArgs e) { Version vrs = new Version(Application.ProductVersion); appVersionLabel.Text = string.Format(PublicVar.appName + " {0}.{1}.{2}", vrs.Major, vrs.Minor, vrs.Build); } - private void AboutFrom_Click(object sender, EventArgs e) - { - appLogoPictureBox.Focus(); - } - protected override bool ProcessDialogKey(Keys keyData) { if (ModifierKeys == Keys.None && keyData == Keys.Escape) @@ -33,48 +119,41 @@ protected override bool ProcessDialogKey(Keys keyData) } return base.ProcessDialogKey(keyData); } - /*Form Events*/ - - /*Main Information*/ - private void AppVersionLabel_Click(object sender, EventArgs e) + private void RandomColorTimer_Tick(object sender, EventArgs e) { - Process.Start("https://github.com/Crypto-Notepad/Crypto-Notepad/wiki/Release-Notes"); + Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); + appVersionLabel.ForeColor = randomColor; } - - private void AppInfoLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Process.Start("https://sigmanor.github.io/"); - } - - private void AppInfoLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Process.Start("https://github.com/Crypto-Notepad/Crypto-Notepad/blob/master/LICENSE"); - } - - private void AppInfoLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Process.Start("https://github.com/Crypto-Notepad/Crypto-Notepad"); - } - - private void AppLogoPictureBox_Click(object sender, EventArgs e) - { - Process.Start("https://crypto-notepad.github.io/"); - } - /*Main Information*/ + /*Event Handlers*/ - /*Perform open links*/ - private void ThirdPartyDevRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e) + /*Main*/ + private void AppInfoRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e) { Process.Start(e.LinkText); } - private void ContributorsRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e) + private void appVersionLabel_MouseClick(object sender, MouseEventArgs e) { - Process.Start(e.LinkText); + if (e.Button == MouseButtons.Left) + { + GetDebugInfo(); + } + + if (e.Button == MouseButtons.Right) + { + if (randomColorTimer.Enabled) + { + randomColorTimer.Stop(); + } + else + { + randomColorTimer.Start(); + } + } } - /*Perform open links*/ + /*Main*/ } } diff --git a/Crypto Notepad/AboutFrom.resx b/Crypto Notepad/AboutFrom.resx index 61a7c0a..3170420 100644 --- a/Crypto Notepad/AboutFrom.resx +++ b/Crypto Notepad/AboutFrom.resx @@ -117,270 +117,36 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH - DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp - bGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZE - sRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTs - AIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4 - JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR - 3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQd - li7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtF - ehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGX - wzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNF - hImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH55 - 4SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJ - VgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB - 5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyC - qbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiE - j6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I - 1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9 - rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhG - fDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFp - B+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJ - yeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJC - YVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQln - yfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48v - vacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0Cvp - vfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15L - Wytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AA - bWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0z - llmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHW - ztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5s - xybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6 - eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPw - YyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmR - XVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNm - WS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wl - xqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2 - dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8 - V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33za - Eb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2v - Tqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqb - PhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/ - 0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h - /HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavr - XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS - fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+ - tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/ - 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEwAACxMBAJqcGAAALoFJREFUeF7t3X3o7Vd1 - 53FBEAIFoSAUAoLgXwUf8nSdTOzMoNQRUiyVDmFSBgYEO/EpNU18aDSJSWgkbaY6qTJ2Ok2JWELFpo5W - +zBRR8fU0IzWmNZMklGTjq0mmsbEufGa3/l9Z6277k3vPfdz9v2e81tnf8/e3/eCF5XV3LPO75y9v9/P - 73E/axgGAAAwM7IJAAD6JpsAAKBvsgkAAPommwAAoG+yCQAA+iabAACgb7IJAAD6JpsAAKBvsgkAAPom - mwAAoG+yCQAA+iabAACgb7IJAAD6JpsAAKBvsgkAAPommwAAoG+yCQAA+iabAACgb7IJAAD6JpsAAKBv - sgkAAPommwAAoG+yCQAA+iabAACgb7IJAAD6JpsAAKBvsgkAAPommwAAoG+yCQAA+iabAACgb7IJAAD6 - JpsAAKBvsgkAAPommwAAoG+yCQAA+iabAACgb7IJAAD6JpsI/+w9B/IC8+/MB80d5m7zDTMAmKfX3zLc - /p8/OzzPPCuDum4BY8kmgm3Ydf2UucL4zV5eAADM1+W3DZ+1G/ed5jkn3sg3pa5bwFiyiWAbdiy/8d9s - jhi58QHgWAAYzEdOvJFvSl23gLFkE8E27BhvMoeN3PAAcNwJAcBdefxGvil13QLGkk0E27AlP2E+buRG - B4BlSwHAXeQ38k2p6xYwlmwi2IZd5ScN3+cHsBYRAA6bQ0be4E9HXbeAsWQTwTas8lzzFSM3OACsIgKA - e8ScaeRNvkRdt4CxZBPBNqzyR0ZubgAoWREA3D3muUbe6FdR1y1gLNlEsA277DIjNzYAnE4hALiPm2cb - ebNX1HULGEs2EWzDnuhM86SRGxsATuc0AcDdbOTNXlHXLWAs2USwDXuiW30DA8CmRgQAd4mRN/xl6roF - jCWbCLZhj3uh2fMNDACbGhkA9szPGnnTP5G6bgFjySaCbdjj/K/8yQ0NAGONDADucfMiI2/8x6nrFjCW - bCLYhnVnmO8f38AAsKk1AoB7wBQPDlLXLWAs2USwDesuPHEDA8Cm1gwArnhwkLpuAWPJJoJtWOfH+crN - DADr2CAAuJUHB6nrFjCWbCLYhnX3nbiBAWBTGwYAJw8OUtctYCzZRLAN63/2V25kAFjXAQKAO+XgIHXd - AsaSTQTbsOcvb2AA2NQBA8ApBwep6xYwlmwi2Ia9eHkDA8CmDhgAnB8c9HxDAMCBySaCbdgrlzcwAGwq - IQC4Zw4OUtctYCzZRLANe8PyBgaATSUFAPdJ82x13QLGkk0E27D8CiCANIkBwN2srlvAWLKJYBuWAAAg - TXIAcKMPDpordW1HkE0E27AEAABpthAARh8cNFfq2o4gmwi2YQkAANJsIQC4UQcHzZW6tiPIJoJtWAIA - gDRbCgDutAcHzZW6tiPIJoJtWAIAgDRbDACueHDQXKlrO4JsItiGJQAASLPlAOBWHhw0V+rajiCbCLZh - CQAA0lQIAO4qI2+Gc6Su7QiyiWAblgAAIE2lAOAuNvKGODfq2o4gmwi2YQkAANJUDACnHBw0V+rajiCb - CLZhCQAA0lQMAO6kg4PmSl3bEWQTwTYsAQBAmsoBwD1zcNBcqWs7gmwi2IYlAABIM0EAcEcPDjLyBtk7 - dW1HkE0E27AEAABpJgoA7mYjb5C9U9d2BNlEsA1LAACQZsIA4GZ5cJC6tiPIJoJtWAIAgDQTB4BZHhyk - ru0IsolgG5YAACDNxAHAze7gIHVtR5BNBNuwBAAAaXYgALhvmNkcHKSu7QiyiWAblgAAIM2OBAB3l5nF - wUHq2o4gmwi2YQkAANLsUABwszg4SF3bEWQTwTYsAQBAmh0LAK77g4PUtR1BNhFswxIAAKTZwQDguj44 - SF3bEWQTwTYsAQBAmh0NAF0fHKSu7QiyiWAblgAAIM2OBgDX7cFB6tqOIJsItmEJAADS7HAAcF0eHKSu - 7QiyiWAblgAAIM2OBwDX3cFB6tqOIJsItmEJAADSNBAA3AeNvJm2SF3bEWQTwTYsAQBAmkYCgOvm4CB1 - bUeQTQTbsAQAAGkaCgB+cNCrjbyptkRd2xFkE8E2LAEAQJqGAoDr4uAgdW1HkE0E27AEAABpGgsArvmD - g9S1HUE2EWzDEgAApGkwALimDw5S13YE2USwDUsAAJCm0QDgmj04SF3bEWQTwTYsAQBAmoYDgGvy4CB1 - bUeQTQTbsAQAAGkaDwCuuYOD1LUdQTYRbMMSAACk6SAANHdwkLq2I8gmgm1YAgCANB0EAOcHB73AyBvu - rlHXdgTZRLANSwAAkKaTAOCaOThIXdsRZBPBNiwBAECajgKA+7TZ+YOD1LUdQTYRbMMSAACk6SwAuJ0/ - OEhd2xFkE8E2LAEAQJoOA4Db6YOD1LUdQTYRbMMSAACk6TQA7PTBQerajiCbCLZhCQAA0nQaANzOHhyk - ru0IsolgG5YAACBNxwHA7eTBQerajiCbCLZhCQAA0nQeAJwfHHSGkTfjKahrO4JsItiGJQAASDODAOB2 - 6uAgdW1HkE0E27AEAABpZhIA3HuMvCHXpq7tCLKJYBuWAAAgzYwCgNuJg4PUtR1BNhFswxIAAKSZWQA4 - YiY/OEhd2xFkE8E2LAEAQJqZBQA3+cFB6tqOIJsItmEJAADSzDAAuEkPDlLXdgTZRLANSwAAkGamAcBN - dnCQurYjyCaCbVgCAIA0Mw4AbpKDg9S1HUE2EWzDEgAApJl5AHDVDw5S13YE2USwDUsAAJCGAHD04KAL - jbxZb4O6tiPIJoJtWAIAgDQEgKOqHhykru0IsolgG5YAACANAeAZD5kqBwepazuCbCLYhiUAAEhDADhJ - lYOD1LUdQTYRbMMSAACkIQCcYusHB6lrO4JsItiGJQAASEMAkLZ6cJC6tiPIJoJtWAIAgDQEgJW2dnCQ - urYjyCaCbVgCAIA0BICVtnZwkLq2I8gmgm1YAgCANASAoq0cHKSu7QiyiWAblgAAIA0B4LTSDw5S13YE - 2USwDUsAAJCGADDKn5u0g4PUtR1BNhFswxIAAKQhAIyWdnCQurYjyCaCbVgCAIA0BIC1vMnIm/o61LUd - QTYRbMMSAACkIQCsJeXgIHVtR5BNBNuwBAAAaQgAazvwwUHq2o4gmwi2YQkAANIQADZyoIOD1LUdQTYR - bMMSAACkIQBsbOODg9S1HUE2EWzDEgAApCEAHMhGBwepazuCbCLYhiUAAEhDADiwtQ8OUtd2BNlEsA1L - AACQhgCQYq2Dg9S1HUE2EWzDEgAApCEApPCDg8438oa/TF3bEWQTwTYsAQBAGgJAGj846IVG3vRPpK7t - CLKJYBuWAIDm/NxNi+HNty6G3/iTveEjX1wMd9y7GL760GJ46NG94bEnF8ORHz897O/v2xKP8v/tPf// - +X/j/63/G/+3/hj+WP6YahbWQwBINergIFviWEE2EWzDEgCw037m+v3hjb+/GH7nM3vDnfcv7Ca+Z0t3 - O+WP7TN8ls/02eo5YTUCQLrTHhxkSxcryCaCbVgCAHbOz/9WfGb+pQcWw1NHFrZUpymf7c/Bn4s/J/Vc - cTICwFYUDw6ypYoVZBPBNiwBADvhVTfuH73R3vPw4qQv3+9K+XPy5+bP0Z+r+hhAANiilQcH2fLECrKJ - YBuWAIBJ/fLv7Q1/8bW94cjTu3fTX1X+XP05+3NXH9OcEQC2ZuXBQbYksYJsItiGJQCguguu3R/e9dHF - 8PVvT/fl/azyj8E/Fv+Y1Mc6NwSArZIHB9kyxAqyiWAblgCAas6/dhiu/tje8K1Ht/eDfFOVf0z+sfnH - qD72uSAAbN0pBwfZ8sMKsolgG5YAgCou/fDe8OB3+rvxL5d/jP6xqtdgDggAVZx0cJAtO6wgmwi2YQkA - 2KrXvn8xfP6+/m/8y+Ufs3/s6jXpGQGgmtsMAeA0ZBPBNiwBAFtxwXXDcPOf7Q0/+nE7P9yXXf6x+2vg - r4V6jXpEAKjq+mdZ2VLDCrKJYBuWAIB0F/32Yrj379r/Ab+s8tfCXxP1WvWGAFDdxbbE5PUdBIAi27AE - AKT69f8278/6V5W/Jv7aqNesJ4fe/aPhxW/46vCi//C/UMMlX7nblpe8voMAUGQblgCAFP/q1/eHP/3q - /L7Xv275a+SvlXoNe3Hoyh/azenLp96skI8AUCSbCLZZCQA4sF9432K4/x/4kv/Y8tfKXzP1Wvbi3Hd8 - X9+wkIsAUCSbCLZRCQA4kNf9rh/Qw81/3fLXzF879Zr24uzLv61vWshDACiSTQTbpAQAbOzyP+D7/Qcp - f+38NVSvbS/O+pX/o29cyEEAKJJNBNugBABs5OqPLYan97j5H7T8NfTXUr3GXbhmMbzkzffpmxcOjgBQ - JJsItkEJAFjb9X+8GPYW3Pyzyl9Lf03Va92Dl1314+HFb7hH38BwMASAItlEsM1JAMBa/LNVbv755a9p - z18JOPSuw36z0jcxbI4AUCSbCLYxCQAYzb9fzZf9t1f+2vb8MwHnvfNxu2nx64GpCABFsolgm5IAgFH8 - J9Z37Qf+nji8GO56cDF85IuL4b2fWAxvuXUx/NIHF8OFN+0Pr7xh7+gRvc7/t/f8/+f/jf+3/m/83/pj - 7FL5a9zzbwec87bv6hsZNkMAKJJNBNuQBACclv/O+i78qt+Rp/eHO+9fDDd9ajFc/IFFytG7/hj+WP6Y - /tg+Y+ry17rnvxNw9mUP65sZ1kcAKJJNBNuMBAAU+V+tm/KP/Ozv7w9f/uZiuPb2xfDK927/L+j5DJ/l - M332VOWvebd/MfCa/eGlb7lf39CwHgJAkWwi2GYkAKBoqj/v+9SRxXD7X017iI7P9ufgz2WK8tdePa8e - vOzqveElb/obfVPDeASAItlEsI1IAMBKfnhN7fIvwf/hlxbDhb+5O5/9+nPx5zTFtwd6PkCIg4MSEACK - ZBPBNiEBANK/ubn+D/19/r694Rf/0+5+79ufmz/HmuXvgb8X6vn04Lwrn7QbGb8ZsDECQJFsItgGJADg - FBdcF2fY16pHfrAY3n5bO5/p+nP151yr/L3w90Q9lx5wcNABEACKZBPBNh8BAKe4+c/qfZb7P76+N/zr - G9v7YTd/zv7ca5W/J+p59IKDgzZEACiSTQTbeAQAnOS176/zpX//ozfv+9P2b2r+MdT440j+nvh7o55D - Lzg4aAMEgCLZRLBNRwDASWp8j/sH/28xvPH3+7mZ+cfiH9O2y98bNb8bHBy0PgJAkWwi2KYjAOAZl354 - +zf/7z6+GP7tB/r7TNY/Jv/Ytl3+Hqn5veDgoDURAIpkE8E2HAEAR/lfxHvwO9sNAH//2KLrL2P7x+Yf - 4zbL36OMv4C4yzg4aA0EgCLZRLDNRgDAUVd/bLs3f//suPfvYTv/GLf9lQB/r9TsnnBw0EgEgCLZRLCN - lh0A7jO3mg8d8+fmcaP+W+wIPzDnW49uLwD498d7/LL/Kv6xbvNnAvy98vdMze7JOVd8R9/08E8IAEWy - iWCbLCMAHDY3mOcbf8xlzzavNncZ9e8xsXd9dHs3K/8J+Z5+4G8s/5i3+dsB/p6pub0567KH9I0PgQBQ - JJsItsEOGgDuNKtu/MrrzRGjHgsT+fq3txcAevhVv035x76t8vdMzewOBweVEQCKZBPBNthBAsAfmeeY - 5Zv86Rwy/lUD9Zio7Jd/b3s3qc/+7Xxv/sf5a7Ct8vdOzezN0YOD3nivvgHOHQGgSDYRbHNtGgC+Ys4w - yzf3sX7BqMdFZX/xte3coPxP5bb4F/6y+WuwrT8b7O+dmtkjDg5agQBQJJsItrE2CQB75qVm+aa+ro8Y - 9fio5FV2c9rWCXct/W3/bfPXYhvl752/h2pmj877tSfspsdvBpyEAFAkmwi2qTYJALeZ5Zv5Jl5oPEyo - GajgN/5kOzem7v9i3Qa29RcW/T1U83p17tu/p2+Ec0UAKJJNBNtQmwSAC83yzXxTXzBqBiq45+H8L037 - Z6W7fKTvVPw12cZXW/w9VPN6xsFBJyAAFMkmgm2mdQOA/wT/Qb73v+xKo+Zgy37+txbD/n7+DekPv8TN - fxV/bbLL30N/L9W8nr300gf1DXFuCABFsolgG2ndAPCQWb6JH8TFRs3Blm3jy/9PHVkMF/4mP/i3ir82 - /hpl19y+DXDU0YODvq5vinNCACiSTQTbSOsGgLvN8k38IH7WqDnYsi89kH8juv2v+Oz/dPw1yi5/L9Ws - 3nFwkCEAFMkmgm2idQOA/6nf5Zv4QbzGqDnYop+5Pv8zUf9S9EW/TQA4HX+Nsr/14u+lv6dqXu9mf3AQ - AaBINhFsA039MwDvMGoOtsj/TG12ffmb3PzH8tcqu+b455aPm/XBQQSAItlEsM2zbgBw/BZA437nM/nf - /7/2dgLAWP5aZZe/p2rWXJxzxT/oG2TvCABFsolgG2eTAHCLWb6Rb+JMw98BmMCd9+fegPzX2175Xn74 - byx/rbJ/JdDfUzVrTs5667f0TbJnBIAi2USwTbNJAPCb9ovM8g19XR4k1ONjyx57MvcrANx81pcdwvw9 - VXNmZY4HBxEAimQTwTbNJgHA+dG+mxwEdJx/G4HP/ifwczflf/n5pk8RANblr1l2+XurZs3Jy65+el4H - BxEAimQTwTbMpgHA+d/y97P+l2/up3OOedyox8SWvfnW/BvPxR/gxrMuf82yy99bNWtujh4cdMlf6xtm - bwgARbKJYJvlIAHAfc48zyzf5Fe5yHAU8ISy/wDQE4cXw/nX6llYzV8zf+0ya5Z/EGiF2RwcRAAokk0E - 2ygHDQDOP5v3P+n7U2b5hn/cvzR3GPXvUdFHvph707nrQT7r3JS/dpnl762aM1fnvv1RfdPsCQGgSDYR - bJNkBIAT+VcEPmRuPvZ//dsEjxj132ICd9zLTWdXZIcxf2/VnDk7+1f/r75x9oIAUCSbCLZBsgMAdtxf - fyv3WwDv/QQ3nU35a5dZ/t6qObPmvxnQ88FBBIAi2USwDUIAmJmHHs0NAG/hB8825q9dZvl7q+bMnh8c - 9Ka/1TfQ1hEAimQTwTYHAWBmHnsy96bzSx8kAGzKX7vM8vdWzUHHBwcRAIpkE8E2BgFgZo78+Gl76/Pq - wpv4C4Cb8tcus/y9VXMQDl35Q79h6htpqwgARbKJYJuCADAz2SfRvfIGvuy8KX/tMsvfWzUH/+Tcd/6j - vpG2igBQJJsItiEIADOTXRdcy01nU/7aZZeag5N1dXAQAaBINhFsMxAAZia71AyMl11qBk511lu/qW+o - rSEAFMkmgm0EAsDMZJeagfGyS82AcPTgoP+tb6otIQAUySaCbQQCwMxkl5qB8bJLzYDWxcFBBIAi2USw - TUAAmJnsUjMwXnapGVjt0LufavvgIAJAkWwi2AYgAMxMdqkZGC+71AyUNX1wEAGgSDYRbPETAGYmu9QM - jJddagZO75y3PaJvsLuOAFAkmwi28AkAM5NdagbGyy41A+Oc/at/p2+yu4wAUCSbCLboCQAzk11qBsbL - LjUDI7V4cBABoEg2EWzREwBmJrvUDIyXXWoG1tDawUEEgCLZRLAFTwCYmexSMzBedqkZWE9TBwcRAIpk - E8EWOwFgZrJLzcB42aVmYH3NHBxEACiSTQRb6ASAmckuNQPjZZeagc00cXAQAaBINhFskRMAZia71AyM - l11qBja38wcHEQCKZBPBFjgBYGayS83AeNmlZuBgdvrgIAJAkWwi2OImAMxMdqkZGC+71Awc0C4fHEQA - KJJNBFvcBICZyS41A+Nll5qBg9vZg4MIAEWyiWALmwAwM9mlZmC87FIzkGMnDw4iABTJJoItagLAzGSX - moHxskvNQJ6dOziIAFAkmwi2oAkAM5NdagbGyy41A7l26uAgAkCRbCLYYiYAzEx2qRkYL7vUDOTbmYOD - CABFsolgC5kAMDPZpWZgvOxSM7AFu3JwEAGgSDYRbCETAGYmu9QMjJddaga242VX701/cBABoEg2EWwR - EwBmJrvUDIyXXWoGticODvqqvjnXQAAokk0EW8AEgJnJLjUD42WXmoHtmvTgIAJAkWwi2OIlAMxMdqkZ - GC+71Axs37nv+L6+QW8bAaBINhFs4RIAZia71AyMl11qBuo45/K/1zfpbSIAFMkmgi1aAsDMZJeagfGy - S81APdUPDiIAFMkmgi1YAsDMZJeagfGyS81ARdfsDy958336Zr0NBIAi2USwBUsAmJnsUjMwXnapGajL - Dw568Ru/pm/Y2QgARbKJYIuVADAz2aVmYLzsUjNQ36F3Ha5zcBABoEg2EWyhEgBmJrvUDIyXXWoGpnHe - r/3AbtJbPjiIAFAkmwi2SAkAM5NdagbGyy41A9PZ+sFBBIAi2USwBUoAmJnsUjMwXnapGZjW2Zc9rG/e - GQgARbKJYIuTADAz2aVmYLzsUjMwsaMHBz2gb+AHRQAokk0EW5wEgJnJLjUD42WXmoHpbe3gIAJAkWwi - 2MIkAMxMdqkZGC+71AzshpdddST/4CACQJFsItiiJADMTHapGRgvu9QM7I6jBwdl/mYAAaBINhFsQRIA - Zia71AyMl11qBnZL6sFBBIAi2USwxUgAmJnsUjMwXnapGdg9aQcHEQCKZBPBFiIBYGayS83AeNmlZmA3 - pRwcRAAokk0EW4QEgIlQVE+l1jhO45rFwQ8OIgAUySaCLUICwEQoqqdSaxynd+CDgwgARbKJYAuQADAR - iuqp1BrHOAc6OIgAUCSbCLb4CAAToaieSq1xjHfeOx+3G/oGvx5IACiSTQRbeASAiVBUT6XWONaz0cFB - BIAi2USwRUcAmAhF9VRqjWN9ax8cRAAokk0EW3AEgIlQVE+l1jg2sO7BQQSAItlEsAVHAJgIRfVUao1j - M2sdHEQAKJJNBFtsBICJUFRPpdY4Nnfo3T8ad3AQAaBINhFsoREAJkJRPZVa4ziYUQcHEQCKZBPBFhkB - YCIU1VOpNY6DO+3BQQSAItlEsAVGAJgIRfVUao0jx9mXf1vf/B0BoEg2EWxxEQAmQlE9lVrjyHPWr3yD - ALAB2USwhUUAmAhF9VRqjSPRqoODCABFsolgC4sAMBGK6qnUGkeuowcHveEeAsAaZBPBFhUBYCIU1VOp - NY58pxwcRAAokk0EW1AEgIlQVE+l1ji246SDgwgARbKJYIuJADARiuqp1BrH9pzztu8SAEaQTQRbSASA - iVBUT6XWOLbr6MFBBIAi2USwRUQAmAhF9VRqjWPLrtkfznrrN++yl19e30EAKLJFRACYSHapGcAq2aVm - oIov2Msvr+8gABTZ4iEATCS71AxglexSM1AFAaBANhFs8RAAJpJdagawSnapGaiCAFAgmwi2eAgAE8ku - NQNYJbvUDFRBACiQTQRbPASAiWSXmgGskl1qBqogABTIJoItHgLARLJLzQBWyS41A1UQAApkE8EWDwFg - ItmlZgCrZJeagSoIAAWyiWCLhwAwkexSM4BVskvNQBUEgALZRLDFQwCYSHapGcAq2aVmoAoCQIFsItji - IQBMJLvUDGCV7FIzUAUBoEA2EWzxEAAmkl1qBrBKdqkZqIIAUCCbCLZ4CAATyS41A1glu9QMVEEAKJBN - BFs8BICJZJeaAaySXWoGqiAAFMgmgi0eAsBEskvNAFbJLjUDVRAACmQTwRYPAWAi2aVmAKtkl5qBKggA - BbKJYIuHADCR7FIzgFWyS81AFQSAAtlEsMVDAJhIdqkZwCrZpWagCgJAgWwi2OIhAEwku9QMYJXsUjNQ - BQGgQDYRbPEQACaSXWoGsEp2qRmoggBQIJsItngIABPJLjUDWCW71AxUQQAokE0EWzwEgIlkl5oxFxdc - uz9ccsti+N3PLYYv3r83PPy9veGpI3vD/v7+Uf6/vef/P/9v/L/1f6Meay6yS81AFQSAAtlEsMVDAJhI - dqkZvXvt+xfDbX+5N/zjDxfHXoXx5f/G/60/hnrs3mWXmoEqCAAFsolgi4cAMJHsUjN6deFN+8Mnvrw3 - 7C32j330m5c/hj+WP6aa1avsUjNQBQGgQDYRbPEQACaSXWpGj677473hicPrf8Z/uvLH9MdWM3uUXWoG - qiAAFMgmgi0eAsBEskvN6Mm/uH5/+NRX9o59tNsrn+Gz1HPoSXapGaiCAFAgmwi2eAgAE8kuNaMXr7hh - f7j7G/mf9a8qn+Uz1XPpRXapGaiCAFAgmwi2eAgAE8kuNaMH/tl4zZv/8fKZPX8lILvUDFRBACiQTQRb - PASAiWSXmtGDGl/2X1U+Wz2nHmSXmoEqCAAFsolgi4cAMJHsUjNa5z+UN3X1+oOB2aVmoAoCQIFsItji - IQBMJLvUjJb5r+Vt46f91y1/Dj3+imB2qRmoggBQIJsItngIABPJLjWjZf67+btS/lzUc2xZdqkZqIIA - UCCbCLZ4CAATyS41o1X+1/ky/shPVvlz6e0vBmaXmoEqCAAFsolgi4cAMJHsUjNaddtfTv+l/+Xy56Se - a6uyS81AFQSAAtlEsMVDAJhIdqkZLfJDejb52/7bLn9OPR0glF1qBqogABTIJoItHgLARLJLzWiRn9S3 - q+XPTT3nFmWXmoEqCAAFsolgi4cAMJHsUjNa5Mf17mr5c1PPuUXZpWagCgJAgWwi2OIhAEwku9SMFvmZ - /bta/tzUc25RdqkZqIIAUCCbCLZ4CAATyS41o0UPf293A4A/N/WcW5RdagaqIAAUyCaCLR4CwESyS81o - 0VNHdjcA+HNTz7lF2aVmoAoCQIFsItjiIQBMJLvUjBbt7+/O7/8vlz839ZxblF1qBqogABTIJoItHgLA - RLJLzWgRAaCO7FIzUAUBoEA2EWzxEAAmkl1qRosO/2h3vwXgz0095xZll5qBKggABbKJYIuHADCR7FIz - WsQPAdaRXWoGqiAAFMgmgi0eAsBEskvNaNHn79vdAODPTT3nFmWXmoEqCAAFsolgi4cAMJHsUjNa9F8+ - u7t/CMifm3rOLcouNQNVEAAKZBPBFg8BYCLZpWa06PX/dXcDgD839ZxblF1qBqogABTIJoItHgLARLJL - zWjRP792f/jeE7sXAvw5+XNTz7lF2aVmoAoCQIFsItjiIQBMJLvUjFZ9+H/u3s8B+HNSz7VV2aVmoAoC - QIFsItjiIQBMJLvUjFa95j/uD0/v7c7fA/Dn4s9JPddWZZeagSoIAAWyiWCLhwAwkexSM1r20bt256sA - /lzUc2xZdqkZqIIAUCCbCLZ4CAATyS41o2WvunF/eOzJ6X8WwJ+DPxf1HFuWXWoGqiAAFMgmgi0eAsBE - skvNaN3bb9ub9E8D+2x/Duq5tS671AxUQQAokE0EWzwEgIlkl5rRgz+4c7pvBfhs9Zx6kF1qBqogABTI - JoItHgLARLJLzejBBdcNw2f+pn4I8Jk+Wz2nHmSXmoEqCAAFsolgi4cAMJHsUjN68fLr9of/fm+9EOCz - fKZ6Lr3ILjUDVRAACmQTwRYPAWAi2aVm9OT8a4fh1i9s92cC/LF9hs9Sz6En2aVmoAoCQIFsItjiIQBM - JLvUjB5d+uHF8N3H8387wB/TH1vN7FF2qRmoggBQIJsItngIABPJLjWjV6+4If+rAP6YalavskvNQBUE - gALZRLDFQwCYSHapGT3LLjWjZ9mlZqAKAkCBbCLY4iEATCS71IyeZZea0bPsUjNQBQGgQDYRbPEQACaS - XWpGz7JLzehZdqkZqIIAUCCbCLZ4CAATyS41o2fZpWb0LLvUDFRBACiQTQRbPASAiWSXmtGz7FIzepZd - agaqIAAUyCaCLR4CwESyS83oWXapGT3LLjUDVRAACmQTwRYPAWAi2aVm9Cy71IyeZZeagSoIAAWyiWCL - hwAwkexSM3qWXWpGz7JLzUAVBIAC2USwxUMAmEh2qRk9yy41o2fZpWagCgJAgWwi2OLJCgBPmg+Z15hz - zHPM880hc5m5y6h/N1vZpWb0LLvUjJ5ll5qBKggABbKJYIsnIwD4jf95xh+vxMPBA0Y9xuxkl5rRs+xS - M3qWXWoGqiAAFMgmgi2egwSAw+YXzfKNvuS55tNGPd6sZJea0bPsUjN6ll1qBqogABTIJoItnoMEAP+M - fvkGP4Z/e+ALRj3mbGSXmtGz7FIzepZdagaqIAAUyCaCLZ5NA8CNZvnGvg7/lsH3jXrsWcguNaNn2aVm - 9Cy71AxUQQAokE0EWzybBIBHzE+Y5Zv6uq4w6vFnIbvUjJ5ll5rRs+xSM1AFAaBANhFs8WwSAK4yyzfz - TZxh/OcI1IzuZZea0bPsUjN6ll1qBqogABTIJoItnk0CwIvM8s18U580akb3skvN6Fl2qRk9yy41A1UQ - AApkE8EWzyYBwH+Ib/lGvqnrjZrRvexSM3qWXWpGz7JLzUAVBIAC2USwxbNuAPDv/y/fxA/iEqPmdC+7 - 1IyeZZea0bPsUjNQBQGgQDYRbPGsGwAeN8s38YO41Kg53csuNaNn2aVm9Cy71AxUQQAokE0EWzybfAvA - f3hv+Ua+qRuMmtG97FIzepZdakbPskvNQBUEgALZRLDFs0kAeLlZvpFvarZ/ECi71IyeZZea0bPsUjNQ - BQGgQDYRbPFsEgDeZ5Zv5JvwPwa0Z9SM7mWXmgGskl1qBqogABTIJoItnk0CgJ/8d6ZZvqGv6yajHn8W - skvNAFbJLjUDVRAACmQTwRbPJgHA3WKWb+jr+GlzxKjHnoXsUjOAVbJLzUAVBIAC2USwxbNpAHB+zv/y - jX0M/9L/7I8Fzi41A1glu9QMVEEAKJBNBFs8BwkA7j1m+QZf8kIz+5u/yy41A1glu9QMVEEAKJBNBFs8 - Bw0A7nPmkFm+2Z/If3XwHcb/joB6jNnJLjUDWCW71AxUQQAokE0EWzwZAeC4e4x/ReB15hzzavN681HD - jX9JdqkZwCrZpWagCgJAgWwi2OLJDABYQ3apGcAq2aVmoAoCQIFsItjiIQBMJLvUDGCV7FIzUAUBoEA2 - EWzxEAAmkl1qBrBKdqkZqIIAUCCbCLZ4CAATyS41A1glu9QMVEEAKJBNBFs8BICJZJeaAaySXWoGqiAA - FMgmgi0eAsBEskvNAFbJLjUDVRAACmQTwRYPAWAi2aVmAKtkl5qBKggABbKJYIuHADCR7FIzgFWyS81A - FQSAAtlEsMVDAJhIdqkZwCrZpWagCgJAgWwi2OIhAEwku9QMYJXsUjNQBQGgQDYRbPEQACaSXWoGsEp2 - qRmoggBQIJsItngIABPJLjUDWCW71AxUQQAokE0EWzwEgIlkl5oBrJJdagaqIAAUyCaCLR4CwEQoqqdS - axxVEAAKZBPBFg8BYCIU1VOpNY4qCAAFsolgi4cAMBGK6qnUGkcVBIAC2USwxUMAmAhF9VRqjaMKAkCB - bCLY4iEATISieiq1xlEFAaBANhFs8RAAJkJRPZVa46iCAFAgmwi2eAgAE6GonkqtcVRBACiQTQRbPASA - iVBUT6XWOKogABTIJoItHgLARCiqp1JrHFUQAApkE8EWDwFgIhTVU6k1jioIAAWyiWCLhwAwEYrqqdQa - RxUEgALZRLDFQwCYCEX1VGqNowoCQIFsItjiIQBMhKJ6KrXGUQUBoEA2EWzxEAAmQlE9lVrjqIIAUCCb - CLZ4CAAToaieSq1xVEEAKJBNBFs8BICJUFRPpdY4qiAAFMgmgi0eAsBEKKqnUmscVRAACmQTwRYPAWAi - FNVTqTWOKggABbKJYIuHADARiuqp1BpHFQSAAtlEsMVDAJgIRfVUao2jCgJAgWwi2OIhAABAuwgABbKJ - YIuHAAAA7SIAFMgmgi0eAgAAtIsAUCCbCLZ4CAAA0C4CQIFsItjiIQAAQLsIAAWyiWCLhwAAAO0iABTI - JoItHgIAALSLAFAgmwi2eAgAANAuAkCBbCLY4iEAAEC7CAAFsolgi4cAAADtIgAUyCaCLR4CAAC0iwBQ - IJsItngIAADQLgJAgWwi2OIhAABAuwgABbKJYIuHAAAA7SIAFMgmgi0eAgAAtIsAUCCbCLZ4CAAA0C4C - QIFsItjiIQAAQLsIAAWyiWCLhwAAAO0iABTIJoItHgIAALSLAFAgmwi2eAgAANAuAkCBbCLY4iEAAEC7 - CAAFsolgi4cAAADtIgAUyCaCLR4CAAC0iwBQIJsItngIAADQLgJAgWwi2OIhAABAuwgABbKJYIuHAAAA - 7SIAFMgmgi0eAgAAtIsAUCCbCLZ4CAAA0C4CQIFsItjiIQAAQLsIAAWyiWCLhwAAAO0iABTIJoItHgIA - ALSLAFAgmwi2eAgAANAuAkCBbCLY4iEAAEC7CAAFsolgi4cAAADtIgAUyCaCLR4CAAC0iwBQIJsItngI - AADQLgJAgWwi2OIhAABAuwgABbKJYIuHAAAA7SIAFMgmgi0eAgAAtIsAUCCbCLZ4CAAA0C4CQIFsItji - IQAAQLsIAAWyiWCLhwAAAO0iABTIJoItHgIAALSLAFAgmwi2eAgAANAuAkCBbCLY4iEAAEC7CAAFsolg - i4cAAADtIgAUyCaCLR4CAAC0iwBQIJsItngIAADQLgJAgWwi2OIhAABAuwgABbKJYIuHAAAA7SIAFMgm - gi0eAgAAtIsAUCCbCLZ4CAAA0C4CQIFsItjiIQAAQLsIAAWyiWCLhwAAAO0iABTIJoItHgIAALSLAFAg - mwi2eAgAANAuAkCBbCLY4iEAAEC7CAAFsolgi4cAAADtIgAUyCaCLR4CAAC0iwBQIJsItngIAADQLgJA - gWwi2OIhAABAuwgABbKJYIuHAAAA7SIAFMgmgi0eAgAAtIsAUCCbCLZ4CAAA0C4CQIFsItjiIQAAQLsI - AAWyiWCLhwAAAO0iABTIJoItHgIAALSLAFAgmwi2eAgAANAuAkCBbCLY4iEAAEC7CAAFsolgi4cAAADt - IgAUyCaCLR4CAAC0iwBQIJsItngIAADQLgJAgWwi2OIhAABAuwgABbKJYIuHAAAA7SIAFMgmgi0eAgAA - tIsAUCCbCLZ4CAAA0C4CQIFsItjiuWFpMQEA2kEAKJBNBFs8BAAAaNcd6tqOIJsItniuWFpMAIB2fFJd - 2xFkE8EWz+uWFhMAoB0fUtd2BNlEsMXziqXFBABoxxXq2o4gmwi2eJ6/tJgAAO14jbq2I8gmgi0e9/gJ - iwkA0I4z1bUdQTYRbPG4T56wmAAAbXjAyGs7gmwi+OIxlx5bTACAdtxo5LUdQTYRfPEYfg4AANpzyMhr - O4JsIvjiOebTRi0wAMDuudscvX6razuCbCIcX0DmQqMWGQBg91xkCACnIZsIxxeQebb5ilELDQCwO/xa - /cz1W13bEWQT4cRFZF5u9oxacACA6fk1+uj3/o9T13YE2UQ4cREdc5NRiw4AML33mJOu2+rajiCbCMsL - yfi3Aj5n1MIDAEzn48av0Sddt9W1HUE2EZYX0jE/afwnTNUCBADUd4c5w5xyzVbXdgTZRFCL6ZjnGr4S - AADTu8U8x6hrtby2I8gmglpMJ/AvNfn3m9SCBABsl5/T8u+Nuj4/Q13bEWQTQS0m4aWGrwYAQB2HzYfM - 84y6Jp9EXdsRZBNBLaYC/zXB28yTRi1aAMDm/HCfq8yoG/9x6tqOIJsIajGN4N+LerV5n/EfFrzPqMUM - AND89/n9+unf37/CvMCo6+1pqWs7gmwiqMV0AJ5azwEArPTTRl0/N6au7QiyCQAA+iabAACgb7IJAAD6 - JpsAAKBvsgkAAPommwAAoG+yCQAA+iabAACgb7IJAAD6JpsAAKBvsgkAAPommwAAoG+yCQAA+iabAACg - b7IJAAD6JpsAAKBvsgkAAPommwAAoG+yCQAA+iabAACgb7IJAAD6JpsAAKBvsgkAAPommwAAoG+yCQAA - +iabAACgb7IJAAD6JpsAAKBvsgkAAPommwAAoG+yCQAA+iabAACgb7IJAAD6JpsAAKBvsgkAAPommwAA - oG+yCQAAejY86/8DNhf6iwbS6s8AAAAASUVORK5CYII= - - - - Custom TextBox with Watermark: https://www.codeproject.com/Articles/319910/Custom-TextBox-with-watermark -CustomSettingsProvider: http://www.codeproject.com/Articles/20917/Settings-Provider -Farm-Fresh Web Icons: https://www.fatcow.com/free-icons -MsgBoxCenterParent: http://stackoverflow.com/a/2576220/4430027 + + 21, 17 + + + This is an open-source app created by Sigmanor and licensed under MIT. +The source code, issues and documentation posted on GitHub. + +Github: https://github.com/Crypto-Notepad/Crypto-Notepad +Website: https://crypto-notepad.info/ + +Contributors/testers: + +smaragdus https://github.com/smaragdus +h5p9sl https://github.com/h5p9sl + +External libraries: + +CustomSettingsProvider: http://www.codeproject.com/Articles/20917/1 +TextBox Placeholder: https://www.codeproject.com/Articles/319910/0 PasswordGenerator: https://github.com/prjseal/PasswordGenerator/ -Fugue Icons: https://p.yusukekamiyamane.com/ +OS Version Info: https://www.codeproject.com/Articles/73000/2 +Farm-Fresh Web Icons: https://www.fatcow.com/free-icons DotNetZip: https://www.nuget.org/packages/DotNetZip/ -Fody: https://github.com/Fody/Fody -AES: http://www.codeproject.com/Answers/391219/AES#answer2 +Fugue Icons: https://p.yusukekamiyamane.com/ +Fody: https://github.com/Fody/Fody - 44 + 94 + AAABAAYAAAAAAAEAIAAwBwAAZgAAAICAAAABACAAKAgBAJYHAABAQAAAAQAgAChCAAC+DwEAMDAAAAEA diff --git a/Crypto Notepad/Crypto Notepad.csproj b/Crypto Notepad/Crypto Notepad.csproj index 2db7c23..c532b12 100644 --- a/Crypto Notepad/Crypto Notepad.csproj +++ b/Crypto Notepad/Crypto Notepad.csproj @@ -115,6 +115,9 @@ ChangeKeyForm.cs + + Component + Form @@ -131,6 +134,7 @@ Component + Form diff --git a/Crypto Notepad/ExRichTextBox.cs b/Crypto Notepad/ExRichTextBox.cs index b9d7475..cedf9a5 100644 --- a/Crypto Notepad/ExRichTextBox.cs +++ b/Crypto Notepad/ExRichTextBox.cs @@ -8,9 +8,14 @@ namespace Crypto_Notepad public class ExRichTextBox : RichTextBox { [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] - static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); + private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); + + [DllImport("kernel32.dll", EntryPoint = "LoadLibraryW", CharSet = CharSet.Unicode, SetLastError = true)] + private static extern IntPtr LoadLibraryW(string s_File); + private const int WM_VSCROLL = 0x115; private const int WM_MOUSEWHEEL = 0x20A; + protected override void WndProc(ref Message m) { if (m.Msg == WM_MOUSEWHEEL) @@ -32,12 +37,9 @@ protected override void WndProc(ref Message m) } return; } - base.WndProc(ref m); } - [DllImport("kernel32.dll", EntryPoint = "LoadLibraryW", - CharSet = CharSet.Unicode, SetLastError = true)] - private static extern IntPtr LoadLibraryW(string s_File); + protected override CreateParams CreateParams { get diff --git a/Crypto Notepad/HideCaretRichTextBox.cs b/Crypto Notepad/HideCaretRichTextBox.cs new file mode 100644 index 0000000..4b3a974 --- /dev/null +++ b/Crypto Notepad/HideCaretRichTextBox.cs @@ -0,0 +1,18 @@ +using System; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace Crypto_Notepad +{ + public class HideCaretRichTextBox : ExRichTextBox + { + [DllImport("user32.dll", EntryPoint = "HideCaret")] + private static extern long HideCaret(IntPtr hwnd); + + protected override void WndProc(ref Message m) + { + HideCaret(this.Handle); + base.WndProc(ref m); + } + } +} diff --git a/Crypto Notepad/OSVersionInfoClass.cs b/Crypto Notepad/OSVersionInfoClass.cs new file mode 100644 index 0000000..a2e79aa --- /dev/null +++ b/Crypto Notepad/OSVersionInfoClass.cs @@ -0,0 +1,1089 @@ +using Microsoft.Win32; +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +// http://www.codeproject.com/Articles/73000/Getting-Operating-System-Version-Info-Even-for-Win +//https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions + +//Thanks to Member 7861383, Scott Vickery for the Windows 8.1 update and workaround. +//I have moved it to the beginning of the Name property, though... + +//Thakts to Brisingr Aerowing for help with the Windows 10 adapatation + +namespace JCS +{ + /// + /// Provides detailed information about the host operating system. + /// + public static class OSVersionInfo + { + #region ENUMS + public enum SoftwareArchitecture + { + Unknown = 0, + Bit32 = 1, + Bit64 = 2 + } + + public enum ProcessorArchitecture + { + Unknown = 0, + Bit32 = 1, + Bit64 = 2, + Itanium64 = 3 + } + #endregion ENUMS + + #region DELEGATE DECLARATION + private delegate bool IsWow64ProcessDelegate([In] IntPtr handle, [Out] out bool isWow64Process); + #endregion DELEGATE DECLARATION + + #region BITS + /// + /// Determines if the current application is 32 or 64-bit. + /// + static public SoftwareArchitecture ProgramBits + { + get + { + SoftwareArchitecture pbits = SoftwareArchitecture.Unknown; + + System.Collections.IDictionary test = Environment.GetEnvironmentVariables(); + + switch (IntPtr.Size * 8) + { + case 64: + pbits = SoftwareArchitecture.Bit64; + break; + + case 32: + pbits = SoftwareArchitecture.Bit32; + break; + + default: + pbits = SoftwareArchitecture.Unknown; + break; + } + + return pbits; + } + } + + static public SoftwareArchitecture OSBits + { + get + { + SoftwareArchitecture osbits = SoftwareArchitecture.Unknown; + + switch (IntPtr.Size * 8) + { + case 64: + osbits = SoftwareArchitecture.Bit64; + break; + + case 32: + if (Is32BitProcessOn64BitProcessor()) + osbits = SoftwareArchitecture.Bit64; + else + osbits = SoftwareArchitecture.Bit32; + break; + + default: + osbits = SoftwareArchitecture.Unknown; + break; + } + + return osbits; + } + } + + /// + /// Determines if the current processor is 32 or 64-bit. + /// + static public ProcessorArchitecture ProcessorBits + { + get + { + ProcessorArchitecture pbits = ProcessorArchitecture.Unknown; + + try + { + SYSTEM_INFO l_System_Info = new SYSTEM_INFO(); + GetNativeSystemInfo(ref l_System_Info); + + switch (l_System_Info.uProcessorInfo.wProcessorArchitecture) + { + case 9: // PROCESSOR_ARCHITECTURE_AMD64 + pbits = ProcessorArchitecture.Bit64; + break; + case 6: // PROCESSOR_ARCHITECTURE_IA64 + pbits = ProcessorArchitecture.Itanium64; + break; + case 0: // PROCESSOR_ARCHITECTURE_INTEL + pbits = ProcessorArchitecture.Bit32; + break; + default: // PROCESSOR_ARCHITECTURE_UNKNOWN + pbits = ProcessorArchitecture.Unknown; + break; + } + } + catch + { + // Ignore + } + + return pbits; + } + } + #endregion BITS + + #region EDITION + static private string s_Edition; + /// + /// Gets the edition of the operating system running on this computer. + /// + static public string Edition + { + get + { + if (s_Edition != null) + return s_Edition; //***** RETURN *****// + + string edition = String.Empty; + + OperatingSystem osVersion = Environment.OSVersion; + OSVERSIONINFOEX osVersionInfo = new OSVERSIONINFOEX(); + osVersionInfo.dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX)); + + if (GetVersionEx(ref osVersionInfo)) + { + int majorVersion = osVersion.Version.Major; + int minorVersion = osVersion.Version.Minor; + byte productType = osVersionInfo.wProductType; + short suiteMask = osVersionInfo.wSuiteMask; + + #region VERSION 4 + if (majorVersion == 4) + { + if (productType == VER_NT_WORKSTATION) + { + // Windows NT 4.0 Workstation + edition = "Workstation"; + } + else if (productType == VER_NT_SERVER) + { + if ((suiteMask & VER_SUITE_ENTERPRISE) != 0) + { + // Windows NT 4.0 Server Enterprise + edition = "Enterprise Server"; + } + else + { + // Windows NT 4.0 Server + edition = "Standard Server"; + } + } + } + #endregion VERSION 4 + + #region VERSION 5 + else if (majorVersion >= 5) + { + if (productType == VER_NT_WORKSTATION) + { + if ((suiteMask & VER_SUITE_PERSONAL) != 0) + { + edition = "Home"; + } + else + { + if (GetSystemMetrics(86) == 0) // 86 == SM_TABLETPC + edition = "Professional"; + else + edition = "Tablet Edition"; + } + } + else if (productType == VER_NT_SERVER) + { + if (minorVersion == 0) + { + if ((suiteMask & VER_SUITE_DATACENTER) != 0) + { + // Windows 2000 Datacenter Server + edition = "Datacenter Server"; + } + else if ((suiteMask & VER_SUITE_ENTERPRISE) != 0) + { + // Windows 2000 Advanced Server + edition = "Advanced Server"; + } + else + { + // Windows 2000 Server + edition = "Server"; + } + } + else + { + if ((suiteMask & VER_SUITE_DATACENTER) != 0) + { + // Windows Server 2003 Datacenter Edition + edition = "Datacenter"; + } + else if ((suiteMask & VER_SUITE_ENTERPRISE) != 0) + { + // Windows Server 2003 Enterprise Edition + edition = "Enterprise"; + } + else if ((suiteMask & VER_SUITE_BLADE) != 0) + { + // Windows Server 2003 Web Edition + edition = "Web Edition"; + } + else + { + // Windows Server 2003 Standard Edition + edition = "Standard"; + } + } + } + } + #endregion VERSION 5 + + #region VERSION 6 + else if (majorVersion == 6) + { + int ed; + if (GetProductInfo(majorVersion, minorVersion, + osVersionInfo.wServicePackMajor, osVersionInfo.wServicePackMinor, + out ed)) + { + switch (ed) + { + case PRODUCT_BUSINESS: + edition = "Business"; + break; + case PRODUCT_BUSINESS_N: + edition = "Business N"; + break; + case PRODUCT_CLUSTER_SERVER: + edition = "HPC Edition"; + break; + case PRODUCT_CLUSTER_SERVER_V: + edition = "HPC Edition without Hyper-V"; + break; + case PRODUCT_DATACENTER_SERVER: + edition = "Datacenter Server"; + break; + case PRODUCT_DATACENTER_SERVER_CORE: + edition = "Datacenter Server (core installation)"; + break; + case PRODUCT_DATACENTER_SERVER_V: + edition = "Datacenter Server without Hyper-V"; + break; + case PRODUCT_DATACENTER_SERVER_CORE_V: + edition = "Datacenter Server without Hyper-V (core installation)"; + break; + case PRODUCT_EMBEDDED: + edition = "Embedded"; + break; + case PRODUCT_ENTERPRISE: + edition = "Enterprise"; + break; + case PRODUCT_ENTERPRISE_N: + edition = "Enterprise N"; + break; + case PRODUCT_ENTERPRISE_E: + edition = "Enterprise E"; + break; + case PRODUCT_ENTERPRISE_SERVER: + edition = "Enterprise Server"; + break; + case PRODUCT_ENTERPRISE_SERVER_CORE: + edition = "Enterprise Server (core installation)"; + break; + case PRODUCT_ENTERPRISE_SERVER_CORE_V: + edition = "Enterprise Server without Hyper-V (core installation)"; + break; + case PRODUCT_ENTERPRISE_SERVER_IA64: + edition = "Enterprise Server for Itanium-based Systems"; + break; + case PRODUCT_ENTERPRISE_SERVER_V: + edition = "Enterprise Server without Hyper-V"; + break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT: + edition = "Essential Business Server MGMT"; + break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL: + edition = "Essential Business Server ADDL"; + break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC: + edition = "Essential Business Server MGMTSVC"; + break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC: + edition = "Essential Business Server ADDLSVC"; + break; + case PRODUCT_HOME_BASIC: + edition = "Home Basic"; + break; + case PRODUCT_HOME_BASIC_N: + edition = "Home Basic N"; + break; + case PRODUCT_HOME_BASIC_E: + edition = "Home Basic E"; + break; + case PRODUCT_HOME_PREMIUM: + edition = "Home Premium"; + break; + case PRODUCT_HOME_PREMIUM_N: + edition = "Home Premium N"; + break; + case PRODUCT_HOME_PREMIUM_E: + edition = "Home Premium E"; + break; + case PRODUCT_HOME_PREMIUM_SERVER: + edition = "Home Premium Server"; + break; + case PRODUCT_HYPERV: + edition = "Microsoft Hyper-V Server"; + break; + case PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT: + edition = "Windows Essential Business Management Server"; + break; + case PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING: + edition = "Windows Essential Business Messaging Server"; + break; + case PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY: + edition = "Windows Essential Business Security Server"; + break; + case PRODUCT_PROFESSIONAL: + edition = "Professional"; + break; + case PRODUCT_PROFESSIONAL_N: + edition = "Professional N"; + break; + case PRODUCT_PROFESSIONAL_E: + edition = "Professional E"; + break; + case PRODUCT_SB_SOLUTION_SERVER: + edition = "SB Solution Server"; + break; + case PRODUCT_SB_SOLUTION_SERVER_EM: + edition = "SB Solution Server EM"; + break; + case PRODUCT_SERVER_FOR_SB_SOLUTIONS: + edition = "Server for SB Solutions"; + break; + case PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM: + edition = "Server for SB Solutions EM"; + break; + case PRODUCT_SERVER_FOR_SMALLBUSINESS: + edition = "Windows Essential Server Solutions"; + break; + case PRODUCT_SERVER_FOR_SMALLBUSINESS_V: + edition = "Windows Essential Server Solutions without Hyper-V"; + break; + case PRODUCT_SERVER_FOUNDATION: + edition = "Server Foundation"; + break; + case PRODUCT_SMALLBUSINESS_SERVER: + edition = "Windows Small Business Server"; + break; + case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM: + edition = "Windows Small Business Server Premium"; + break; + case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE: + edition = "Windows Small Business Server Premium (core installation)"; + break; + case PRODUCT_SOLUTION_EMBEDDEDSERVER: + edition = "Solution Embedded Server"; + break; + case PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE: + edition = "Solution Embedded Server (core installation)"; + break; + case PRODUCT_STANDARD_SERVER: + edition = "Standard Server"; + break; + case PRODUCT_STANDARD_SERVER_CORE: + edition = "Standard Server (core installation)"; + break; + case PRODUCT_STANDARD_SERVER_SOLUTIONS: + edition = "Standard Server Solutions"; + break; + case PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE: + edition = "Standard Server Solutions (core installation)"; + break; + case PRODUCT_STANDARD_SERVER_CORE_V: + edition = "Standard Server without Hyper-V (core installation)"; + break; + case PRODUCT_STANDARD_SERVER_V: + edition = "Standard Server without Hyper-V"; + break; + case PRODUCT_STARTER: + edition = "Starter"; + break; + case PRODUCT_STARTER_N: + edition = "Starter N"; + break; + case PRODUCT_STARTER_E: + edition = "Starter E"; + break; + case PRODUCT_STORAGE_ENTERPRISE_SERVER: + edition = "Enterprise Storage Server"; + break; + case PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE: + edition = "Enterprise Storage Server (core installation)"; + break; + case PRODUCT_STORAGE_EXPRESS_SERVER: + edition = "Express Storage Server"; + break; + case PRODUCT_STORAGE_EXPRESS_SERVER_CORE: + edition = "Express Storage Server (core installation)"; + break; + case PRODUCT_STORAGE_STANDARD_SERVER: + edition = "Standard Storage Server"; + break; + case PRODUCT_STORAGE_STANDARD_SERVER_CORE: + edition = "Standard Storage Server (core installation)"; + break; + case PRODUCT_STORAGE_WORKGROUP_SERVER: + edition = "Workgroup Storage Server"; + break; + case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE: + edition = "Workgroup Storage Server (core installation)"; + break; + case PRODUCT_UNDEFINED: + edition = "Unknown product"; + break; + case PRODUCT_ULTIMATE: + edition = "Ultimate"; + break; + case PRODUCT_ULTIMATE_N: + edition = "Ultimate N"; + break; + case PRODUCT_ULTIMATE_E: + edition = "Ultimate E"; + break; + case PRODUCT_WEB_SERVER: + edition = "Web Server"; + break; + case PRODUCT_WEB_SERVER_CORE: + edition = "Web Server (core installation)"; + break; + } + } + } + #endregion VERSION 6 + } + + s_Edition = edition; + return edition; + } + } + #endregion EDITION + + #region NAME + static private string s_Name; + /// + /// Gets the name of the operating system running on this computer. + /// + static public string Name + { + get + { + if (s_Name != null) + return s_Name; //***** RETURN *****// + + string name = "unknown"; + + OperatingSystem osVersion = Environment.OSVersion; + OSVERSIONINFOEX osVersionInfo = new OSVERSIONINFOEX(); + osVersionInfo.dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX)); + + if (GetVersionEx(ref osVersionInfo)) + { + int majorVersion = osVersion.Version.Major; + int minorVersion = osVersion.Version.Minor; + + if (majorVersion == 6 && minorVersion == 2) + { + //The registry read workaround is by Scott Vickery. Thanks a lot for the help! + + //http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx + + // For applications that have been manifested for Windows 8.1 & Windows 10. Applications not manifested for 8.1 or 10 will return the Windows 8 OS version value (6.2). + // By reading the registry, we'll get the exact version - meaning we can even compare against Win 8 and Win 8.1. + string exactVersion = RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", ""); + if (!string.IsNullOrEmpty(exactVersion)) + { + string[] splitResult = exactVersion.Split('.'); + majorVersion = Convert.ToInt32(splitResult[0]); + minorVersion = Convert.ToInt32(splitResult[1]); + } + if (IsWindows10()) + { + majorVersion = 10; + minorVersion = 0; + } + } + + switch (osVersion.Platform) + { + case PlatformID.Win32S: + name = "Windows 3.1"; + break; + case PlatformID.WinCE: + name = "Windows CE"; + break; + case PlatformID.Win32Windows: + { + if (majorVersion == 4) + { + string csdVersion = osVersionInfo.szCSDVersion; + switch (minorVersion) + { + case 0: + if (csdVersion == "B" || csdVersion == "C") + name = "Windows 95 OSR2"; + else + name = "Windows 95"; + break; + case 10: + if (csdVersion == "A") + name = "Windows 98 Second Edition"; + else + name = "Windows 98"; + break; + case 90: + name = "Windows Me"; + break; + } + } + break; + } + case PlatformID.Win32NT: + { + byte productType = osVersionInfo.wProductType; + + switch (majorVersion) + { + case 3: + name = "Windows NT 3.51"; + break; + case 4: + switch (productType) + { + case 1: + name = "Windows NT 4.0"; + break; + case 3: + name = "Windows NT 4.0 Server"; + break; + } + break; + case 5: + switch (minorVersion) + { + case 0: + name = "Windows 2000"; + break; + case 1: + name = "Windows XP"; + break; + case 2: + name = "Windows Server 2003"; + break; + } + break; + case 6: + switch (minorVersion) + { + case 0: + switch (productType) + { + case 1: + name = "Windows Vista"; + break; + case 3: + name = "Windows Server 2008"; + break; + } + break; + + case 1: + switch (productType) + { + case 1: + name = "Windows 7"; + break; + case 3: + name = "Windows Server 2008 R2"; + break; + } + break; + case 2: + switch (productType) + { + case 1: + name = "Windows 8"; + break; + case 3: + name = "Windows Server 2012"; + break; + } + break; + case 3: + switch (productType) + { + case 1: + name = "Windows 8.1"; + break; + case 3: + name = "Windows Server 2012 R2"; + break; + } + break; + } + break; + case 10: + switch (minorVersion) + { + case 0: + switch (productType) + { + case 1: + name = "Windows 10"; + break; + case 3: + name = "Windows Server 2016"; + break; + } + break; + } + break; + } + break; + } + } + } + + s_Name = name; + return name; + } + } + #endregion NAME + + #region PINVOKE + + #region GET + #region PRODUCT INFO + [DllImport("Kernel32.dll")] + internal static extern bool GetProductInfo( + int osMajorVersion, + int osMinorVersion, + int spMajorVersion, + int spMinorVersion, + out int edition); + #endregion PRODUCT INFO + + #region VERSION + [DllImport("kernel32.dll")] + private static extern bool GetVersionEx(ref OSVERSIONINFOEX osVersionInfo); + #endregion VERSION + + #region SYSTEMMETRICS + [DllImport("user32")] + public static extern int GetSystemMetrics(int nIndex); + #endregion SYSTEMMETRICS + + #region SYSTEMINFO + [DllImport("kernel32.dll")] + public static extern void GetSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo); + + [DllImport("kernel32.dll")] + public static extern void GetNativeSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo); + #endregion SYSTEMINFO + + #endregion GET + + #region OSVERSIONINFOEX + [StructLayout(LayoutKind.Sequential)] + private struct OSVERSIONINFOEX + { + public int dwOSVersionInfoSize; + public int dwMajorVersion; + public int dwMinorVersion; + public int dwBuildNumber; + public int dwPlatformId; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string szCSDVersion; + public short wServicePackMajor; + public short wServicePackMinor; + public short wSuiteMask; + public byte wProductType; + public byte wReserved; + } + #endregion OSVERSIONINFOEX + + #region SYSTEM_INFO + [StructLayout(LayoutKind.Sequential)] + public struct SYSTEM_INFO + { + internal _PROCESSOR_INFO_UNION uProcessorInfo; + public uint dwPageSize; + public IntPtr lpMinimumApplicationAddress; + public IntPtr lpMaximumApplicationAddress; + public IntPtr dwActiveProcessorMask; + public uint dwNumberOfProcessors; + public uint dwProcessorType; + public uint dwAllocationGranularity; + public ushort dwProcessorLevel; + public ushort dwProcessorRevision; + } + #endregion SYSTEM_INFO + + #region _PROCESSOR_INFO_UNION + [StructLayout(LayoutKind.Explicit)] + public struct _PROCESSOR_INFO_UNION + { + [FieldOffset(0)] + internal uint dwOemId; + [FieldOffset(0)] + internal ushort wProcessorArchitecture; + [FieldOffset(2)] + internal ushort wReserved; + } + #endregion _PROCESSOR_INFO_UNION + + #region 64 BIT OS DETECTION + [DllImport("kernel32", SetLastError = true, CallingConvention = CallingConvention.Winapi)] + public extern static IntPtr LoadLibrary(string libraryName); + + [DllImport("kernel32", SetLastError = true, CallingConvention = CallingConvention.Winapi)] + public extern static IntPtr GetProcAddress(IntPtr hwnd, string procedureName); + #endregion 64 BIT OS DETECTION + + #region PRODUCT + private const int PRODUCT_UNDEFINED = 0x00000000; + private const int PRODUCT_ULTIMATE = 0x00000001; + private const int PRODUCT_HOME_BASIC = 0x00000002; + private const int PRODUCT_HOME_PREMIUM = 0x00000003; + private const int PRODUCT_ENTERPRISE = 0x00000004; + private const int PRODUCT_HOME_BASIC_N = 0x00000005; + private const int PRODUCT_BUSINESS = 0x00000006; + private const int PRODUCT_STANDARD_SERVER = 0x00000007; + private const int PRODUCT_DATACENTER_SERVER = 0x00000008; + private const int PRODUCT_SMALLBUSINESS_SERVER = 0x00000009; + private const int PRODUCT_ENTERPRISE_SERVER = 0x0000000A; + private const int PRODUCT_STARTER = 0x0000000B; + private const int PRODUCT_DATACENTER_SERVER_CORE = 0x0000000C; + private const int PRODUCT_STANDARD_SERVER_CORE = 0x0000000D; + private const int PRODUCT_ENTERPRISE_SERVER_CORE = 0x0000000E; + private const int PRODUCT_ENTERPRISE_SERVER_IA64 = 0x0000000F; + private const int PRODUCT_BUSINESS_N = 0x00000010; + private const int PRODUCT_WEB_SERVER = 0x00000011; + private const int PRODUCT_CLUSTER_SERVER = 0x00000012; + private const int PRODUCT_HOME_SERVER = 0x00000013; + private const int PRODUCT_STORAGE_EXPRESS_SERVER = 0x00000014; + private const int PRODUCT_STORAGE_STANDARD_SERVER = 0x00000015; + private const int PRODUCT_STORAGE_WORKGROUP_SERVER = 0x00000016; + private const int PRODUCT_STORAGE_ENTERPRISE_SERVER = 0x00000017; + private const int PRODUCT_SERVER_FOR_SMALLBUSINESS = 0x00000018; + private const int PRODUCT_SMALLBUSINESS_SERVER_PREMIUM = 0x00000019; + private const int PRODUCT_HOME_PREMIUM_N = 0x0000001A; + private const int PRODUCT_ENTERPRISE_N = 0x0000001B; + private const int PRODUCT_ULTIMATE_N = 0x0000001C; + private const int PRODUCT_WEB_SERVER_CORE = 0x0000001D; + private const int PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT = 0x0000001E; + private const int PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY = 0x0000001F; + private const int PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING = 0x00000020; + private const int PRODUCT_SERVER_FOUNDATION = 0x00000021; + private const int PRODUCT_HOME_PREMIUM_SERVER = 0x00000022; + private const int PRODUCT_SERVER_FOR_SMALLBUSINESS_V = 0x00000023; + private const int PRODUCT_STANDARD_SERVER_V = 0x00000024; + private const int PRODUCT_DATACENTER_SERVER_V = 0x00000025; + private const int PRODUCT_ENTERPRISE_SERVER_V = 0x00000026; + private const int PRODUCT_DATACENTER_SERVER_CORE_V = 0x00000027; + private const int PRODUCT_STANDARD_SERVER_CORE_V = 0x00000028; + private const int PRODUCT_ENTERPRISE_SERVER_CORE_V = 0x00000029; + private const int PRODUCT_HYPERV = 0x0000002A; + private const int PRODUCT_STORAGE_EXPRESS_SERVER_CORE = 0x0000002B; + private const int PRODUCT_STORAGE_STANDARD_SERVER_CORE = 0x0000002C; + private const int PRODUCT_STORAGE_WORKGROUP_SERVER_CORE = 0x0000002D; + private const int PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE = 0x0000002E; + private const int PRODUCT_STARTER_N = 0x0000002F; + private const int PRODUCT_PROFESSIONAL = 0x00000030; + private const int PRODUCT_PROFESSIONAL_N = 0x00000031; + private const int PRODUCT_SB_SOLUTION_SERVER = 0x00000032; + private const int PRODUCT_SERVER_FOR_SB_SOLUTIONS = 0x00000033; + private const int PRODUCT_STANDARD_SERVER_SOLUTIONS = 0x00000034; + private const int PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE = 0x00000035; + private const int PRODUCT_SB_SOLUTION_SERVER_EM = 0x00000036; + private const int PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM = 0x00000037; + private const int PRODUCT_SOLUTION_EMBEDDEDSERVER = 0x00000038; + private const int PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE = 0x00000039; + //private const int ???? = 0x0000003A; + private const int PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT = 0x0000003B; + private const int PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL = 0x0000003C; + private const int PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC = 0x0000003D; + private const int PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC = 0x0000003E; + private const int PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE = 0x0000003F; + private const int PRODUCT_CLUSTER_SERVER_V = 0x00000040; + private const int PRODUCT_EMBEDDED = 0x00000041; + private const int PRODUCT_STARTER_E = 0x00000042; + private const int PRODUCT_HOME_BASIC_E = 0x00000043; + private const int PRODUCT_HOME_PREMIUM_E = 0x00000044; + private const int PRODUCT_PROFESSIONAL_E = 0x00000045; + private const int PRODUCT_ENTERPRISE_E = 0x00000046; + private const int PRODUCT_ULTIMATE_E = 0x00000047; + //private const int PRODUCT_UNLICENSED = 0xABCDABCD; + #endregion PRODUCT + + #region VERSIONS + private const int VER_NT_WORKSTATION = 1; + private const int VER_NT_DOMAIN_CONTROLLER = 2; + private const int VER_NT_SERVER = 3; + private const int VER_SUITE_SMALLBUSINESS = 1; + private const int VER_SUITE_ENTERPRISE = 2; + private const int VER_SUITE_TERMINAL = 16; + private const int VER_SUITE_DATACENTER = 128; + private const int VER_SUITE_SINGLEUSERTS = 256; + private const int VER_SUITE_PERSONAL = 512; + private const int VER_SUITE_BLADE = 1024; + #endregion VERSIONS + + #endregion PINVOKE + + #region SERVICE PACK + /// + /// Gets the service pack information of the operating system running on this computer. + /// + static public string ServicePack + { + get + { + string servicePack = String.Empty; + OSVERSIONINFOEX osVersionInfo = new OSVERSIONINFOEX(); + + osVersionInfo.dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX)); + + if (GetVersionEx(ref osVersionInfo)) + { + servicePack = osVersionInfo.szCSDVersion; + } + + return servicePack; + } + } + #endregion SERVICE PACK + + #region VERSION + #region BUILD + /// + /// Gets the build version number of the operating system running on this computer. + /// + static public int BuildVersion + { + get + { + return int.Parse(RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentBuildNumber", "0")); + } + } + #endregion BUILD + + #region FULL + #region STRING + /// + /// Gets the full version string of the operating system running on this computer. + /// + static public string VersionString + { + get + { + return Version.ToString(); + } + } + #endregion STRING + + #region VERSION + /// + /// Gets the full version of the operating system running on this computer. + /// + static public Version Version + { + get + { + return new Version(MajorVersion, MinorVersion, BuildVersion, RevisionVersion); + } + } + #endregion VERSION + #endregion FULL + + #region MAJOR + /// + /// Gets the major version number of the operating system running on this computer. + /// + static public int MajorVersion + { + get + { + if(IsWindows10()) + { + return 10; + } + string exactVersion = RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", ""); + if(!string.IsNullOrEmpty(exactVersion)) + { + string[] splitVersion = exactVersion.Split('.'); + return int.Parse(splitVersion[0]); + } + return Environment.OSVersion.Version.Major; + } + } + #endregion MAJOR + + #region MINOR + /// + /// Gets the minor version number of the operating system running on this computer. + /// + static public int MinorVersion + { + get + { + if (IsWindows10()) + { + return 0; + } + string exactVersion = RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", ""); + if (!string.IsNullOrEmpty(exactVersion)) + { + string[] splitVersion = exactVersion.Split('.'); + return int.Parse(splitVersion[1]); + } + return Environment.OSVersion.Version.Minor; + } + } + #endregion MINOR + + #region REVISION + /// + /// Gets the revision version number of the operating system running on this computer. + /// + static public int RevisionVersion + { + get + { + if(IsWindows10()) + { + return 0; + } + return Environment.OSVersion.Version.Revision; + } + } + #endregion REVISION + #endregion VERSION + + #region 64 BIT OS DETECTION + private static IsWow64ProcessDelegate GetIsWow64ProcessDelegate() + { + IntPtr handle = LoadLibrary("kernel32"); + + if (handle != IntPtr.Zero) + { + IntPtr fnPtr = GetProcAddress(handle, "IsWow64Process"); + + if (fnPtr != IntPtr.Zero) + { + return (IsWow64ProcessDelegate)Marshal.GetDelegateForFunctionPointer((IntPtr)fnPtr, typeof(IsWow64ProcessDelegate)); + } + } + + return null; + } + + private static bool Is32BitProcessOn64BitProcessor() + { + IsWow64ProcessDelegate fnDelegate = GetIsWow64ProcessDelegate(); + + if (fnDelegate == null) + { + return false; + } + + bool isWow64; + bool retVal = fnDelegate.Invoke(Process.GetCurrentProcess().Handle, out isWow64); + + if (retVal == false) + { + return false; + } + + return isWow64; + } + #endregion 64 BIT OS DETECTION + + #region Windows 10 Detection + + private static bool IsWindows10() + { + string productName = RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", ""); + if (productName.StartsWith("Windows 10", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + return false; + } + + #endregion + + #region Registry Methods + + private static string RegistryRead(string RegistryPath, string Field, string DefaultValue) + { + string rtn = ""; + string backSlash = ""; + string newRegistryPath = ""; + + try + { + RegistryKey OurKey = null; + string[] split_result = RegistryPath.Split('\\'); + + if (split_result.Length > 0) + { + split_result[0] = split_result[0].ToUpper(); // Make the first entry uppercase... + + if (split_result[0] == "HKEY_CLASSES_ROOT") OurKey = Registry.ClassesRoot; + else if (split_result[0] == "HKEY_CURRENT_USER") OurKey = Registry.CurrentUser; + else if (split_result[0] == "HKEY_LOCAL_MACHINE") OurKey = Registry.LocalMachine; + else if (split_result[0] == "HKEY_USERS") OurKey = Registry.Users; + else if (split_result[0] == "HKEY_CURRENT_CONFIG") OurKey = Registry.CurrentConfig; + + if (OurKey != null) + { + for (int i = 1; i < split_result.Length; i++) + { + newRegistryPath += backSlash + split_result[i]; + backSlash = "\\"; + } + + if (newRegistryPath != "") + { + //rtn = (string)Registry.GetValue(RegistryPath, "CurrentVersion", DefaultValue); + + OurKey = OurKey.OpenSubKey(newRegistryPath); + rtn = (string)OurKey.GetValue(Field, DefaultValue); + OurKey.Close(); + } + } + } + } + catch { } + + return rtn; + } + + #endregion Registry Methods + } +}