Исходник Получение информации о ПК на C#

Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
По просьбе хорошего знакомого делюсь с вами небольшим исходником получения информации о ПК с помощью стандартной библиотеки System.Management. В качестве альтернативы можно было использовать WinAPI, но, все же, это гораздо менее удобно, чем через встроенные классы.
Получение информации о компьютере в языке C# возможно с помощью WMI запросов. Windows Management Instrumentation (WMI) – это инструментарий управления Windows. WMI – это технология для мониторинга работы компьютерной инфраструктуры с помощью Windows.
Работа с WMI похожа на запросы к базе данных. Описание всех классов WMI и их свойств вы можете найти
Пожалуйста, авторизуйтесь для просмотра ссылки.
.

Включение библиотеки в проект.
Если в коде появляется
Пожалуйста, авторизуйтесь для просмотра ссылки.
(кликабельно), это значит, что вы не подключили библиотеку должным образом. Исправить это можно двумя способами:
1. Использовать "быстрые действия и рефакторинг" в Visual Studio. Если у вас появляется должная подсказка (
Пожалуйста, авторизуйтесь для просмотра ссылки.
), то можно расслабиться и позволить сделать среде разработки всю работу за вас. Нажимаем на необходимый пункт и переходим к коду :)
2. Если вам не повезло со средой, то единственным решением остается ручное добавление ссылки:
  • ПКМ по ссылкам в обозревателе решений (
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    )
  • "Добавить ссылку..." (
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    )
  • Переходим в "Сборки" и ставим галочку напротив System.Management (
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    )
  • Жмем "ОК" и радуемся жизни
Основные методы и функции.
Ключевую роль в программе будет играть функция получения заданной информации о компьютере:
C#:
private static List<string> GetHardwareInfo(string WIN32_Class, string ClassItemField)
{
    List<string> result = new List<string>();

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM " + WIN32_Class);

    try {
        foreach (ManagementObject obj in searcher.Get()) {
            result.Add(obj[ClassItemField].ToString().Trim());
        }
    }
    catch (Exception ex) {
        Console.WriteLine(ex.Message);
    }

    return result;
}
Также я добавлю метод, отображающий в консоли полученную информацию. Это поможет избежать большого количества повторяющегося кода:
C#:
private static void OutputResult(string info, List<string> result)
{
    Console.Write(info);
    Console.WriteLine(String.Join(", ", result));
}
Использования List<string> вместо простых строк поможет избежать проблем в работе на машинах с несколькими девайсами, например, видеокартами.

Использование.
Теперь можно спокойно получать любую информацию о пк пользователя с помощью написанных ранее методов:
C#:
public static void Main(string[] args)
{
    OutputResult("Процессор: ", GetHardwareInfo("Win32_Processor", "Name"));
    OutputResult("Производитель: ", GetHardwareInfo("Win32_Processor", "Manufacturer"));
    OutputResult("Описание: ", GetHardwareInfo("Win32_Processor", "Description"));
    OutputResult("Видеокарта: ", GetHardwareInfo("Win32_VideoController", "Name"));
    OutputResult("Версия драйвера: ", GetHardwareInfo("Win32_VideoController", "DriverVersion"));
    OutputResult("Объем памяти (в байтах): ", GetHardwareInfo("Win32_VideoController", "AdapterRAM"));
    OutputResult("Название дисковода: ", GetHardwareInfo("Win32_CDROMDrive", "Name"));
    OutputResult("Буква привода: ", GetHardwareInfo("Win32_CDROMDrive", "Drive"));
    OutputResult("Жесткий диск: ", GetHardwareInfo("Win32_DiskDrive", "Caption"));
    OutputResult("Объем (в байтах): ", GetHardwareInfo("Win32_DiskDrive", "Size"));
    Console.ReadKey();
}
Вывод:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Также вы можете получить, например загрузку оперативной памяти, возможности данной библиотеки огромны.
C#:
public static void Main(string[] args) {
    int ram = 0;
           
    ManagementObjectSearcher ramMonitor =    //запрос к WMI для получения памяти ПК
    new ManagementObjectSearcher("SELECT TotalVisibleMemorySize,FreePhysicalMemory FROM Win32_OperatingSystem");

    foreach (ManagementObject objram in ramMonitor.Get()) {
        ulong totalRam = Convert.ToUInt64(objram["TotalVisibleMemorySize"]);    //общая память ОЗУ
        ulong busyRam = totalRam - Convert.ToUInt64(objram["FreePhysicalMemory"]);         //занятная память = (total-free)
        ram += Convert.ToInt32(busyRam * 100 / totalRam); ;
    }

    Console.WriteLine($"Загрузка RAM: {ram}%");
    Console.ReadLine();
}

Если у вас есть интересные идеи для новых тем - обязательно отпишите мне, так вы поможете форуму в развитии.
 
ты долбаёб?
Начинающий
Статус
Оффлайн
Регистрация
19 Сен 2020
Сообщения
173
Реакции[?]
26
Поинты[?]
0
По просьбе хорошего знакомого делюсь с вами небольшим исходником получения информации о ПК с помощью стандартной библиотеки System.Management. В качестве альтернативы можно было использовать WinAPI, но, все же, это гораздо менее удобно, чем через встроенные классы.
Получение информации о компьютере в языке C# возможно с помощью WMI запросов. Windows Management Instrumentation (WMI) – это инструментарий управления Windows. WMI – это технология для мониторинга работы компьютерной инфраструктуры с помощью Windows.
Работа с WMI похожа на запросы к базе данных. Описание всех классов WMI и их свойств вы можете найти
Пожалуйста, авторизуйтесь для просмотра ссылки.
.

Включение библиотеки в проект.
Если в коде появляется
Пожалуйста, авторизуйтесь для просмотра ссылки.
(кликабельно), это значит, что вы не подключили библиотеку должным образом. Исправить это можно двумя способами:
1. Использовать "быстрые действия и рефакторинг" в Visual Studio. Если у вас появляется должная подсказка (
Пожалуйста, авторизуйтесь для просмотра ссылки.
), то можно расслабиться и позволить сделать среде разработки всю работу за вас. Нажимаем на необходимый пункт и переходим к коду :)
2. Если вам не повезло со средой, то единственным решением остается ручное добавление ссылки:
  • ПКМ по ссылкам в обозревателе решений (
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    )
  • "Добавить ссылку..." (
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    )
  • Переходим в "Сборки" и ставим галочку напротив System.Management (
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    )
  • Жмем "ОК" и радуемся жизни
Основные методы и функции.
Ключевую роль в программе будет играть функция получения заданной информации о компьютере:
C#:
private static List<string> GetHardwareInfo(string WIN32_Class, string ClassItemField)
{
    List<string> result = new List<string>();

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM " + WIN32_Class);

    try {
        foreach (ManagementObject obj in searcher.Get()) {
            result.Add(obj[ClassItemField].ToString().Trim());
        }
    }
    catch (Exception ex) {
        Console.WriteLine(ex.Message);
    }

    return result;
}
Также я добавлю метод, отображающий в консоли полученную информацию. Это поможет избежать большого количества повторяющегося кода:
C#:
private static void OutputResult(string info, List<string> result)
{
    Console.Write(info);
    Console.WriteLine(String.Join(", ", result));
}
Использования List<string> вместо простых строк поможет избежать проблем в работе на машинах с несколькими девайсами, например, видеокартами.

