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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.006 c
3-9762
SergeiGenko
2002-06-11 11:38
2002.07.04
ExpressQuantumGrid Suite


1-9811
tovSuhov
2002-06-24 10:12
2002.07.04
Вот ведь задачка...


1-9784
valerchik
2002-06-20 00:48
2002.07.04
Как скопировать файл...


1-9776
INCOGNITO
2002-06-23 13:04
2002.07.04
Формирование нового компонента


14-9989
hooch
2002-06-04 06:33
2002.07.04
Таймер





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский