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

Вниз

Помогите в Систем Инфо !!   Найти похожие ветки 

 
SPeller ©   (2002-03-31 16:33) [0]

Нужна вот информация о системе пользователя. Подскажите, как можно раздобыть следующее:

- Название проца;
- Название видюхи;
- Объём видеопамяти;
- Имеющиеся в системе диски;
- Кол-во свободных системных ресурсов.

Прошу помочь, очень надо.


 
Song ©   (2002-03-31 16:47) [1]

Помнится мне, какой-то компонентик здесь ходил... А так - из реестра.


 
SPeller ©   (2002-03-31 17:11) [2]

И кол-во ресурсов тоже из реестра?


 
SPeller ©   (2002-03-31 23:47) [3]

Ну што, никто не знает что-ли ?


 
DC-AC   (2002-04-01 07:44) [4]

LMDSysInfo из LMD-Tools


 
SPeller ©   (2002-04-01 08:21) [5]

DC-AС

Спасибо. Но остались ещё вопросы:
- Название видюхи;
- Объём видеопамяти;
- Имеющиеся в системе диски;


 
Donal_Graeme   (2002-04-01 10:26) [6]

для видео - это только наброски.. эти функции работают, но не всегда... во-первых, в реестре может быть не указана данная информация, а во-вторых ключ в реестре может быть и 0001 и 0002 и т.п.

function GetVideoAdapterName: AnsiString;
var Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey ("System\CurrentControlSet\Services\Class\Display\0000", False);
Result := Reg.ReadString ("DriverDesc");
Reg.Free;
end;

function GetVideoMemory: DWord;
var Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey ("System\CurrentControlSet\Services\Class\Display\0000\Info", False);
Result := Reg.ReadInteger ("VideoMemory");
Reg.Free;
end;



 
SPeller ©   (2002-04-01 11:06) [7]

Спасибо и за этот пример. А в реестре один ключ 0000, 0001 или 0002 или их может быть одновременно несколько ? Если один, то вычислить его труда не составит.


 
Donal_Graeme   (2002-04-01 15:01) [8]

бывает и несколько


 
SPeller ©   (2002-04-02 02:54) [9]

А если несколько, то это 2 видюхи ? Тогда можно выбрать любую из них. И ещё ненайденные мною вопросы:
- Список дисков
- Почему функция GlobalMemoryStatus возвращает меньшее кол-во оперативки чем на самом деле ? Например для 160 т.е 167772160 байт она выдаёт 167239680, что равно 159,49 метров?


 
Poirot ©   (2002-04-02 07:18) [10]


> SPeller ©

1- если список логических дисков и CD(DVD)-ROM, FLOPPY - то ручками пробиваем по всем букавкам GetDriveType...
А вот если винтик хотите найти то поступаем тем же манером как и с видео, но учтите что в Вынь2К винтики в реестре упомянаются все, даже если вы подключили какой-то когда-то и потом убрали - он там.... а ручками удалить не получается - кричит....
2 - не знаю....
PS: Здесь в форуме был пример с выводом названия видюхи (помоему через АПИ)... Я что-то в рассылке не могу найти...


 
Donal_Graeme   (2002-04-02 10:09) [11]

насчёт видео, я не уверен, но по-моему вовсе не обязательно, что наличие двух разделов (0001 и 0002, например) означает присутствие двух видеокарт. могут остаться старые разделы при смене видео.


 
SPeller ©   (2002-04-02 11:13) [12]

Donal_Graeme (02.04.02 10:09)

И как тогда определить какая из них сейчас стоит ?


 
SPeller ©   (2002-04-03 02:55) [13]

>Poirot © (02.04.02 11:33)

Можешь на мыло скинуть этот определитель ?

>Donal_Graeme (02.04.02 11:51)

Рыться в реестре занятие не из приятных... А нельзя ли как-нибудь через биос, он-то верочно знает про видюху, или нет ?


 
Donal_Graeme   (2002-04-03 13:23) [14]

через БИОС не знаю как... правда мне думается, что это нереально...


 
SPeller ©   (2002-04-03 15:12) [15]

Но как-то ж можно, винда ведь как-то делает это и не важно какая она старая или новая, всё-равно определяет. Неужели никто незнает?


 
ДЕД МАСТДАЙ   (2002-04-03 16:38) [16]