Использование.
Теперь можно спокойно получать любую информацию о пк пользователя с помощью написанных ранее методов:
C#:
public static void Main(string[] args)
{
    OutputResult("Процессор: ", GetHardwareInfo("Win32_Processor", "Name"));
    OutputResult("Производитель: ", GetHardwareInfo("Win32_Processor", "Manufacturer"));
    OutputResult("Описание: ", GetHardwareInfo("Win32_Processor", "Description"));
    OutputResult("Видеокарта: ", GetHardwareInfo("Win32_VideoController", "Name"));
    OutputResult("Версия драйвера: ", GetHardwareInfo("Win32_VideoController", "DriverVersion"));
    OutputResult("Объем памяти (в байтах): ", GetHardwareInfo("Win32_VideoController", "AdapterRAM"));
    OutputResult("Название дисковода: ", GetHardwareInfo("Win32_CDROMDrive", "Name"));
    OutputResult("Буква привода: ", GetHardwareInfo("Win32_CDROMDrive", "Drive"));
    OutputResult("Жесткий диск: ", GetHardwareInfo("Win32_DiskDrive", "Caption"));
    OutputResult("Объем (в байтах): ", GetHardwareInfo("Win32_DiskDrive", "Size"));
    Console.ReadKey();
}
Вывод:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Также вы можете получить, например загрузку оперативной памяти, возможности данной библиотеки огромны.
C#:
public static void Main(string[] args) {
    int ram = 0;
           
    ManagementObjectSearcher ramMonitor =    //запрос к WMI для получения памяти ПК
    new ManagementObjectSearcher("SELECT TotalVisibleMemorySize,FreePhysicalMemory FROM Win32_OperatingSystem");

    foreach (ManagementObject objram in ramMonitor.Get()) {
        ulong totalRam = Convert.ToUInt64(objram["TotalVisibleMemorySize"]);    //общая память ОЗУ
        ulong busyRam = totalRam - Convert.ToUInt64(objram["FreePhysicalMemory"]);         //занятная память = (total-free)
        ram += Convert.ToInt32(busyRam * 100 / totalRam); ;
    }

    Console.WriteLine($"Загрузка RAM: {ram}%");
    Console.ReadLine();
}

Если у вас есть интересные идеи для новых тем - обязательно отпишите мне, так вы поможете форуму в развитии.
Зачем? а главное нахуя?
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
пупс, поцелуй
Участник
Статус
Оффлайн
Регистрация
28 Май 2019
Сообщения
1,052
Реакции[?]
322
Поинты[?]
14K
С такими хорошими темами, можно и кристалл свой написать
Спасибо Irval❤:seemsgood:
 
#include <brain>
Забаненный
Статус
Оффлайн
Регистрация
29 Сен 2020
Сообщения
588
Реакции[?]
99
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сделай на с++
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Держи получение информации о CPU и GPU (оригинал - https://yougame.biz/threads/51879/):
C++:
#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

void __cpuid(int CPUInfo[4], int InfoType)
{
    try
    {
        __asm
        {
            mov    esi, CPUInfo
            mov    eax, InfoType
            xor ecx, ecx
            cpuid
            mov    dword ptr[esi + 0], eax
            mov    dword ptr[esi + 4], ebx
            mov    dword ptr[esi + 8], ecx
            mov    dword ptr[esi + 12], edx
        };
    }
    catch (...) { return; }
}

string GetCpu()
{
    try
    {
        int CPUInfo[4] = { -1 };
        __cpuid(CPUInfo, 0x80000000);
        unsigned int nExIds = CPUInfo[0];

        char CPUBrandString[0x40] = { 0 };
        for (unsigned int i = 0x80000000; i <= nExIds; ++i)
        {
            __cpuid(CPUInfo, i);
            if (i == 0x80000002)
            {
                memcpy(CPUBrandString,
                    CPUInfo,
                    sizeof(CPUInfo));
            }
            else if (i == 0x80000003)
            {
                memcpy(CPUBrandString + 16,
                    CPUInfo,
                    sizeof(CPUInfo));
            }
            else if (i == 0x80000004)
            {
                memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo));
            }
        }

        return CPUBrandString;
    }
    catch (...) { return ""; }
}

string GetGpu() {
    DISPLAY_DEVICEA dd;
    dd.cb = sizeof(DISPLAY_DEVICEA);
    EnumDisplayDevicesA(NULL, 0, &dd, EDD_GET_DEVICE_INTERFACE_NAME);
    return string(dd.DeviceString);
}

int main() {
    cout << GetCpu() << "\n" << GetGpu();
    _getch();
}
1619878059801.png
 
BOOMER
Забаненный
Статус
Оффлайн
Регистрация
13 Фев 2021
Сообщения
110
Реакции[?]
18
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Красавеееец!
 
Сверху Снизу