using System.Management; using System.Runtime.InteropServices; namespace VisitorSystemInfo; public sealed class MainForm : Form { private readonly Label _osValue; private readonly Label _cpuValue; private readonly Label _gpuValue; private readonly Label _ramValue; public MainForm() { Text = "Systeminfo"; StartPosition = FormStartPosition.CenterScreen; MinimumSize = new Size(720, 420); BackColor = Color.FromArgb(8, 20, 26); ForeColor = Color.FromArgb(241, 255, 253); Font = new Font("Segoe UI", 10F, FontStyle.Regular, GraphicsUnit.Point); var title = new Label { AutoSize = true, Font = new Font("Segoe UI Semibold", 22F, FontStyle.Bold, GraphicsUnit.Point), Text = "Systeminfo", ForeColor = Color.FromArgb(118, 225, 214), Margin = new Padding(0, 0, 0, 8), }; var subtitle = new Label { AutoSize = true, MaximumSize = new Size(640, 0), Text = "Visar datorns operativsystem, CPU, GPU och RAM direkt i Windows.", ForeColor = Color.FromArgb(155, 201, 196), Margin = new Padding(0, 0, 0, 18), }; var layout = new TableLayoutPanel { Dock = DockStyle.Fill, ColumnCount = 1, RowCount = 6, Padding = new Padding(24), BackColor = Color.FromArgb(8, 20, 26), }; layout.Controls.Add(title); layout.Controls.Add(subtitle); _osValue = AddInfoCard(layout, "OS"); _cpuValue = AddInfoCard(layout, "CPU"); _gpuValue = AddInfoCard(layout, "GPU"); _ramValue = AddInfoCard(layout, "RAM"); Controls.Add(layout); Load += (_, _) => PopulateInfo(); } private static Label AddInfoCard(TableLayoutPanel layout, string labelText) { var card = new Panel { Height = 68, Width = 640, Margin = new Padding(0, 0, 0, 12), Padding = new Padding(16, 12, 16, 12), BackColor = Color.FromArgb(15, 38, 49), }; var label = new Label { AutoSize = true, Text = labelText, Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point), ForeColor = Color.FromArgb(255, 209, 102), Dock = DockStyle.Top, }; var value = new Label { AutoEllipsis = true, Dock = DockStyle.Bottom, Height = 26, Text = "Läser in...", ForeColor = Color.FromArgb(241, 255, 253), }; card.Controls.Add(value); card.Controls.Add(label); layout.Controls.Add(card); return value; } private void PopulateInfo() { _osValue.Text = GetOsName(); _cpuValue.Text = QueryFirst("Win32_Processor", "Name"); _gpuValue.Text = QueryJoined("Win32_VideoController", "Name"); _ramValue.Text = GetRamText(); } private static string GetOsName() { var caption = QueryFirst("Win32_OperatingSystem", "Caption"); var version = QueryFirst("Win32_OperatingSystem", "Version"); if (!string.IsNullOrWhiteSpace(caption) && !string.IsNullOrWhiteSpace(version)) { return $"{caption} ({version})"; } return RuntimeInformation.OSDescription; } private static string GetRamText() { try { using var searcher = new ManagementObjectSearcher("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem"); foreach (ManagementObject obj in searcher.Get()) { if (obj["TotalPhysicalMemory"] is not null && ulong.TryParse(obj["TotalPhysicalMemory"].ToString(), out var totalBytes)) { var gib = totalBytes / 1024d / 1024d / 1024d; return $"{gib:F1} GB"; } } } catch { } return "Okänt"; } private static string QueryFirst(string className, string propertyName) { try { using var searcher = new ManagementObjectSearcher($"SELECT {propertyName} FROM {className}"); foreach (ManagementObject obj in searcher.Get()) { var value = obj[propertyName]?.ToString(); if (!string.IsNullOrWhiteSpace(value)) { return value.Trim(); } } } catch { } return "Okänt"; } private static string QueryJoined(string className, string propertyName) { try { using var searcher = new ManagementObjectSearcher($"SELECT {propertyName} FROM {className}"); var values = new List(); foreach (ManagementObject obj in searcher.Get()) { var value = obj[propertyName]?.ToString(); if (!string.IsNullOrWhiteSpace(value)) { values.Add(value.Trim()); } } if (values.Count > 0) { return string.Join(", ", values.Distinct(StringComparer.OrdinalIgnoreCase)); } } catch { } return "Okänt"; } }