Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  22:12[Войти] | [Зарегистрироваться]
Ответ на вопрос № 76093

12-03-2010 12:17
Здрасти!

Как узнать имя CPU?

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

14-03-2010 13:54 | Комментарий к предыдущим ответам
Уговорили, ответил здесь »сообщение 362 в теме №383 на БП«

14-03-2010 12:49 | Комментарий к предыдущим ответам
Я с удовольствием подискутирую на тему совместимости и использования возможностей системы, но так как вопрос выходит за рамки "как узнать имя CPU", может, нам куда-то переместиться ?

Как вариант: "Можно, но не нужно" »тема на БП №383«

14-03-2010 07:45 | Сообщение от автора вопроса
>>> Не засоряем ли мы топик автора ?
Нет.
Что надо я уже узнал, поэтому ветку отдаю на растерзание. ;)

14-03-2010 05:30 | Комментарий к предыдущим ответам
У меня есть одно замечание или скорее вопрос (а может пожелание) на эту тему, тоже общетеоретическое, но не писал, т.к. не хотел тему засорять. если переместитесь в легкодоступное место, напишу. ))

14-03-2010 05:05 | Комментарий к предыдущим ответам
Не засоряем ли мы топик автора ? Я с удовольствием подискутирую на тему совместимости и использования возможностей системы, но так как вопрос выходит за рамки "как узнать имя CPU", может, нам куда-то переместиться ? Глядишь, еще кто-нибудь подтянется :)

Причем, это не документировано (или документировано?).

Конечно документировано, в regentry.chm

С наилучшими,

14-03-2010 01:21 | Комментарий к предыдущим ответам
>>> Странно, открыл сейчас About запущенных программ (PL/SQL Developer, Delphi 2006, Process Explorer) - нигде не увидел информацию о железе
Я имел в виду попсовые программы, так как серьезные разработчики очень избирательно относятся к новомодным веяниям от Микрософт. Кстати, погонял VS Office 2003. Действительно, там в окошке About осталась только кнопка для просмотра конфигурации. Значит мода уже прошла. Давненько я не заглядывал в About ;-)

>>> Некоторое время назад MS, начиная с логотипа Windows 95 Compatible активно рекомендовали пользоваться именно реестром для хранения данных программы. На этой волне крайне много программ хранят свои данные в реестре
Это все так. И возможность обращения к ключам реестра, скорее всего, проживет долго. Даже если изменится организация реестра, функции API по работе с узлами все равно останутся. И пользовательская программа, хранящая данные в реестре останется работоспособной. А вот то, что структура узлов реестра для хранения данных самой ОС будет неизменной -- это уже большой вопрос. Возможно, Микрософт как-то по другому организует структуру дерева для хранения параметров ОС, возможно, часть данных будет перенесена из реестра еще куда-то. Потому что для этих данных имеются специальные функции API, и Микрософт не предполагает, что кто-то будет сам рыться в реестре в поисках нужных узлов вместо того, чтобы воспользоваться готовой функцией и получить нужные данные.

Раз уж мы сошлись в очередной дискуссии, то замечу, что идея хранить все настройки всех программ в реестре была... э-э-э... не самой удачной: завязывание на один единственный формат -- это не всегда удобно. Я для себя принял несколько другой подход. В реестре храним только необходимый минимум -- ссылку на саму программу (может быть, версия и еще что-то минимальное) в HKLM\Software. А дальше уже сама программа знает, где именно и в каком виде она хранит остальные настройки. Если судить по содержимому C:\Documents and Settings\***\Application Data\, то так думаю не только я.

>>> "Hello, world", написанный 20 лет назад тоже работает. Наверное к реестру не обращается
Во-первых, не будем равнять продукты Питера Нортона и "Hello, world". Во-вторых, речь идет вовсе не про обращение к реестру. Дело в том, что Питер Нортон в своих разработках старался по-возможности использовать те механизмы, которые будут оставаться работоспособными очень долго. Если есть какай-то документированная возможнойсть ОС, и эта возможность работает с приемлемым качеством, он пользовался именно ей.

Возвращаясь к нашим баранам... Есть реестр, в котором в определенном узле в версии Windows XP Микрософт хранит имя процессора. Причем, это не документировано (или документировано?). И есть документированная функция API, возвращающая имя процессора. Какой вариант из двух предположительно окажется более долгоживущим?

>>> Кстати, программы от Питера Нортона, написанные 20 лет назад, на Windows 7 в 64-битной редакции работать не будут. Ни одна.
Лишний повод не переходить на ОС семейства Виста. Ну как можно работать на компьютере, где даже Norton Commander не идет :D

13-03-2010 16:36
Когда я открываю окошко About, то я хочу получить информацию о программе, а не об ОС и не о железе (для них есть свои программы). Но почему-то Микрософт начал эту инфу вставлять в About, а остальные разработчики собезьянничали и тоже стали вставлять.

Странно, открыл сейчас About запущенных программ (PL/SQL Developer, Delphi 2006, Process Explorer) - нигде не увидел информацию о железе.

В чем проще поддерживать совместимость: в формате запросов или в структуре реестра?

Не вижу принципиальной разницы. И то, и то надо поддерживать, и то, и то используется и будет использоваться. Некоторое время назад MS, начиная с логотипа Windows 95 Compatible активно рекомендовали пользоваться именно реестром для хранения данных программы. На этой волне крайне много программ хранят свои данные в реестре, в том числе и сама операционная система, и изменять структуру реестра в такой ситуации, является самоубийством.

А продукты Питера Нортона до сих пор работают. Уже больше 20 лет. И заслуга в этом не только Микрософта, который здорово обеспечивает обратную совместимость

"Hello, world", написанный 20 лет назад тоже работает. Наверное к реестру не обращается.

А вот игрушка Lines2, для DOS, 16-битная, мало того, что не работает в 32-х битных редакциях системы выше XP, так еще и в 64-битной Windows 7 напрочь отказывается :)

Я к чему такой длинный монолог затеял - за те 17 лет, что существует Win32, технологий различного рода от Microsoft сменилось - мало не покажется. Когда-нибудь и WMI может постигнуть та же судьба, по меньшей мере никто не даст гарантии, что интерфейсы WMI не изменятся быстрее, чем структура реестра.

Кстати, программы от Питера Нортона, написанные 20 лет назад, на Windows 7 в 64-битной редакции работать не будут. Ни одна.

С наилучшими,

13-03-2010 13:41 | Комментарий к предыдущим ответам
>>> Я предлагаю еще один механизм (простой), для тех, кому неудобно встраивать CPUID или не всегда удобно тащить за своим приложением обращение к WMI.
Пардон, на самое главное я и не ответил.

Я не хочу сказать, что этот способ неправильный и им ни в коем случае нельзя пользоваться. В конце концов, в том блоге Александра Алексеева есть упоминание программ (игрушек), время жизни которых -- три месяца. За это время всяко Винда не успеет кардинально измениться :-)

Но для меня идеалом является Питер Нортон, а не какая-нибудь СуперМегаГеймСофт, которая штампует по десятку игр в год, срубая на этом нехилые бабки с игроков-наркоманов. А продукты Питера Нортона до сих пор работают. Уже больше 20 лет. И заслуга в этом не только Микрософта, который здорово обеспечивает обратную совместимость.

13-03-2010 13:35 | Комментарий к предыдущим ответам
>>> Или в очередной версии Windows изменится механизм запросов к WMI
В чем проще поддерживать совместимость: в формате запросов или в структуре реестра? Особенно, если народ начинает потихонечку плеваться на большую свалку бесполезных данных, называемую реестром, и Микрософот (теоретически) может вообще от реестра в существующем ныне виде отказаться.

Наверное, все что угодно, мы можем получить, поковырявшись в системных файлах ОС. Но почему-то имеется огромный API. И разработчики предпочитают пользоваться им. И что-то я уже не вижу программ, которые анализировали бы файлы Win.ini и System.ini (хотя что-то такое по-прежнему где-то там болтается)

>>> А что касается изменения механизмов работы в будущих версиях Windows, есть хорошая статья
А что касается хорошей статьи, то применительно к теме этой дискуссии можно сказать так: можно ли считать, что программа стала неработоспособной, если она всего лишь перестала в окошке About правильно выводить информацию о процессоре?

P.S. Кстати, это какой-то идиотизм. Когда я открываю окошко About, то я хочу получить информацию о программе, а не об ОС и не о железе (для них есть свои программы). Но почему-то Микрософт начал эту инфу вставлять в About, а остальные разработчики собезьянничали и тоже стали вставлять.

13-03-2010 09:50
Приветствую!

А потом в очередной версии Windows Микрософт чуть-чуть изменит структуру реестра, и программа, работающая напрямую с реестром, станет неработоспособной. Как я понимаю, именно для устранения таких коллизий Микрософт предложил WMI

Или в очередной версии Windows изменится механизм запросов к WMI, или команда CPUID перейдет в разряд привилегированных, или взбунтуются ходжентские лепешечники и канибадамские маслоделы откажутся платить подати :)

Я предлагаю еще один механизм (простой), для тех, кому неудобно встраивать CPUID или
не всегда удобно тащить за своим приложением обращение к WMI.

А что касается изменения механизмов работы в будущих версиях Windows, есть хорошая статья:
http://transl-gunsmoker.blogspot.com/2008/12/blog-post_6449.html

С наилучшими,

13-03-2010 09:20 | Комментарий к предыдущим ответам
>>> Все уже придумано до нас
А потом в очередной версии Windows Микрософт чуть-чуть изменит структуру реестра, и программа, работающая напрямую с реестром, станет неработоспособной. Как я понимаю, именно для устранения таких коллизий Микрософт предложил WMI.

13-03-2010 08:56
Все уже придумано до нас:

реестр, HKLM\Hardware\Description\System\CentralProcessor

С наилучшими,

13-03-2010 08:08 | Комментарий к предыдущим ответам
>>> Почему громоздко?
Надо тащить компоненты ради получения одного единственного параметра?

Никакие компоненты там тащить не надо.

13-03-2010 05:45 | Сообщение от автора вопроса
>>> И зря ругаешься на рекомендацию воспользоваться поиском.
Ругаюсь на >>> CPU в переводе на русский звучит как "процессор" ;-)
 
>>> Не гарантирую, что это именно то - сам проверяй.
Оно самое! ;)
Но уже нашёл вариант покороче.

13-03-2010 05:15
См. processor name string:
http://www.sandpile.org/ia32/cpuid.htm
Если не подходит - собирай по отдельным битикам, по аналогии с CPUInfo2Str.

И зря ругаешься на рекомендацию воспользоваться поиском. При творческом переосмыслении запроса кое-что найти можно:
http://delphikingdom.com/table/search.asp?namekey=CPUID&ItemID=&isQuestion=2&QwUserID=&TypeEqv=0&Count=10
->
»вопрос КС №52037«
Не гарантирую, что это именно то - сам проверяй.

13-03-2010 04:35 | Сообщение от автора вопроса
Geo
>>> Лишнее знание... э-э-э... иногда... только вредит. Я Вам ссылку с поисковым
>>> запросом подготовил, сходили бы по ней. На всякий случай поясняю, CPU в переводе >>> на русский звучит как "процессор" ;-)

ППЦ

>>> Почему громоздко?
Надо тащить компоненты ради получения одного единственного параметра?

Sapersky

FastCode смотрел буквально вчера. Нужного мне там нет.
Только можно проверить поддержку доп. инструкций процессора, что
можно сделать и системно.

13-03-2010 04:06


function CPUInfo2Str(Const cInfo : TCPUInfo; SpeedMhz : Integer = 0;
                    StartCpuFeature : TCPUFeature = cfMMX): String;
Const
  FeatureNames : array [TCPUFeature] of String =
    ('CX8', 'CMOV', 'MMX', 'MMX2', 'SSE', 'SSE2', '3DNow','3DNow2');
Var i : Integer;
    s, s1 : String;
    f : TCPUFeature;
begin
If Pos('Intel', cInfo.VendorID) > 0 then begin
  Case cInfo.Family of
    6 : Case cInfo.Model of
          3..6        : s := 'Pentium 2';
          7, 8, $A, $B : s := 'Pentium 3';
          9, $D, $E    : s := 'Pentium M';
          $F          : s := 'CoreDuo';
        end;
    $F : s := 'Pentium 4';
  end;
  s := 'Intel ' + s;
end else
  If Pos('AMD', cInfo.VendorID) > 0 then begin
    Case cInfo.Family of
      6 : Case cInfo.Model of
            3,6 :  s := 'Duron';
            1,2,4 : s := 'Athlon';
            else    s := 'AthlonXP';
          end;
      $F : s := 'Athlon64';
    end;
    s := 'AMD ' + s;
  end else
    s := cInfo.VendorID;

If (SpeedMhz <> 0) then begin
  Str(SpeedMhz, s1); s := s + ', ' + s1 + ' Mhz';
end;
Str(cInfo.CPUCount, s1);
Result := s + '; Count/Cores: ' + s1;//Num_2Str(cInfo.CPUCount);

If StartCpuFeature < High(TCPUFeature) then begin
  Result := Result + '; Features: ';
  i := 0;
  For f := StartCpuFeature to High(TCPUFeature) do
    If (f in cInfo.Features) then begin
      If (i > 0) then Result := Result + ', ';
      Result := Result + FeatureNames[f];
      Inc(i);
    end;
end;
end;



Довольно примитивно, без нюансов, но в принципе можно усовершенствовать, порывшись в документации по CPUID.
Ещё пример работы с CPUID есть в FastCode, более развёрнутый, где-то даже слишком (занимает целый модуль приличного размера).

Частота процессора в Мгц (не всегда точно):


// from "Delphi in a Nutshell" book
function Sys_GetCPUSpeed(MeasTime : Integer = 100): Integer;
//Const DelayTime = 100; // measure time in ms
Var
  TimerHi, TimerLo: DWord;
  PriorityClass, Priority: Integer;
begin
PriorityClass:=GetPriorityClass(GetCurrentProcess);
Priority:=GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
  dw 310Fh // rdtsc
  mov TimerLo, eax
  mov TimerHi, edx
end;
Sleep(MeasTime);
asm
  dw 310Fh // rdtsc
  sub eax, TimerLo
  sbb edx, TimerHi
  mov TimerLo, eax
  mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := Round(TimerLo / (1000.0 * MeasTime));
end;


13-03-2010 02:59 | Комментарий к предыдущим ответам
В статье, на которую я дал ссылке, автор пишет, что нуэно установить WMI SDK. Я думаю, что это - не необходимо, достаточно импортировать библиотеку типов WbemScripting (действие - на 2 минуты). И после этого можно использовать готовый код автора статьи.

13-03-2010 02:41
>>> Тащить WMI слишком громоздко
Почему громоздко? Что в этом громоздкого? Наоборот, Вы уменьшаете размер своего кода и повышаете го универсальность, так как будете пользоваться готовым механизмом ОС.

13-03-2010 02:38
>>> Поиск на счёт CPU выдаёт только "как узнать нагрузку CPU" и всё
Лишнее знание... э-э-э... иногда... только вредит. Я Вам ссылку с поисковым запросом подготовил, сходили бы по ней. На всякий случай поясняю, CPU в переводе на русский звучит как "процессор" ;-)

13-03-2010 02:36 | Сообщение от автора вопроса
Сергей О.
Мне нужно узнать только имя CPU и всего-то.
Тащить WMI слишком громоздко.

Sapersky

FastLib смотрел.
Там можно узнать только поддерживаемые инструкции процессора и вендора, а остальное не важно.

За пример буду благодарен.

13-03-2010 02:04
Как вариант - asm-команда CPUID, но с ней придётся повозиться, готовой строки она не даёт, нужно формировать на основании полученных параметров. Пример использования CPUID - в FastLib (там же, кстати, см. заполнение цветом и прочая, прочая). Если интересно, могу выложить свою функцию для формирования строки по TCPUInfo, но она весьма приблизительно (и не всегда верно) определяет современные процессоры, надо дорабатывать.
WMI, скорее всего, будет проще.

13-03-2010 01:53
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=698

12-03-2010 23:07 | Сообщение от автора вопроса
Поиск на счёт CPU выдаёт только "как узнать нагрузку CPU" и всё.

Мне нужно получить вот такую строку:

     
AMD Athlon(tm) 64 X2 Dual Core Processor 3600+


12-03-2010 12:42
У CPU нет имени, потому что процессорам в отличие от, например, кораблей не принято давать имена ;-)

Если же Вы хотите узнать модель, или тактовую частоту, или еще какие-то характеристики процессора, то лучше было начать с поиска. Например, вот такого

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Однажды, в студеную зимнюю пору я из лесу вышел, был сильный ЧТО?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования