Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Вниз

Детектирование параметров hardware   Найти похожие ветки 

 
AndreyS   (2002-04-25 12:15) [0]

Извините за, вероятно, повторный вопрос в этой конференции. Я недавно здесь.
Подскажите с помощью каких функций API или других функций можно считать информацию
по железу (типа номер: диска, процессора, карты и так далее). А также информацию
из прошивок- о производителе, версии и так далее. В общем все что можно считать
программно. Не обязательно на Delphi, можно и на низком уровне. Я понимаю, что лень
подробно описывать. Впрочем, я думаю, если кто и задавал вопрос, то только по
диску, а более обще обсудить эти вопросы будет интересно. Хотябы названия
функций и ключевых слов, чтобы в хелпах и литературе быстро найти можно
было. Очень прошу.
Заранее спасибо.


 
Игорь Шевченко   (2002-04-25 12:16) [1]

День добрый,

Обычно вся информация такого рода находится в реестре

С уважением,


 
Дмитрий Баранов   (2002-04-25 12:26) [2]

Есть ряд апишных функций (GetSystemInfo, GetKeyboardType, GetCurrentHwProfile) и т.п.


 
AndreyS   (2002-04-25 12:42) [3]

Весь спортивный интерес в том, чтобы именно самому (а не из реестра) вытянуть весь профиль железа
и инфу по производителю комплектухи. Боюсь, что без Асма не обойтись. Так ли это? Или Делфи могет
в купе с API? Как например вытянуть номер процессора и производителя памяти и конкретный
билд чипсета например. Ведь система при установке (прежде чем в реестр записать) фиксит это как то.
Я не имею ввиду инфу, что с драйверами поставляется, а именно из прошивок микросхем конфигурации
железа (например видяхи, чипсета, BIOS в коце концов).
Пусть и в неудобном виде (в виде кода), но шоб была. Как напирмер считать прошивку Биоса?
В общем в этой Эпостаси. Желательно для C++. Но если и Делфи могет - просто замечательно.


 
Игорь Шевченко   (2002-04-25 12:49) [4]

День добрый,

К примеру, про CPU:

program cpuid;

/////////////////////////////////////////////////////////////////////////////
// (c) NPS, 1997 - Idea, realisation, adoptation IsCPUID_Available) //
// nps@vnet.ee //
// (c) Alex Abreu, 1997 - IsCPUID_Available source and idea //
// simonet@bhnet.com.br //
/////////////////////////////////////////////////////////////////////////////
// slightly modified by Alexander B. Bokovikov (bokovikov@mail.ru) (c) 2000//
/////////////////////////////////////////////////////////////////////////////

{$APPTYPE CONSOLE}

uses
Windows, Utils;

const
ID_BIT = $200000; // EFLAGS ID bit
type
TCPUID = array[1..2] of Longint;
TVendor = array [0..11] of char;

function IsCPUID_Available : Boolean; register;
asm
PUSHFD {direct access to flags impossible, only via stack}
POP EAX {flags to EAX}
MOV EDX,EAX {save current flags}
XOR EAX,ID_BIT {not ID bit}
PUSH EAX {onto stack}
POPFD {from stack to flags, with not ID bit}
PUSHFD {back to stack}
POP EAX {get back to EAX}
XOR EAX,EDX {check if ID bit affected}
JZ @exit {no, CPUID not availavle}
MOV AL,True {Result=True}
@exit:
end;

function GetCPUID : TCPUID; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result}
MOV EAX,1
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EDX
STOSD {CPUID[2]}
POP EDI {Restore registers}
POP EBX
end;

function GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TVendor)}
MOV EAX,0
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI {Restore registers}
POP EBX
end;

function SwapBytes(l : longint) : longint; assembler; register;
asm
PUSH EBX
MOV BX, AX
XCHG BH, BL
SHL EBX, 16
SHR EAX, 16
XCHG AH, AL
OR EAX, EBX
POP EBX
end;

var
cpu : TCPUID;
vnd : TVendor;
i : integer;
l : longint;
ss : string[8];

begin
if IsCPUID_Available then
begin
write(" CPUID: ");
cpu := GetCPUID;
for i := 1 to 2 do
begin
l := SwapBytes(cpu[i]);
BinToHex(@l,@ss[1],4); ss[0] := #8;
if i < 2 then write(ss,"-")
else writeln(ss);
end;
write(" CPU Vendor: ");
vnd := GetCPUVendor;
for i := 0 to 11 do
if vnd[i] > #0 then write(vnd[i]);
writeln;
end else
begin
writeln(" CPUID is not supported.");
end;
end.


Мой совет - бросить нафиг спортивный интерес и читать реестр :-))

С уважением,



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
1-26179
Ihor
2002-04-24 18:20
2002.05.09
TIniFile


1-26057
Димка
2002-04-25 18:45
2002.05.09
Как запретить кнопку


4-26307
Dima Gorpinenko
2002-03-07 10:30
2002.05.09
Пароль в консоли


7-26280
sammy
2002-02-12 08:19
2002.05.09
свойства файлов


1-26124
Vint
2002-04-24 17:10
2002.05.09
Порядок расположения окон





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский