Форум: "Основная";
Текущий архив: 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