Народ вы хоть знаете что такое процессор, его команды? А про системную область биоса с адресса 0F000h слышали? Так вот вся инфа про процессор получаеться после команды CPUID с кодом 0F A2 что для Делфи будет $0F $A2 понятно? Значения CPUID зависит от значения регистра EAX. И в последствии возращает значения в ECX,EDX,EBX. Так это я начсет проца. Дальше начсет видокарты. Есть такое великолепное прерывание BIOS"a int 10h посвященное видеосервису, советую про него прочитать. Ну да ладно с ним. Про системное определение, нате пример:
procedure TForm1.button1click(Sender: TObject);
var
lpDisplayDevice: TDisplayDevice;
dwFlags: DWORD;
cc: DWORD;
begin
form1.memo1.Clear;
lpDisplayDevice.cb := sizeof(lpDisplayDevice);
dwFlags := 0;
cc:= 0;
while EnumDisplayDevices(nil, cc, lpDisplayDevice , dwFlags) do
begin
Inc(cc);
form1.memo1.lines.add(lpDisplayDevice.DeviceString);
end;
end;

И еще всем, скажите что это за програмаирование когда ты ипсользуешь компоненты? А, да никакое это не программирование а использование чужих идей!



 
SPeller ©   (2002-04-03 16:57) [17]

ДЕД МАСТДАЙ
А мож про ресурсы чего-нить знаешь ?


 
ДЕД МАСТДАЙ   (2002-04-03 17:28) [18]

Слушай SPeller может мне еще всю сисинфу написать а потом подписать ее "made by SPeller" ?


 
SPeller ©   (2002-04-03 17:32) [19]

>ДЕД МАСТДАЙ (03.04.02 17:28)
>Слушай SPeller может мне еще всю сисинфу написать а потом подписать ее "made by SPeller" ?


Я задал вопрос, причём тут "made by SPeller" ?? Нельзя чтоли нормально ответить ? Или это не форум ?


 
Donal_Graeme   (2002-04-03 18:36) [20]

2 ДЕД :
раз такой крутой, может ещё приведёшь возможные варианты данных из CPUID для разных процов? например, коды для Cyrix"ов

2 SPeller :
у нас тут рассматривание пальцев ДЕДА :-)))


 
SPeller ©   (2002-04-03 18:42) [21]

Donal_Graeme (03.04.02 18:36)
Дед не дед, пальцы не пальцы, а вопрос остаётся не решённым. Хулиду называется.


 
Donal_Graeme   (2002-04-03 18:55) [22]

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


 
ДЕД МАСТДАЙ   (2002-04-03 19:28) [23]

2 Donal_Graeme:
Слышь если кто-то знает больше, то не надо завидовать, че ж ты сам не подсказал? А если сам умный, про Cyrix спрашивать то за всей инфой лезь к ним и SDK у них качай да архитектуру поизучай. А вообще ты хоть сам понял что написал "коды для Cyrix"oв". Какие коды? Есть команды, а offset код для всех один 0Fh 0A2. Всю документацию про Cyrix писать не буду на тебе кусочек. Пока что известны такие значения для Cyrix.
При значение регитра EAX = 1 бит 6 содержит информацию про поддержку процессора PTE (Page Table Entries). На этом при вызове EAX=1 на Cyrix инфа закончилась, т.к все остальне 30 бит значения зарезервированый под процессоры Intel и AMD. При значении EAX=80000001h бит 24 соддержит информацию о поддержки Cyrix процессора расширения MMX. Расширения 3DNow узнаються таже как и на процессорах AMD. Другие значения одинаковы.
Доволен?
Я вообще не понимаю я к вам с дельным советом, а вы сразу так "крутой".

2 SPeller: использование реестра не поможет. Я точно не помню, как это сделать, если найду скжау или напишу.

2Donal_Graeme: Кто кому еще пальцы будет смотреть :)


 
Cheb   (2002-04-03 21:22) [24]

DirectX знает всё о видеокартах и их параметрах, у него и спрашивайте.
(В том числе, AGP видеокарта или PCI, и какие видеорежимы поддерживает).
Там же и объём видеопамяти где-то спрятан.
А вообще, с точки зрения системы, видеопамять даже одной карточки может
представлять собой несколько блоков разного размера и назначения.
Например у 12Мб Voodoo2 на самом деле целых 3 видеопамяти: 4Мб собственно
видеопамяти (для экрана и Z-буфера) и 2 блока по 4Мб, пригодных только для
размещения текстур.

А в реестре действительно накапливается информация о всех видеокартах,
когда-либо вставлявшихся в данный комп - проверено на практике.

Procedure CheckForPentium;
var PrId: ShortString;
begin
Try
PrId:=" ";
Try
Asm
MOV EAX, 0
db $0F,$A2 /// CPUID
MOV DWORD PTR PrId[1], EBX
MOV DWORD PTR PrId[5], EDX
MOV DWORD PTR PrId[9], ECX
MOV BYTE PTR PrId[0], 12
End;
Except
End;
If PrId = "GenuineIntel" then ProcessorVendor:="Intel";
If (PrId = "AuthenticAMD") or(PrId = "AMD ISBETTER")
then ProcessorVendor:="AMD";
If PrId = "CyrixInstead" then ProcessorVendor:="Cyrix";
If PrId = "CentaurHauls" then ProcessorVendor:="IDT";
If PrId = "RiseRiseRise" then ProcessorVendor:="RISE";
Asm
DB $0F, $31; //RDTSC
End;
Except
Die("Процессор подавился командой RDTSC. (0F31h)"#13+
"Интересно: а это, вообще-то, Пентиум?.."#13+
"См. инструкцию, раздел "системные требования".",
"Processor has choked with a RDTSC command (OF31h)."#13+
"Maybe it""s not a Pentium ?.."#13+
"Refer to manual, section "System requirements".");
End;
end;

Или ещё прикол: мою видеокарту с TV-OUT даже DirectX видит, как две
видеокарты, из которых одна - AGP, а другая - PCI, не говоря уже о самой
Windows, где от этого безобразия врубилась поддержка работы с несколькими
мониторами... Вот и верь после этого системе!

Procedure GetProcVendor;
var PrId: ShortString;
begin
Try
PrId:="";
Try
Asm
MOV EAX, 0
db $0F,$A2 /// CPUID
MOV DWORD PTR PrId[1], EBX
MOV DWORD PTR PrId[5], EDX
MOV DWORD PTR PrId[9], ECX
MOV BYTE PTR PrId[0], 12
End;
Except
End;
ProcessorVendor:="Новая или малоизвестная марка";
If PrId = "GenuineIntel" then ProcessorVendor:="Intel";
If (PrId = "AuthenticAMD") or(PrId = "AMD ISBETTER")
then ProcessorVendor:="AMD";
If PrId = "CyrixInstead" then ProcessorVendor:="Cyrix";
If PrId = "CentaurHauls" then ProcessorVendor:="IDT";
If PrId = "RiseRiseRise" then ProcessorVendor:="RISE";
Except
ProcessorVendor:="процессор не поддерживает идентификацию. Вероятно, это 80486 или ниже";
End;
end;



 
Cheb   (2002-04-03 21:27) [25]

Блин!...
Извиняюсь за CheckForPentium - случайно просочилась. Это то, из чего я пример
делал (т.е. только 2я процедура правильная)


 
Cheb   (2002-04-03 21:40) [26]

..Да, и ещё:

var V: Cardinal;
...
Try
ASM
MOV EAX, 1
db $0F,$A2 /// CPUID
AND EAX, 00000FF0h
MOV [V], EAX
End;
Except
V:=0;
End;

...

if ProcessorVendor = "AMD" then begin
If V=$580 then ProcessorVendor:=ProcessorVendor+" K6-2";
If V=$590 then ProcessorVendor:=ProcessorVendor+" K6-3";

...Ну и так далее - подробные коды для конкретных моделей конкретных фирм можно найти
на сайтах производителей или ещё где-нибудь.

Но этот путь-тупиковый: такая прога не сможет узнвть имена новых процессоров, а новые
версии Windows-смогут. И ещё многопроцессорные системы уже появились (хотя вряд ли
можно будет совместно использовать процессоры разных моделей)

Зато так вы спрашиваете имя-фамилию напрямую у процессора, не связываясь с Windows.


 
Cheb   (2002-04-03 22:04) [27]

Да! чуть не забыл про то, как тактовую частоту процессора мерить (причём, с учётом разгона).
Метод может давать некоторую погрешность

