Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Кирилл2100
1 / 1 / 0
Регистрация: 29.08.2013
Сообщений: 48
#1

Определение процессора без доступа к реестру - C++

24.06.2014, 09:35. Просмотров 909. Ответов 9
Метки нет (Все метки)

Необходимо получить строку
Процессор: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
Через регистр делается все крайне просто

C++
1
2
3
4
5
6
AnsiString ProcessorName;
TRegistry *reg = new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey(«Hardware\\Description\\System\\CentralProcessor\», false);
ProcessorName=reg->ReadString(«ProcessorNameString»);
delete reg;
Однако не на всех учетках есть доступ к регистру.

Нашел функцию cpuid, но уже который час пытаюсь ее завести, но желаемая строка не формируется. Если кто уже сталкивался с cpuid, подскажите пожалста

Добавлено через 22 минуты
Возможно ли получить эту информацию через диспетчер устройств?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2014, 09:35     Определение процессора без доступа к реестру
Посмотрите здесь:
Программное разрешение/запрет доступа к реестру C++ WinAPI
C++ Builder Права доступа к определенным веткам реестра.Доступ к реестру.
Visual C++ Определение частоты процессора
C++ Определение колличества ядер процессора
Определение частоты процессора в реальном времени C++ Builder
Visual C++ Курсовой Visual C++. Определение типа, скорости процессора
Определение типа процессора, в какой версии запускать лучше? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
24.06.2014, 09:45     Определение процессора без доступа к реестру #2
Цитата Сообщение от Кирилл2100 Посмотреть сообщение
Однако не на всех учетках есть доступ к регистру.
- к реестру а не регистру
Информация о системе посмотри пункты
Инфо о системе и Инфо о проце
Кирилл2100
1 / 1 / 0
Регистрация: 29.08.2013
Сообщений: 48
24.06.2014, 10:39  [ТС]     Определение процессора без доступа к реестру #3
Да, реестр. Заговариваюсь уже.

За код спасибо. Получил окошко такого вида:
Определение процессора без доступа к реестру

Из него возможно получить информацию вида:
Процессор: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
?
-=ЮрА=-
Заблокирован
Автор FAQ
24.06.2014, 20:25     Определение процессора без доступа к реестру #4
Кирилл2100, неужели не видишь что в коде использована АПИ функция?
void WINAPI GetSystemInfo(
_Out_ LPSYSTEM_INFO lpSystemInfo
);
идёшь в справку по ней
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
и смотришь что выходным параметром функции являются поля структуры SYSTEM_INFO
на той же странице идёшь по линку на расшифровку полей структуры
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
и читай конкретное значений полей структуры Members там же всё написано!
_lunar_
1230 / 1156 / 80
Регистрация: 03.05.2011
Сообщений: 2,788
Записей в блоге: 3
Завершенные тесты: 1
24.06.2014, 20:42     Определение процессора без доступа к реестру #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Кирилл2100 Посмотреть сообщение
Нашел функцию cpuid, но уже который час пытаюсь ее завести, но желаемая строка не формируется. Если кто уже сталкивался с cpuid, подскажите пожалста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
 
using namespace std;
 
void main()
{
    int CPUInfo[4] = { -1 };
 
    __cpuid(CPUInfo, 0x80000000);
 
    unsigned int ID = CPUInfo[0];
 
    char CPUName[0x256] = { 0 };
 
    for (unsigned int i = 0x80000000; i <= ID; ++i)
    {
        __cpuid(CPUInfo, i);
 
        if (i == 0x80000002)
            memcpy(CPUName, CPUInfo, sizeof(CPUInfo));
 
        else if (i == 0x80000003)
            memcpy(CPUName + 16, CPUInfo, sizeof(CPUInfo));
 
        else if (i == 0x80000004)
            memcpy(CPUName + 32, CPUInfo, sizeof(CPUInfo));
    }
 
    cout << CPUName << endl;
 
    cin.get();
}
на всякий случай, для GPU есть amp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <amp.h>
 
using namespace std;
using namespace concurrency;
 
void main()
{
    accelerator GPUName;
    wcout << GPUName.description << endl;
 
    cin.get();
}
Убежденный
Системный программист
Эксперт С++
15248 / 6880 / 1092
Регистрация: 02.05.2013
Сообщений: 11,260
Завершенные тесты: 1
24.06.2014, 21:58     Определение процессора без доступа к реестру #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Кирилл2100 Посмотреть сообщение
Однако не на всех учетках есть доступ к регистру.
К этим разделам доступ на чтение есть у всех учеток.
Кирилл2100
1 / 1 / 0
Регистрация: 29.08.2013
Сообщений: 48
25.06.2014, 08:32  [ТС]     Определение процессора без доступа к реестру #7
Юра,я эту структуру знаю и всю ее посмотрел. Нужную строку через нее я получить не смог. Поэтому и спрашиваю.
_lunar_, спасибо большое за пример. Обязательно попробую.
Убежденный, спасибо тебе огромное! Нашел твои комментарий "Для чтения реестра достаточно KEY_READ." и все пошло. Жаль вчера не нашел это сразу, так не пришлось бы день тратить.

