Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Qual biblioteca utilizar para conseguir mostrar configurações do Hardware no C# ?

Olá!!

Estou querendo fazer um Benchmark, mostrando todas as informações de Hardware do computador separada por cada tópico (Processador, Memoria, Quantidade de threads do processador), mas não estou conseguindo descobrir qual Biblioteca utilizar para realizar esse projeto, alguém saberia me informar ?

Agradeço

5 respostas

Bom dia Nicolas, tudo bom?

Temos um conjunto de classes que podem te ajudar:

Para informações do sistema de arquivos:

  • System.IO.FileInfo
  • System.IO.DirectoryInfo
  • System.IO.DriveInfo
  • System.IO.Directory
  • System.IO.File

https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/file-system/how-to-get-information-about-files-folders-and-drives

Para informações de Memória:

  • GC

https://docs.microsoft.com/pt-br/dotnet/api/system.gc?view=net-6.0

Algumas informações sobre o ambiente:

Tem a disposição também o pacote:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Que me permite criar uma consulta ao sistema da seguinte forma:

ManagementObjectSearcher mos = 
    new ManagementObjectSearcher("select * from Win32_OperatingSystem");

foreach (var item in mos.Get())
{
 .....
}

https://docs.microsoft.com/pt-br/dotnet/api/system.management?view=dotnet-plat-ext-6.0

https://docs.microsoft.com/pt-br/windows/win32/cimwin32prov/win32-operatingsystem

Fiz alguns Helloworlds:

using System.Management;

Console.WriteLine("Informações do Computador");
Console.WriteLine("\n");
Console.WriteLine("============================================");
DriveInfo informacaoDrive = new DriveInfo(@"C:\");
Console.WriteLine($"Espaço Livre: {informacaoDrive.TotalFreeSpace}");
Console.WriteLine($"Volume: {informacaoDrive.Name}");
Console.WriteLine("\n");
Console.WriteLine("============================================");
Console.WriteLine($"Total de Memoria: {GC.GetTotalMemory(false)}");
Console.WriteLine("\n");
Console.WriteLine("============================================");
Console.WriteLine($"Número de Processos : {Environment.ProcessorCount}");
Console.WriteLine("\n");
Console.WriteLine("============================================");
Console.WriteLine($"Nome da Máquina : {Environment.MachineName}");
Console.WriteLine("\n");
Console.WriteLine("============================================");
Console.WriteLine($"Versão do SO : {Environment.OSVersion}");
Console.WriteLine("\n");
Console.WriteLine("============================================");
Console.WriteLine($"Versão do SO : {Environment.OSVersion}");
Console.WriteLine("\n");

Console.WriteLine("USANDO ManagementObject");
ManagementObjectSearcher mos = 
    new ManagementObjectSearcher("select * from Win32_OperatingSystem");

foreach (ManagementObject item in mos.Get())
{
    if (item["CSDVersion"]!=null)
    {
      Console.WriteLine(item["CSDVersion"].ToString());
    }
    if (item["OSType"] != null)
    {
        Console.WriteLine(item["OSType"].ToString());
    }
    if (item["SerialNumber"] != null)
    {
        Console.WriteLine(item["SerialNumber"].ToString());
    }
    if (item["OSLanguage"] != null)
    {
        Console.WriteLine(item["OSLanguage"].ToString());
    }
    if (item["BootDevice"] != null)
    {
        Console.WriteLine(item["BootDevice"].ToString());
    }
    if (item["CurrentTimeZone"] != null)
    {
        Console.WriteLine(item["CurrentTimeZone"].ToString());
    }
    if (item["Distributed"] != null)
    {
        Console.WriteLine(item["Distributed"].ToString());
    }
    if (item["Organization"] != null)
    {
        Console.WriteLine(item["Organization"].ToString());
    }
}

Dê uma olhada neste link também:

https://stackoverflow.com/questions/4742389/get-pc-system-information-on-windows-machine

Espero que possa ajudar! Qualquer dúvida estamos a disposição.

Att.

DeviceId

Esta biblioteca é bem legal

https://www.nuget.org/packages/DeviceId/

https://github.com/MatthewKing/DeviceId

Exemplo

string deviceId = new DeviceIdBuilder()
                    .AddProcessorId()
                    .AddMacAddress(excludeNonPhysical: true, excludeWireless: true)
                    .UseFormatter(new StringDeviceIdFormatter(new PlainTextDeviceIdComponentEncoder()))
                    .ToString();

Robson, bom dia!

Muito obrigado pela contribuição!

Att.

Boa tarde, André !!

Obrigado pelo suporte, saberia me informar se realizando a criação pelo Aplicativo de área de trabalho (Windows Forms) o processo seria o mesmo que do Console ? teria como dar um pequeno exemplo se possível ?

Agradeço muito pela ajuda !!

Att Nicolas.

solução!

Boa noite Nicolas, tudo bom?

É possível sim, montei um exemplo usando o Windows Forms:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Dando dois clicks no botão fui para a área de código e implementei usando alguns dos exemplos do post acima:

namespace ExemploDadosMaquina
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = CarregarDados();
        }

        private string CarregarDados()
        {
            DriveInfo informacaoDrive = new DriveInfo(@"C:\");

            return
                $"Informações do Computador \n" +
                $"============================================\n" +
                $"Espaço Livre: {informacaoDrive.TotalFreeSpace}\n" +
                "============================================\n" +
                $"Volume: {informacaoDrive.Name}\n" +
                "============================================\n" +
                $"Total de Memoria: {GC.GetTotalMemory(false)}\n" +
                $"============================================\n" +
                $"Número de Processos : {Environment.ProcessorCount}\n" +
                $"============================================\n" +
                $"Nome da Máquina : {Environment.MachineName}\n" +
                $"============================================\n" +
                $"Versão do SO : {Environment.OSVersion}\n";      
        }
    }
}

A saída executando o helloworld é:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Usei o VS 2022 e .NET 6, espero que ajude camarada, tente fazer algo usando a dica do Robson também parece ser bem interessante as libs que ele mencionou!

Qualquer dúvida chama a gente aqui no fórum!

Abs

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software