Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2010, 23:03   #1
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию Отчет по системе.

Люди подскажите, есть ли где-то в винде файлик который содержит в себе параметры системы, такие как: ЦПУ, ОЗУ, какая операционка и т.д. (как диспетчер задач).

Нужно все это дело показать в проге. Если есть подобный файлик, был очень доволен, а если нету, тогда подскажите, как можно данное сделать.
Небесный вне форума Ответить с цитированием
Старый 10.02.2010, 23:26   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот, где-то выцепил... Подправите, если нужно:
Цитата:
Как узнать информацию о системе

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

Прежде всего, где хранится эта самая системная инфа? В Реестре, куда мы сможем залезть, добавив модуль registry в раздел uses. Версия системы, имя владельца и т.д. имеют следующий адрес:

hkey_local_machinesoftwaremicrosoft windowscurrentversionexplorer

Или (для windows nt):
hkey_local_machinesoftwaremicrosoft windows ntcurrentversion

А информация о системных папках хранится здесь:
hkey_current_usersoftwaremicrosoft windowscurrentversionexplorershell folders

В то же время данные о некоторых системных устройствах хранятся в файле system.ini. Значит, добавим модуль inifiles, чтобы осуществить чтение информации из этого файла. Таким образом, если вы умеете работать с Реестром и ini, узнать системную информацию вам будет так же просто, как сделать format c: complete из-под загрузочного диска. Изюминка в том, что наше приложение, которое эту инфорнмацию собирает и записывает в лог-файл, будет консольным, и создать его можно через file>new>other>console application.

Код:
program osinfo;

uses
sysutils,
windows,
registry,
inifiles; //!!

//ключи реестра, в которых будем искать информацию
const
folders = 'softwaremicrosoftwindowscurrentversionexplorershell folders';
winvers = 'softwaremicrosoftwindowscurrentversion';

var
f: textfile; //файл с логом
serialnum: pdword; 
a: dword;
i: integer;
drive, windir: string;
buffer: array [0..255] of char;
ms: tmemorystatus; 

//читаем информацию из Реестра
function wininfo(root_key: hkey; key_open, key_read: string): string;
var
registry: tregistry;
begin
//если windows nt, открываем другой ключ
if ((getversion and $80000000)=0) and (key_open=winvers) then
key_open:='softwaremicrosoftwindows ntcurrentversion';
registry := tregistry.create;
try
registry.rootkey := root_key;
registry.openkey(key_open, false);
result := registry.readstring(key_read);
finally
registry.free;
end;
//если ничего не найдено, выводим "невозможно определить"
if result<>emptystr then result:=key_read+': '+result else result:=key_read+': невозможно определить';
end;

Последний раз редактировалось mihali4; 10.02.2010 в 23:28.
mihali4 вне форума Ответить с цитированием
Старый 10.02.2010, 23:26   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Это еще (продолжение):
Цитата:
Код:
//читаем из system.ini
function getdevice(section, ident: string): string;
var inifile: tinifile;
begin
inifile:=tinifile.create(windir+'system.ini');
result:=inifile.readstring(section,ident,'неизвестное устройство');
inifile.free;
end;

begin
//Узнаем директорию Винды. Она нам еще понадобится
getwindowsdirectory(buffer, sizeof(buffer));
windir:=buffer;
assignfile(f,windir+'osinfo.txt'); //Соединямся с файлом лога
rewrite(f); //Переходим в начало файла
writeln(f,'Лог создан: '+datetimetostr(now));
writeln(f,'');
//пользователь, версия ОС и т.д.
writeln(f,' О Системе:');
writeln(f,wininfo(hkey_local_machine,winvers,'registeredowner'));
writeln(f,wininfo(hkey_local_machine,winvers,'registeredorganization'));
writeln(f,wininfo(hkey_local_machine,winvers,'productid'));
writeln(f,wininfo(hkey_local_machine,winvers,'productkey'));
writeln(f,wininfo(hkey_local_machine,winvers,'productname'));
writeln(f,wininfo(hkey_local_machine,winvers,'version'));
writeln(f,wininfo(hkey_local_machine,winvers,'versionnumber'));
//Какой браузер?
writeln(f,wininfo(hkey_local_machine,winvers,'plus! versionnumber'));
writeln(f,'');
writeln(f,' Память:');
writeln(f,'Доступные носители: ');
//Получаем информацию о дисках
for i := 0 to 25 do
if (getlogicaldrives and (1 shl i)) <> 0 then begin
drive:=char(ord('a') + i) + ':';
case getdrivetype(pchar(drive)) of
drive_removable: writeln(f,drive+' (гибкий диск)');
drive_cdrom: writeln(f,drive+' (cd-rom)');
drive_fixed: begin
//находим серийный номер жесткого диска
new(serialnum);
if getvolumein formation(pchar(drive),buffer,sizeof(buffer),serialnum,a,a,nil,0) then
writeln(f,drive+' (жесткий диск, sn '+inttostr(serialnum^)+')');
end;
else writeln(f,drive+' (неизвестный диск');
end;
end;
//информация о памяти
globalmemorystatus(ms);
writeln(f,'Оперативная память: '+ formatfloat('#,###" kb"', ms.dwtotalphys / 1024));
writeln(f,'Свободно на жестком диске: '+ formatfloat('#,###" байт"',diskfree(3))); 
//"3" указывает на диск c:
writeln(f,'Объем жесткого диска: '+ formatfloat('#,###" байт"',disksize(3)));
writeln(f,'');
//узнаем об устройствах из system.ini
writeln(f,' Устройства:');
writeln(f,'Клавиатура: '+getdevice('boot.de scription','keyboard.typ'));
writeln(f,'Мышь: '+getdevice('boot.de scription','mouse.drv'));
writeln(f,'Дисплей: '+getdevice('boot.de scription','display.drv'));
writeln(f,'Хранитель экрана: '+getdevice('boot','scrnsave.exe'));
writeln(f,'');
//читаем системные папки из Реестра
writeln(f,' Системные папки:');
getcurrentdirectory(sizeof(buffer), buffer);
writeln(f,'Текущий каталог: '+buffer);