function MeasureProcessorClock: Int64;
var
Stamp, Count1, Count2, Freq: Int64;
PriorityClass, Priority : Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
QueryPerformanceFrequency(Freq);
If Freq=0 then begin
MeasureProcessorClock:=0; //таковое условие невозможно, но-на всякий случай...
EXIT;
end;
Count2:=0;
Try
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
//не знаю, как это пройдёт под NT и потомством. Там это зависит от прав процессов, но, кажется,
//при отсутствии прав на изменение приоритета запрос просто игнорируется, не вызывая ошибки
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
asm
db $0F,$31 /// rdtsc
MOV DWORD PTR Stamp, EAX
MOV DWORD PTR Stamp + 4, EDX
end;
QueryPerformanceCounter(Count1);
Sleep(100);
asm
db $0F,$31 /// rdtsc
SUB EAX, DWORD PTR Stamp
SBB EDX, DWORD PTR Stamp + 4
MOV DWORD PTR Stamp, EAX
MOV DWORD PTR Stamp + 4, EDX
end;
QueryPerformanceCounter(Count2);
Finally
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
End;
If Count2 > 0 //т.е. не было исключений в процессе измерения,
//(например, если процессор не знает команды RDTSC)
then
MeasureProcessorClock:=Round(Stamp*1.0*Freq/(Count2-Count1))
else
MeasureProcessorClock:=0;
end;

Вот, вроде всё.


 
SPeller ©   (2002-04-04 01:35) [28]

>All
Всё что здесь обсуждается, приводятся примеры, всё это у меня уже есть. Ну где про ресурсы и реальный пример с видюхой ?


 
Donal_Graeme   (2002-04-04 10:21) [29]

2 ДЕД :
не подсказал потому, что было сказано про LMD и SPeller сказал, что вопрос отпал.
под кодами я имел ввиду содержимое регистров после вызова CPUID.
Про Сайрикс спросил потому, что в своё время искал по ним данные (правда неактивно) и не нашёл :-)
А вот насчёт дельных советов... Да, совет действительно дельный, но вот тон, каким был этот совет дан...Если я неправильно его понял, то извини.


 
KSergey ©   (2002-04-04 11:58) [30]

Про узнвание загружености процессора можно тут поузнавать
http://www.sources.ru/delphi/delphi_get_active_threads.shtml
[я этого не знал]


 
SPeller ©   (2002-04-04 14:16) [31]

>Poirot © (02.04.02 07:18)
>1- если список логических дисков и CD(DVD)-ROM, FLOPPY - то ручками пробиваем по всем букавкам GetDriveType...


Делаю всё так, но вот почему-то диск С: пропускается таким образом (вылазит A: D: E:).


>All

Ну плиз, про ресурсы чего-нибудь, а то выдирать это из LMD долго и много.


 
DenKop ©   (2002-04-05 13:45) [32]

Могу намылить набор компонентов по этой теме.


 
SPeller ©   (2002-04-05 14:01) [33]

DenKop © (05.04.02 13:45)
Валяйте, буду очень благодарен !


 
SPeller ©   (2002-04-07 06:42) [34]

Ну и где это хреново мыло ???
.......
Вот редиска...........


 
La2Sc   (2002-04-08 14:27) [35]

Простой компонент. Лови.


 
DenKop ©   (2002-04-09 00:00) [36]

Намылил, принимай.


 
Poirot ©   (2002-04-09 08:09) [37]


> SPeller ©
Делаю всё так, но вот почему-то диск С: пропускается таким образом (вылазит A: D: E:).

А у меня всё OK...


 
SPeller ©   (2002-04-09 10:58) [38]

>Poirot © (09.04.02 08:09)

Делаю вот так:

function GetDrives:string;
var i:integer;st,tm:string;
begin
st:="";
for i:=ord("A") to ord("Z") do begin
tm:=chr(i)+":";
if getdrivetype(pchar(tm))>1 then st:=st+tm+" ";
end;
result:=st;
end;


Отсюда вылазит строка "A: D: E:"
Чё это такое ?


 
Donal_Graeme   (2002-04-09 15:39) [39]

tm:=chr(i)+":\";



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

Текущий архив: 2002.07.04;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.014 c
6-9944
DikobraZ
2002-04-21 18:36
2002.07.04
Сканнер портов подвисает...


14-9979
ZIP
2002-06-02 19:49
2002.07.04
После установки модема виснет комп


3-9720
Corte ™
2002-06-11 12:07
2002.07.04
Может кто нить знает как организовать контекстный поиск в гриде


1-9921
wwwit@lick
2002-06-23 14:06
2002.07.04
FileListBox1 и DirectoryListBox1


1-9867
ec
2002-06-21 18:02
2002.07.04
Где взять инфу или пример как пользоваться TThread