![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите в Систем Инфо !! [D6, Win95/98, WinME, NT4, Win2k, WinXP]
SPeller © (2002-03-31 16:33:00)Нужна вот информация о системе пользователя. Подскажите, как можно раздобыть следующее:
- Название проца;
- Название видюхи;
- Объём видеопамяти;
- Имеющиеся в системе диски;
- Кол-во свободных системных ресурсов.
Прошу помочь, очень надо.
Donal_Graeme (2002-04-09 15:39:00) [1]tm:=chr(i)+":\";
SPeller (2002-04-09 10:58:00) [2]>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:"
Чё это такое ?
Poirot (2002-04-09 08:09:00) [3]
> SPeller ©
Делаю всё так, но вот почему-то диск С: пропускается таким образом (вылазит A: D: E:).
А у меня всё OK...
DenKop (2002-04-09 00:00:00) [4]Намылил, принимай.
La2Sc (2002-04-08 14:27:00) [5]Простой компонент. Лови.
SPeller (2002-04-07 06:42:00) [6]Ну и где это хреново мыло ???
.......
Вот редиска...........
SPeller (2002-04-05 14:01:00) [7]DenKop © (05.04.02 13:45)
Валяйте, буду очень благодарен !
DenKop (2002-04-05 13:45:00) [8]Могу намылить набор компонентов по этой теме.
SPeller (2002-04-04 14:16:00) [9]>Poirot © (02.04.02 07:18)
>1- если список логических дисков и CD(DVD)-ROM, FLOPPY - то ручками пробиваем по всем букавкам GetDriveType...
Делаю всё так, но вот почему-то диск С: пропускается таким образом (вылазит A: D: E:).
>All
Ну плиз, про ресурсы чего-нибудь, а то выдирать это из LMD долго и много.
KSergey (2002-04-04 11:58:00) [10]Про узнвание загружености процессора можно тут поузнавать
http://www.sources.ru/delphi/delphi_get_active_threads.shtml
[я этого не знал]
Donal_Graeme (2002-04-04 10:21:00) [11]2 ДЕД :
не подсказал потому, что было сказано про LMD и SPeller сказал, что вопрос отпал.
под кодами я имел ввиду содержимое регистров после вызова CPUID.
Про Сайрикс спросил потому, что в своё время искал по ним данные (правда неактивно) и не нашёл :-)
А вот насчёт дельных советов... Да, совет действительно дельный, но вот тон, каким был этот совет дан...Если я неправильно его понял, то извини.
SPeller (2002-04-04 01:35:00) [12]>All
Всё что здесь обсуждается, приводятся примеры, всё это у меня уже есть. Ну где про ресурсы и реальный пример с видюхой ?
Cheb (2002-04-03 22:04:00) [13]Да! чуть не забыл про то, как тактовую частоту процессора мерить (причём, с учётом разгона).
Метод может давать некоторую погрешность
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;
Вот, вроде всё.
Cheb (2002-04-03 21:40:00) [14]..Да, и ещё:
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 21:27:00) [15]Блин!...
Извиняюсь за CheckForPentium - случайно просочилась. Это то, из чего я пример
делал (т.е. только 2я процедура правильная)
Cheb (2002-04-03 21:22:00) [16]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;
ДЕД МАСТДАЙ (2002-04-03 19:28:00) [17]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: Кто кому еще пальцы будет смотреть :)
Donal_Graeme (2002-04-03 18:55:00) [18]я и сам раньше бился с этой проблемой (объём видеопамяти), и программер на одной из моих прошлых работ тоже бился, так и не решил, хотя он круче меня раз в 10 :-) я лучшего варианта, как через реестр не нашёл.
SPeller (2002-04-03 18:42:00) [19]Donal_Graeme (03.04.02 18:36)
Дед не дед, пальцы не пальцы, а вопрос остаётся не решённым. Хулиду называется.
Donal_Graeme (2002-04-03 18:36:00) [20]2 ДЕД :
раз такой крутой, может ещё приведёшь возможные варианты данных из CPUID для разных процов? например, коды для Cyrix"ов
2 SPeller :
у нас тут рассматривание пальцев ДЕДА :-)))