20230811-1

This commit is contained in:
2023-08-11 21:19:41 +03:00
parent 42530c234d
commit 4c697863fa
19 changed files with 75 additions and 45 deletions

View File

@@ -0,0 +1,59 @@
using anbs_cp.OsInfo.Enums;
using anbs_cp.OsInfo.Interfaces;
namespace anbs_cp.OsInfo.Classes;
/// <summary>
/// Информация о дисках
/// </summary>
public sealed class OsDriveInfo: IOsDriveInfo
{
/// <summary>
/// Конструктор
/// </summary>
public OsDriveInfo ()
{
Type = EDriveType.DtHardDisc;
Caption = null;
Description = null;
DeviceId = null;
Name = null;
Model = null;
TotalSize = 0;
}
/// <summary>
/// Тип диска
/// </summary>
public EDriveType Type { get; set; }
/// <summary>
/// Заголовок
/// </summary>
public string? Caption { get; set; }
/// <summary>
/// Описание
/// </summary>
public string? Description { get; set; }
/// <summary>
/// Идентификатор устройства
/// </summary>
public string? DeviceId { get; set; }
/// <summary>
/// Имя устройства
/// </summary>
public string? Name { get; set; }
/// <summary>
/// Модель
/// </summary>
public string? Model { get; set; }
/// <summary>
/// Общий размер
/// </summary>
public ulong TotalSize { get; set; }
}

View File

@@ -0,0 +1,402 @@
using System.Management;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using anbs_cp.Classes;
using anbs_cp.OsInfo.Enums;
using anbs_cp.OsInfo.Interfaces;
namespace anbs_cp.OsInfo.Classes;
/// <summary>
/// Информация о системе
/// </summary>
public static class OsInfo
{
/// <summary>
/// Конструктор
/// </summary>
static OsInfo ()
{
Windows = GetWindowsInfo();
Processors = GetProcessors();
RAM = GetRAMs();
Videos = GetVideoAdapterInfos();
Drives = GetDriveInfos();
Net = GetNet();
}
/// <summary>
/// Информация о Windows
/// </summary>
public static IOsWindowsInfo Windows { get; }
/// <summary>
/// Список с информацией о процессоре(-ах)
/// </summary>
public static List<IOsProcessorInfo> Processors { get; }
/// <summary>
/// Количество оперативной памяти в байтах
/// </summary>
public static ulong RAM { get; }
/// <summary>
/// Видеоадаптеры
/// </summary>
public static List<IOsVideoAdapterInfo> Videos { get; }
/// <summary>
/// Диски
/// </summary>
public static List<IOsDriveInfo> Drives { get; set; }
/// <summary>
/// Сеть
/// </summary>
public static List<IOsNetInfo> Net { get; set; }
#region Служебные методы
/// <summary>
/// Получает информацию о Windows
/// </summary>
/// <returns></returns>
private static IOsWindowsInfo GetWindowsInfo () =>
new OsWindowsInfo
{
Version = Environment.OSVersion.ToString(),
Is64 = Environment.Is64BitOperatingSystem,
PcName = Environment.MachineName,
WindowsFolder = Environment.SystemDirectory
};
/// <summary>
/// Получение процессоров
/// </summary>
/// <returns>Список информации о процессорах</returns>
private static List<IOsProcessorInfo> GetProcessors ()
{
try
{
//Создаю результирующий список
List<IOsProcessorInfo> processorsList = new();
//Создаю классы менеджмента
ManagementClass management = new("Win32_Processor");
ManagementObjectCollection collection = management.GetInstances();
//Получаю число процессоров
int processorsCount = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["ProcessorId"].Value.ToString()).Count();
//Перебираю массив данных
for (int ind = 0; ind < processorsCount; ind++)
{
//Создаю элемент информации о процессоре
OsProcessorInfo processor = new()
{
Caption = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Caption"].Value.ToString()).ElementAtOrDefault(ind),
Description = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Description"].Value.ToString()).ElementAtOrDefault(ind),
DeviceId = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["DeviceID"].Value.ToString()).ElementAtOrDefault(ind),
Manufacturer = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Manufacturer"].Value.ToString()).ElementAtOrDefault(ind),
MaxClockSpeed = TypeConverter.StrToInt(collection.Cast<ManagementObject>()
.Select(static a =>
a.Properties["MaxClockSpeed"].Value.ToString())
.ElementAtOrDefault(ind) ??
"0"),
Name = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Name"].Value.ToString()).ElementAtOrDefault(ind),
NumberOfCores = TypeConverter.StrToInt(collection.Cast<ManagementObject>()
.Select(static a =>
a.Properties["NumberOfCores"].Value.ToString())
.ElementAtOrDefault(ind) ??
"0"),
NumberOfLogicalProcessors = TypeConverter.StrToInt(collection.Cast<ManagementObject>()
.Select(static a => a.Properties["NumberOfLogicalProcessors"].Value.ToString())
.ElementAtOrDefault(ind) ?? "0")
};
//Добавляю в список
processorsList.Add(processor);
}
//Возвращаю список
return processorsList;
}
catch (NullReferenceException)
{
return new();
}
}
/// <summary>
/// Получение общее количество оперативной памяти
/// </summary>
/// <returns>Список информации о количестве оперативной памяти</returns>
private static ulong GetRAMs ()
{
try
{
//Создаю классы менеджмента
ManagementClass management = new("Win32_ComputerSystem");
ManagementObjectCollection collection = management.GetInstances();
//Получаю результат
return TypeConverter.StrToUInt64(collection.Cast<ManagementObject>()
.Select(static a => a.Properties["TotalPhysicalMemory"].Value.ToString()).FirstOrDefault() ?? "0");
}
catch (NullReferenceException)
{
return 0;
}
}
/// <summary>
/// Получает список видеоадаптеров
/// </summary>
/// <returns>Список информации о видеоадаптерах</returns>
private static List<IOsVideoAdapterInfo> GetVideoAdapterInfos ()
{
try
{
//Создаю результирующий список
List<IOsVideoAdapterInfo> videosList = new();
//Создаю классы менеджмента
ManagementClass management = new("Win32_VideoController");
ManagementObjectCollection collection = management.GetInstances();
//Получаю число адаптеров
int count = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["DeviceID"].Value.ToString()).Count();
//Перебираю массив данных
for (int ind = 0; ind < count; ind++)
{
//Создаю элемент информации об адаптере
OsVideoAdapterInfo adapter = new()
{
Caption = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Caption"].Value.ToString()).ElementAtOrDefault(ind),
Description = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Description"].Value.ToString()).ElementAtOrDefault(ind),
DeviceId = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["DeviceID"].Value.ToString()).ElementAtOrDefault(ind),
AdapterRAM = TypeConverter.StrToInt(collection.Cast<ManagementObject>()
.Select(static a => a.Properties["AdapterRAM"].Value.ToString()).ElementAtOrDefault(ind) ?? "0"),
DriverDate = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["DriverDate"].Value.ToString()).ElementAtOrDefault(ind),
Name = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Name"].Value.ToString()).ElementAtOrDefault(ind),
CurrentResolution = (TypeConverter.StrToInt(collection.Cast<ManagementObject>()
.Select(static a => a.Properties["CurrentHorizontalResolution"].Value.ToString()).ElementAtOrDefault(ind) ?? "0"),
TypeConverter.StrToInt(collection.Cast<ManagementObject>()
.Select(static a => a.Properties["CurrentVerticalResolution"].Value.ToString())
.ElementAtOrDefault(ind) ?? "0")),
SystemName = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["SystemName"].Value.ToString()).ElementAtOrDefault(ind),
DriverVersion = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["DriverVersion"].Value.ToString()).ElementAtOrDefault(ind),
InstalledDisplayDrivers = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["InstalledDisplayDrivers"].Value.ToString()).ElementAtOrDefault(ind),
VideoProcessor = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["VideoProcessor"].Value.ToString()).ElementAtOrDefault(ind)
};
//Добавляю в список
videosList.Add(adapter);
}
//Возвращаю список
return videosList;
}
catch (NullReferenceException)
{
return new();
}
}
/// <summary>
/// Получает список дисков
/// </summary>
/// <returns>Список информации о дисках</returns>
private static List<IOsDriveInfo> GetDriveInfos ()
{
try
{
//Создаю результат
List<IOsDriveInfo> result = new();
//Добавление всех HDD/SSD дисков
result.AddRange(GetHDDs());
//Добавление всех CD/DVD/BD дисков
result.AddRange(GetCDRom());
//Вывожу список
return result;
}
catch (NullReferenceException)
{
return new();
}
}
/// <summary>
/// Получаю список HDD/SSD дисков
/// </summary>
/// <returns>Информация обо всех HDD/SSD дисках</returns>
private static List<IOsDriveInfo> GetHDDs ()
{
try
{
//Создаю результирующий список
List<IOsDriveInfo> driveList = new();
//Создаю классы менеджмента
ManagementClass management = new("Win32_DiskDrive");
ManagementObjectCollection collection = management.GetInstances();
//Получаю число адаптеров
int count = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["DeviceID"].Value.ToString()).Count();
//Перебираю массив данных
for (int ind = 0; ind < count; ind++)
{
//Создаю элемент информации об адаптере
OsDriveInfo drive = new()
{
Type = EDriveType.DtHardDisc,
Caption = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Caption"].Value.ToString()).ElementAtOrDefault(ind),
Description = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Description"].Value.ToString()).ElementAtOrDefault(ind),
DeviceId = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["DeviceID"].Value.ToString()).ElementAtOrDefault(ind),
Name = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Name"].Value.ToString()).ElementAtOrDefault(ind),
TotalSize = TypeConverter.StrToUInt64(collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Size"].Value.ToString()).ElementAtOrDefault(ind) ?? "0"),
Model = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Model"].Value.ToString()).ElementAtOrDefault(ind)
};
//Добавляю в список
driveList.Add(drive);
}
//Возвращаю список
return driveList;
}
catch (NullReferenceException)
{
return new();
}
}
/// <summary>
/// Получаю список CD/DVD/BD дисков
/// </summary>
/// <returns>Информация обо всех CD/DVD/BD дисках</returns>
private static List<IOsDriveInfo> GetCDRom ()
{
try
{
//Создаю результирующий список
List<IOsDriveInfo> driveList = new();
//Создаю классы менеджмента
ManagementClass management = new("Win32_CDROMDrive");
ManagementObjectCollection collection = management.GetInstances();
//Получаю число адаптеров
int count = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["DeviceID"].Value.ToString()).Count();
//Перебираю массив данных
for (int ind = 0; ind < count; ind++)
{
//Создаю элемент информации об адаптере
OsDriveInfo drive = new()
{
Type = EDriveType.DtCDRom,
Caption = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Caption"].Value.ToString()).ElementAtOrDefault(ind),
Description = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Description"].Value.ToString()).ElementAtOrDefault(ind),
DeviceId = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["DeviceID"].Value.ToString()).ElementAtOrDefault(ind),
Name = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Name"].Value.ToString()).ElementAtOrDefault(ind),
//Ставится 0, чтобы не проверять корректность загрузки и читаемость диска, а также избежать удлинения получения информации
TotalSize = 0,
Model = collection.Cast<ManagementObject>()
.Select(static a => a.Properties["Manufacturer"].Value.ToString()).ElementAtOrDefault(ind)
};
//Добавляю в список
driveList.Add(drive);
}
//Возвращаю список
return driveList;
}
catch (NullReferenceException)
{
return new();
}
}
/// <summary>
/// Получаю информацию о сети интернет
/// </summary>
/// <returns>Информация о сети интернет</returns>
private static List<IOsNetInfo> GetNet ()
{
try
{
//Создаю результирующий список
List<IOsNetInfo> netList = new();
//Получаю информацию о всех сетевых интерфейсах
foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
{
//Создаю элемент
OsNetInfo netInfo = new()
{
Name = adapter.Name,
Description = adapter.Description,
MacAddress = adapter.OperationalStatus == OperationalStatus.Up
? adapter.GetPhysicalAddress().ToString()
: null
};
//Получаю IP-адрес
foreach (UnicastIPAddressInformation info in adapter.GetIPProperties().UnicastAddresses.Where(
static info =>
info.Address.AddressFamily == AddressFamily.InterNetwork && info.IsDnsEligible))
{
if (!string.IsNullOrWhiteSpace(netInfo.IPAddress))
netInfo.IPAddress += ";";
netInfo.IPAddress += info.Address.ToString();
}
//Добавляю адаптер
netList.Add(netInfo);
}
//Возвращаю список
return netList;
}
catch (NullReferenceException)
{
return new();
}
}
#endregion
}

View File

@@ -0,0 +1,39 @@
using anbs_cp.OsInfo.Interfaces;
namespace anbs_cp.OsInfo.Classes;
/// <summary>
/// Информация об интернет-соединении
/// </summary>
public sealed class OsNetInfo: IOsNetInfo
{
/// <summary>
/// Заголовок
/// </summary>
public string? Caption { get => Name; set => _ = value; }
/// <summary>
/// Описание
/// </summary>
public string? Description { get; set; }
/// <summary>
/// Идентификатор устройства
/// </summary>
public string? DeviceId { get => Name; set => _ = value; }
/// <summary>
/// Имя устройства
/// </summary>
public string? Name { get; set; }
/// <summary>
/// IP-адрес
/// </summary>
public string? IPAddress { get; set; }
/// <summary>
/// MAC-адрес
/// </summary>
public string? MacAddress { get; set; }
}

View File

@@ -0,0 +1,64 @@
using anbs_cp.OsInfo.Interfaces;
namespace anbs_cp.OsInfo.Classes;
/// <summary>
/// Класс информации о процессоре
/// </summary>
public sealed class OsProcessorInfo: IOsProcessorInfo
{
/// <summary>
/// Конструктор
/// </summary>
public OsProcessorInfo ()
{
Caption = null;
Description = null;
DeviceId = null;
Manufacturer = null;
MaxClockSpeed = 0;
Name = null;
NumberOfCores = 0;
NumberOfLogicalProcessors = 0;
}
/// <summary>
/// Заголовок
/// </summary>
public string? Caption { get; set; }
/// <summary>
/// Описание
/// </summary>
public string? Description { get; set; }
/// <summary>
/// Идентификатор процессора в системе
/// </summary>
public string? DeviceId { get; set; }
/// <summary>
/// Производитель
/// </summary>
public string? Manufacturer { get; set; }
/// <summary>
/// Максимальная тактовая частота
/// </summary>
public int MaxClockSpeed { get; set; }
/// <summary>
/// Имя процессора
/// </summary>
public string? Name { get; set; }
/// <summary>
/// Число ядер
/// </summary>
public int NumberOfCores { get; set; }
/// <summary>
/// Число потоков
/// </summary>
public int NumberOfLogicalProcessors { get; set; }
}

View File

@@ -0,0 +1,82 @@
using anbs_cp.OsInfo.Interfaces;
namespace anbs_cp.OsInfo.Classes;
/// <summary>
/// Информация о видеокарте
/// </summary>
internal sealed class OsVideoAdapterInfo: IOsVideoAdapterInfo
{
/// <summary>
/// Конструктор
/// </summary>
public OsVideoAdapterInfo ()
{
AdapterRAM = 0;
Caption = null;
CurrentResolution = (0, 0);
Description = null;
DeviceId = null;
DriverDate = null;
DriverVersion = null;
InstalledDisplayDrivers = null;
Name = null;
SystemName = null;
VideoProcessor = null;
}
/// <summary>
/// Память
/// </summary>
public int AdapterRAM { get; set; }
/// <summary>
/// Заголовок
/// </summary>
public string? Caption { get; set; }
/// <summary>
/// Текущее разрешение
/// </summary>
public (int, int) CurrentResolution { get; set; }
/// <summary>
/// Описание
/// </summary>
public string? Description { get; set; }
/// <summary>
/// Идентификатор устройства
/// </summary>
public string? DeviceId { get; set; }
/// <summary>
/// Дата установки драйвера
/// </summary>
public string? DriverDate { get; set; }
/// <summary>
/// Версия драйвера
/// </summary>
public string? DriverVersion { get; set; }
/// <summary>
/// Название драйверов
/// </summary>
public string? InstalledDisplayDrivers { get; set; }
/// <summary>
/// Имя
/// </summary>
public string? Name { get; set; }
/// <summary>
/// Имя в системе
/// </summary>
public string? SystemName { get; set; }
/// <summary>
/// Видео процессор
/// </summary>
public string? VideoProcessor { get; set; }
}

View File

@@ -0,0 +1,62 @@
using anbs_cp.OsInfo.Interfaces;
namespace anbs_cp.OsInfo.Classes;
/// <summary>
/// Информация о Windows
/// </summary>
public sealed class OsWindowsInfo: IOsWindowsInfo
{
/// <summary>
/// Конструктор
///</summary>
public OsWindowsInfo ()
{
Version = null;
Is64 = true;
PcName = null;
WindowsFolder = null;
}
/// <summary>
/// Версия
/// </summary>
public string? Version { get; set; }
/// <summary>
/// 64-разрядная ОС
/// </summary>
public bool Is64 { get; set; }
/// <summary>
/// Имя компьютера
/// </summary>
public string? PcName { get; set; }
/// <summary>
/// Путь к папке Windows
/// </summary>
public string? WindowsFolder { get; set; }
#region Реализация интерфейса IBasicInfo
/// <summary>
/// Заголовок
/// </summary>
public string? Caption { get => Version; set => _ = value; }
/// <summary>
/// Описание
/// </summary>
public string? Description { get => Version; set => _ = value; }
/// <summary>
/// Идентификатор
/// </summary>
public string? DeviceId { get => Version; set => _ = value; }
/// <summary>
/// Имя
/// </summary>
public string? Name { get => Version; set => _ = value; }
#endregion
}