Стало быть конечный вариант:

C++
1
2
3
4
TRegistry *reg = new TRegistry(KEY_READ);
 reg->RootKey = HKEY_LOCAL_MACHINE;
 reg->OpenKeyReadOnly("Hardware\\Description\\System\\CentralProcessor\\0");
 AnsiString ProcessorName = reg->ReadString("ProcessorNameString");
-=ЮрА=-
Заблокирован
Автор FAQ
25.06.2014, 10:02     Определение процессора без доступа к реестру #8
Цитата Сообщение от Кирилл2100 Посмотреть сообщение
Юра,я эту структуру знаю и всю ее посмотрел. Нужную строку через нее я получить не смог. Поэтому и спрашиваю.
- SystemInfo позволяет установить архитектуру процессора, чипсет и много остальных парамтров. Если ты не собираешся писать софт который использует непосредственный токен
Цитата Сообщение от Кирилл2100 Посмотреть сообщение
Процессор: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
то поля SYSTEM_INFO позволяют сказать сразу сказать, что за железо стоит на борту, в то время как в токене
Процессор: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
- данные о процессоре ещё нужно поискать и извлечь!
Скажем у тебя двухядерный AMD скажи если будет записано AMD 3.2 GHz Duo что это тебе даст?
А если я сам возьму и изменю ветку реестра написав там "Процессор бла бла бла", сможешь определить характеристики?
Вот для таких случаев и служит SYSTEM_INFO которая даёт однозначный ответ - процессор такой-то архитектуры с таким-то чипсетом такого-то класса. Единственный случай когда мог бы пригодиться строковый токен - это создания ключа для привязки софта к конкретному железу, да и то тут можно было обойтись тем что в SYSTEM_INFO записано.
Касательно твоей проблеммы у тебя были записаны неверно кавычки
Цитата Сообщение от Кирилл2100 Посмотреть сообщение
«
вместо
"
и вдобавок в стркое был ненужный слеш
Цитата Сообщение от Кирилл2100 Посмотреть сообщение
\
уверен твой код либо не компилировался либо выдавал ворнинг unknown extra character или что то подобное. Остаётся добавить что в твоём итоговом варианте
Цитата Сообщение от Кирилл2100 Посмотреть сообщение
\\0
вконце вообще не нужен
Убежденный
Системный программист
Эксперт С++
15248 / 6880 / 1092
Регистрация: 02.05.2013
Сообщений: 11,260
Завершенные тесты: 1
25.06.2014, 10:25     Определение процессора без доступа к реестру #9
Кирилл2100, имей в виду, что processor-поля структуры SYSTEM_INFO
относятся к операционной системе, а не к процессору. Например, GetNativeSystemInfo,
вызванная на 64-битной системе, установит wProcessorArchitecture в значение
PROCESSOR_ARCHITECTURE_AMD64, даже если стоит процессор Intel.
То же самое касается остальных полей - dwProcessorType, например.
Так что cpuid - самое правильное и надежное. В крайнем случае можно через
Setup API вытащить название процессора, как оно отображается в диспетчере устройств.
Но эта информация тоже легко меняется (есть специальные утилиты).
Так что я бы советовал поднапрячься и разобраться таки с cpuid, с ее помощью
можно гору самой разной информации вытащить, вплоть до определения поддержки
всяких там SSE, размеров и топологии кэша.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2014, 13:24     Определение процессора без доступа к реестру
Еще ссылки по теме:
C++ Определение класса leverage и метода для доступа к закрытому полю
C++ Инструкция процессора для инкремента диапазона памяти без предварительного чтения
XE5 тормозит без доступа к интернету C++ Builder
C++ узнать значение последнего элемента без доступа к нему
C++ Приложение для доступа к БД программным путем без инструментов GUI

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Кирилл2100
1 / 1 / 0
Регистрация: 29.08.2013
Сообщений: 48
25.06.2014, 13:24  [ТС]     Определение процессора без доступа к реестру #10
Убежденный, хорошо, учту. Еще раз спасибо =)
Yandex
Объявления
25.06.2014, 13:24     Определение процессора без доступа к реестру
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru