Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.09;
Скачать: CL | DM;

Вниз

Детектирование параметров 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
14-26260
alienb
2002-04-02 17:58
2002.05.09
Как определить имя хоста по IP?


1-26095
Wolfez
2002-04-26 16:47
2002.05.09
Текст из Memo1 в Memo2 и Memo3


4-26285
JAndrey
2002-02-28 07:12
2002.05.09
Где найти описание USER32.dll, Kernel32.dll ..........


3-25995
Практик
2002-04-12 19:53
2002.05.09
Поделитесь примерами


3-26011
_Виктор
2002-04-16 08:11
2002.05.09
Как положить картинку в базу Access?