![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Основные характеристики [D5]
AquaSun1 © (2002-10-31 07:39:00)Мастера, подскажите как программно:
Выяснить тип ОС;
Частоту процессора;
и м.б. другие основные хар-ки компа?
Заранее спасибо.
AquaSun1 (2002-11-09 03:03:00) [1]Действительно, есть функция GetVersionEx(). Разобравшись, у меня получилось следующее:
procedure TForm1.BitBtn1Click(Sender: TObject);
Var OSVI:OSVERSIONINFO;
begin
OSVI.dwOSVersionInfoSize:=sizeof(OSVERSIONINFO);
If GetVersionEx(OSVI) Then
Begin
Label1.Caption:="Объём информации = "+IntToStr(OSVI.dwOSVersionInfoSize);
Label2.Caption:="Version Number = "+IntToStr(OSVI.dwMajorVersion)+"."+IntToStr(OSVI.dwMinorVersion);
Label3.Caption:="Build = "+IntToStr(OSVI.dwBuildNumber);
Label4.Caption:="Platform Id = "+IntToStr(OSVI.dwPlatformId);
Label5.Caption:="Доп. информация = "+OSVI.szCSDVersion;
End;
end;
Правда единственное, что мне может быть здесь полезным, так это то, что в Win98 dwPlatformId=1, а в Win2000 dwPlatformId=2. Однако подозреваю, что и в Win95 dwPlatformId=1, а в каком-нибудь WinXP dwPlatformId=2 (пока правда не проверял :)). Поэтому неполучается выяснить точно тип ОС. А в реестр всётаки нехотелось бы лезть.
Azazello (2002-11-04 16:32:00) [2]Для определения операционной системы используй GetVersion()
Описание смотри в MSDN
AquaSun1 (2002-11-02 04:10:00) [3]У меня стоят 2 системы Win98 и Win2000Server:
Ветка HKLM\Software\Microsoft\Windows\CurrentVersion
подходит для Win98, а для Win2000Server информация о том,
что это Win2000Server находится в ветке
HKLM\Software\Microsoft\Windows NT\CurrentVersion
и как парадокс я должен знать какая у меня загружена система
для того, чтобы узнать какая у меня загружена система.
Причём в реестрах обоих систем имеются обе эти ветки.
Нет, конечно я могу посмотреть и туда и туда, и там где
находится параметр ProductName посмотреть что у нас за
система, но мне слабо верится, что нужно поступать именно так.
Может имеется какая нибудь команда WIN API, для просмотра
информации о системе. К сожалению у меня нет описания этих
команд.
Akella (2002-11-01 08:25:00) [4]http://www.delphikingdom.com/mastering/wmi.htm#02
AquaSun1 (2002-11-01 04:49:00) [5]Спосибо Ricky-Ticky-Tavy! Завтра проверю.
Ricky-Ticky-Tavy (2002-10-31 09:33:00) [6]Дополнение: на www.sources.ru валяются исходники на С++, как получить список IDE/ATAPI.
Ricky-Ticky-Tavy (2002-10-31 08:00:00) [7]Тип ОС - из реестра HKLM\Software\Microsoft\Windows\CurrentVersion
Частота процессора в win9x/me определяется функцией
function GetCPUSpeed: Double;
const
DelayTime = 500; // measure time in ms
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000.0 * DelayTime);
end;
В win nt/2k частота есть в реестре
HKLM\Hardware\Description\System\CentralProcessor\0 ~MHz
Марка процессора в win9x/nt/me/2k тоже в реестре
HKLM\Hardware\Description\System\CentralProcessor\0 Identifier
Объм ОП в win 9x/nt/me/2k определяется ф-ей
var
MemStatus: TMemoryStatus;
...
begin
...
GlobalMemoryStatus(MemStatus);
...Caption:=MemStatus.dwTotalPhys;
...
end;
В реестре winnt/2k в HKLM\Hardware\DeviceMap\ валяется полный список оборудования