writeln(f,wininfo(hkey_current_user,folders,'cache'));
writeln(f,wininfo(hkey_local_machine,winvers,'configpath'));
writeln(f,wininfo(hkey_current_user,folders,'cookies'));
writeln(f,wininfo(hkey_current_user,folders,'desktop'));
writeln(f,wininfo(hkey_current_user,folders,'favorites'));
writeln(f,wininfo(hkey_current_user,folders,'fonts'));
writeln(f,wininfo(hkey_current_user,folders,'history'));
writeln(f,wininfo(hkey_current_user,folders,'local appdata'));
writeln(f,wininfo(hkey_local_machine,winvers,'mediapath'));
writeln(f,wininfo(hkey_current_user,folders,'my music'));
writeln(f,wininfo(hkey_current_user,folders,'my pictures'));
writeln(f,wininfo(hkey_current_user,folders,'nethood'));
writeln(f,wininfo(hkey_current_user,folders,'personal'));
writeln(f,wininfo(hkey_current_user,folders,'printhood'));
writeln(f,wininfo(hkey_local_machine,winvers,'programfilesdir'));
writeln(f,wininfo(hkey_local_machine,winvers,'commonfilesdir'));
writeln(f,wininfo(hkey_current_user,folders,'programs'));
writeln(f,wininfo(hkey_current_user,folders,'recent'));
writeln(f,wininfo(hkey_current_user,folders,'sendto'));
writeln(f,wininfo(hkey_current_user,folders,'start menu'));
writeln(f,wininfo(hkey_current_user,folders,'startup'));
getsystemdirectory(buffer, sizeof(buffer));
writeln(f,'system: '+buffer);
gettemppath(sizeof(buffer),buffer);
writeln(f,'temp: '+buffer);
writeln(f,wininfo(hkey_current_user,folders,'templates'));
writeln(f,wininfo(hkey_local_machine,winvers,'wallpaperdir'));
writeln(f,'windows: '+windir);
close(f); //отсоединяемся от файла
end.
Результаты сохранятся в директории windows в файле osinfo.txt. Чтобы ознакомиться с ними, вам достаточно открыть этот файл.

Последний раз редактировалось mihali4; 10.02.2010 в 23:29.
mihali4 вне форума Ответить с цитированием
Старый 10.02.2010, 23:30   #4
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Михалыч, огромное СПАСИБО!!!
Уже не первый раз выручаешь.
Небесный вне форума Ответить с цитированием
Старый 30.04.2010, 18:02   #5
PVD
Пользователь
 
Аватар для PVD
 
Регистрация: 31.12.2009
Сообщений: 97
По умолчанию

О Системе:
registeredowner: невозможно определить
registeredorganization: невозможно определить
productid: невозможно определить
productkey: невозможно определить
productname: невозможно определить
version: невозможно определить
versionnumber: невозможно определить
plus! versionnumber: невозможно определить
PVD вне форума Ответить с цитированием
Старый 30.04.2010, 18:06   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...под какой системой делаешь и есть-ли права на чтение с реестра-ли
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 30.04.2010, 18:16   #7
PVD
Пользователь
 
Аватар для PVD
 
Регистрация: 31.12.2009
Сообщений: 97
По умолчанию

windows xp professional версия 2003 service pack 3
как узнать о правах чтения из реестра?
PVD вне форума Ответить с цитированием
Старый 01.05.2010, 02:09   #8
RAZOR3
Пользователь
 
Регистрация: 25.04.2010
Сообщений: 38
По умолчанию

А ты слэши '\' проставил?
RAZOR3 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отчет golf Помощь студентам 0 20.12.2009 16:05
Отчет OgE®_M@G Microsoft Office Excel 9 10.11.2009 11:28
Отчет SaMar Microsoft Office Access 3 24.09.2008 22:39
Отчет [Smarik] Помощь студентам 1 23.04.2008 20:13
Инфа о системе Sargon Работа с сетью в Delphi 2 23.12.2007 00:52