• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

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

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

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

Код:
Expand Collapse Copy
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:

Код:
Expand Collapse Copy
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
 
Не знаю ли тема еще активна, но...
248hZp8.png

Решил, забыл добавить строчку:
Код:
Expand Collapse Copy
using namespace std;
 
извини конечно но есть библиотека cpuid,где определенна функция __cpuid
 
еще бы нагруженность в % их получить
 
извини конечно но есть библиотека cpuid,где определенна функция __cpuid
Я в начале пытался подключить, но словил проблемы с линковкой, пошел гуглить либу для подключения, а в результате попалась вот эта функция
 
Я предлагаю версию отсюда:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Я метод изменил, но концепт тот же. При этом функция из WinAPI вызывается лишь один раз (что для меня важно)
Я быстро пробежался глазами, вроде этот вариант не будет нормально работать с мультитредом(в отличие от моего)
 
Я быстро пробежался глазами, вроде этот вариант не будет нормально работать с мультитредом(в отличие от моего)
причем тут мультирендер?cpuid получает инфу прямо с процессора
 
Я быстро пробежался глазами, вроде этот вариант не будет нормально работать с мультитредом(в отличие от моего)
Не смотря на то что он это написал, функция отображает тоже самое что и в обычном диспетчере. Твой же вариант обладает кучей вызовов из WinApi, в таком случае, я бы писал typedef для каждого, а потом курил msdn чтобы посмотреть в какой dll они лежат
 
Не смотря на то что он это написал, функция отображает тоже самое что и в обычном диспетчере. Твой же вариант обладает кучей вызовов из WinApi, в таком случае, я бы писал typedef для каждого, а потом курил msdn чтобы посмотреть в какой dll они лежат
Зачем это нужно (тайпдефы), если все уже в файлике windows.h есть ?
 
Для cpu делается через GetSystemTimes, а для gpu ты хочешь определить кол-во занятой видеопамяти?
Да, нашёл как получить полностью сколько видеопамяти, а как узнать сколько свободно/занято хз
 
Назад
Сверху Снизу