[C++] Получаем CPU и GPU информация о ПК

Участник
Статус
Оффлайн
Регистрация
23 Фев 2017
Сообщения
613
Реакции[?]
507
Поинты[?]
0
Такое может понадобиться в разных целях, кому-то для логирования крашей в читах, а кому-то для другого.
Но если код для получения информации о CPU можно найти, то вот для получения GPU надо было лезть в дебри msdn

Для получения CPU

Код:
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; }
	}
	void GetCpu(string& output)
	{
		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));
				}
			}

			output = CPUBrandString;
		}
		catch (...) { return; }
	}
Вызывать так:
string str = "";
GetCpu(str); //Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz

Для GPU:

Код:
DISPLAY_DEVICEA dd;
dd.cb = sizeof(DISPLAY_DEVICEA);
EnumDisplayDevicesA(NULL, 0, &dd, EDD_GET_DEVICE_INTERFACE_NAME);
Использовать так:
string str = string(dd.DeviceString) //NVIDIA GeForce GTX 1060 6GB
 
Начинающий
Статус
Оффлайн
Регистрация
7 Янв 2018
Сообщения
25
Реакции[?]
3
Поинты[?]
0
Не знаю ли тема еще активна, но...

Решил, забыл добавить строчку:
Код:
using namespace std;
 
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
134
Реакции[?]
35
Поинты[?]
0
извини конечно но есть библиотека cpuid,где определенна функция __cpuid
 
Участник
Статус
Оффлайн
Регистрация
23 Фев 2017
Сообщения
613
Реакции[?]
507
Поинты[?]
0
извини конечно но есть библиотека cpuid,где определенна функция __cpuid
Я в начале пытался подключить, но словил проблемы с линковкой, пошел гуглить либу для подключения, а в результате попалась вот эта функция
 
Участник
Статус
Оффлайн
Регистрация
23 Фев 2017
Сообщения
613
Реакции[?]
507
Поинты[?]
0
Участник
Статус
Оффлайн
Регистрация
23 Фев 2017
Сообщения
613
Реакции[?]
507
Поинты[?]
0
Участник
Статус
Оффлайн
Регистрация
23 Фев 2017
Сообщения
613
Реакции[?]
507
Поинты[?]
0
Участник
Статус
Оффлайн
Регистрация
15 Апр 2017
Сообщения
396
Реакции[?]
194
Поинты[?]
0
Я предлагаю версию отсюда:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Я метод изменил, но концепт тот же. При этом функция из WinAPI вызывается лишь один раз (что для меня важно)
Я быстро пробежался глазами, вроде этот вариант не будет нормально работать с мультитредом(в отличие от моего)
 
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
134
Реакции[?]
35
Поинты[?]
0
Я быстро пробежался глазами, вроде этот вариант не будет нормально работать с мультитредом(в отличие от моего)
причем тут мультирендер?cpuid получает инфу прямо с процессора
 
Участник
Статус
Оффлайн
Регистрация
23 Фев 2017
Сообщения
613
Реакции[?]
507
Поинты[?]
0
Я быстро пробежался глазами, вроде этот вариант не будет нормально работать с мультитредом(в отличие от моего)
Не смотря на то что он это написал, функция отображает тоже самое что и в обычном диспетчере. Твой же вариант обладает кучей вызовов из WinApi, в таком случае, я бы писал typedef для каждого, а потом курил msdn чтобы посмотреть в какой dll они лежат
 
Участник
Статус
Оффлайн
Регистрация
15 Апр 2017
Сообщения
396
Реакции[?]
194
Поинты[?]
0
Не смотря на то что он это написал, функция отображает тоже самое что и в обычном диспетчере. Твой же вариант обладает кучей вызовов из WinApi, в таком случае, я бы писал typedef для каждого, а потом курил msdn чтобы посмотреть в какой dll они лежат
Зачем это нужно (тайпдефы), если все уже в файлике windows.h есть ?
 
Участник
Статус
Оффлайн
Регистрация
23 Фев 2017
Сообщения
613
Реакции[?]
507
Поинты[?]
0
oooh my...
Пользователь
Статус
Оффлайн
Регистрация
5 Янв 2018
Сообщения
168
Реакции[?]
66
Поинты[?]
0
Для cpu делается через GetSystemTimes, а для gpu ты хочешь определить кол-во занятой видеопамяти?
Да, нашёл как получить полностью сколько видеопамяти, а как узнать сколько свободно/занято хз
 
Сверху Снизу