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
-
-
-
- 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
-
-
-
- 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
+ }
+}