$460.46


$215.46


$23.88


Как узнать информацию о системе

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

Прежде всего, где хранится эта самая системная инфа? В Реестре, куда мы сможем залезть, добавив модуль 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;

//читаем из 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. Чтобы ознакомиться с ними, вам достаточно открыть этот файл.

Такое приложение весит 156 кило. А если бы мы создали «нормальную» программу с формой, размер был бы в два-три раза больше[code]

 

Интересное

Вся правда о тИЦ
О эти три магические буквы!!!Как же любят на форумах обсуждать эту тему. Дрожь пробирает, когда открывают новый топик, посвященный тИЦ-у.. А пробирает от того, что тема настолько заезжена и сотни...
Подробнее...
Пишем описания и титлы
Как же повысить эффективность регистрации в каталогах? Ну, во-первых, регистрировать только в беляках (каталоги не требующие за размещение обратной ссылки или денег), во-вторых, использовать как...
Подробнее...
Быстродействие FAT и NTFS
В этой статье я попытаюсь дать оценку быстродействию файловых систем, используемых в операционных системах Windows95/98/ME, а также Windows NT/2000. Статья не содержит графиков и результатов...
Подробнее...
Сущность ООП
Одна из вещей, которую вы могли бы захотеть реализовать — пользовательский интерфейс, предоставляющий доступ к файлу персональных данных. ООП предоставляет вам безусловно лучшие механизмы для его...
Подробнее...
Как выбрать телевизор?
Плазменная панель уже давно перестала быть роскошью. И в эпоху технического прогресса, многие выбирают именно этот вид телевизоров. Конечно, плазма значительно дороже, но у нее есть немало...
Подробнее...
Я живу в FreeBSD
Нередко приходится слышать рассуждения типа: «FreeBSD — прекрасная серверная платформа, но ей не место на рабочем компьютере. Повседневные задачи среднему пользователю проще выполнять на...
Подробнее...
Создание потомка от класса...
Для того, чтобы определить когда мышь над компонентом, в данном примере это будет панель, мы создадим новый класс, который будет являться потомком класса TPanel, и будет обрабатывать некоторые...
Подробнее...
Удалённое восстановление...
Как импортировать большой SQL-скрипт (дамп базы данных MySQL для форума phpBB), если обычными споcобами (загрузка через web-интерфейс phpMyAdmin, Backup cPanel) проблематична, особенно на модемном...
Подробнее...
Режим редактирования в IE
Оказывается ie может редактировать открытые им документы, и не только текст, но и в том числе вставлять имиджи и т.п. По сути дела полноценный html-editor у нас в руках, но только об этом...
Подробнее...
Как сгенерировать файл...
Рано или поздно любой веб-мастер сталкивается с необходимостью защиты своего сайта, более тонкой настройки доступа к различным его параметрам. Один из вариантов — использовать специальный...
Подробнее...