186 lines
5.7 KiB
C#
186 lines
5.7 KiB
C#
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Globalization;
|
|||
|
using System.Management;
|
|||
|
using System.Windows;
|
|||
|
using EonaCat_WindowsKeyViewer.Models.Objects;
|
|||
|
|
|||
|
namespace EonaCat_WindowsKeyViewer.Models
|
|||
|
{
|
|||
|
public class WindowsModel
|
|||
|
{
|
|||
|
private ArrayList _windowsCollection = new ArrayList();
|
|||
|
|
|||
|
internal string DecodeProductKey(byte[] digitalProductId)
|
|||
|
{
|
|||
|
int num;
|
|||
|
char[] characterArray = new char[]
|
|||
|
{
|
|||
|
'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R', 'T', 'V', 'W', 'X',
|
|||
|
'Y', '2', '3', '4', '6', '7', '8', '9'
|
|||
|
};
|
|||
|
|
|||
|
char[] characterArray2 = new char[0x1d];
|
|||
|
ArrayList list = new ArrayList();
|
|||
|
|
|||
|
for (num = 52; num <= 67; num++)
|
|||
|
{
|
|||
|
list.Add(digitalProductId[num]);
|
|||
|
}
|
|||
|
|
|||
|
for (num = 0x1c; num >= 0; num--)
|
|||
|
{
|
|||
|
if (((num + 1) % 6) == 0)
|
|||
|
{
|
|||
|
characterArray2[num] = '-';
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
int index = 0;
|
|||
|
|
|||
|
for (var i = 14; i >= 0; i--)
|
|||
|
{
|
|||
|
int num4 = (index << 8) | ((byte)list[i]);
|
|||
|
list[i] = (byte)(num4 / 24);
|
|||
|
index = num4 % 24;
|
|||
|
characterArray2[num] = characterArray[index];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return new string(characterArray2);
|
|||
|
}
|
|||
|
|
|||
|
public ArrayList WindowsList { get; set; } = new ArrayList();
|
|||
|
|
|||
|
public bool InformationRetrieved { get; private set; }
|
|||
|
|
|||
|
public void GetWindowsInformation()
|
|||
|
{
|
|||
|
WindowsList.Clear();
|
|||
|
|
|||
|
InformationRetrieved = false;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
|
|||
|
|
|||
|
var windows = new WindowsInformation();
|
|||
|
|
|||
|
foreach (var managementBaseObject in searcher.Get())
|
|||
|
{
|
|||
|
var managementObject = (ManagementObject) managementBaseObject;
|
|||
|
windows.Caption = managementObject["Caption"].ToString();
|
|||
|
windows.CountryCode = managementObject["CountryCode"].ToString();
|
|||
|
windows.BuildNumber = managementObject["BuildNumber"].ToString();
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
windows.CSDVersion = managementObject["CSDVersion"].ToString();
|
|||
|
}
|
|||
|
catch (NullReferenceException)
|
|||
|
{
|
|||
|
windows.CSDVersion = "Unknown, or no service pack installed";
|
|||
|
}
|
|||
|
|
|||
|
windows.Description = managementObject["Description"].ToString();
|
|||
|
windows.RegisteredUser = managementObject["RegisteredUser"].ToString();
|
|||
|
windows.InstallDate = managementObject["InstallDate"].ToString();
|
|||
|
|
|||
|
DateTime time = ToDateTime(windows.InstallDate);
|
|||
|
windows.InstallDate = time.AddTicks(-TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Ticks).ToLocalTime().ToString(CultureInfo.InvariantCulture);
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
windows.Organization = managementObject["Organization"].ToString();
|
|||
|
}
|
|||
|
catch (NullReferenceException)
|
|||
|
{
|
|||
|
windows.Organization = "";
|
|||
|
}
|
|||
|
|
|||
|
windows.SerialNumber = managementObject["SerialNumber"].ToString();
|
|||
|
windows.Version = managementObject["Version"].ToString();
|
|||
|
}
|
|||
|
|
|||
|
WindowsList.Add(windows);
|
|||
|
InformationRetrieved = true;
|
|||
|
}
|
|||
|
catch (Exception exception)
|
|||
|
{
|
|||
|
MessageBox.Show(exception.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static DateTime ToDateTime(string currentDate)
|
|||
|
{
|
|||
|
int year = DateTime.Now.Year;
|
|||
|
int month = 1;
|
|||
|
int day = 1;
|
|||
|
int hour = 0;
|
|||
|
int minute = 0;
|
|||
|
int second = 0;
|
|||
|
int millisecond = 0;
|
|||
|
string result = string.Empty;
|
|||
|
|
|||
|
if ((string.Empty == currentDate) || (currentDate == null))
|
|||
|
{
|
|||
|
return DateTime.MinValue;
|
|||
|
}
|
|||
|
|
|||
|
if (currentDate.Length != 0x19)
|
|||
|
{
|
|||
|
return DateTime.MinValue;
|
|||
|
}
|
|||
|
result = currentDate.Substring(0, 4);
|
|||
|
|
|||
|
if ("****" != result)
|
|||
|
{
|
|||
|
year = int.Parse(result);
|
|||
|
}
|
|||
|
|
|||
|
result = currentDate.Substring(4, 2);
|
|||
|
|
|||
|
if ("**" != result)
|
|||
|
{
|
|||
|
month = int.Parse(result);
|
|||
|
}
|
|||
|
|
|||
|
result = currentDate.Substring(6, 2);
|
|||
|
|
|||
|
if ("**" != result)
|
|||
|
{
|
|||
|
day = int.Parse(result);
|
|||
|
}
|
|||
|
|
|||
|
result = currentDate.Substring(8, 2);
|
|||
|
|
|||
|
if ("**" != result)
|
|||
|
{
|
|||
|
hour = int.Parse(result);
|
|||
|
}
|
|||
|
|
|||
|
result = currentDate.Substring(10, 2);
|
|||
|
|
|||
|
if ("**" != result)
|
|||
|
{
|
|||
|
minute = int.Parse(result);
|
|||
|
}
|
|||
|
|
|||
|
result = currentDate.Substring(12, 2);
|
|||
|
|
|||
|
if ("**" != result)
|
|||
|
{
|
|||
|
second = int.Parse(result);
|
|||
|
}
|
|||
|
|
|||
|
result = currentDate.Substring(15, 3);
|
|||
|
|
|||
|
if ("***" != result)
|
|||
|
{
|
|||
|
millisecond = int.Parse(result);
|
|||
|
}
|
|||
|
return new DateTime(year, month, day, hour, minute, second, millisecond);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|