$34.41


$749.71


$143.90


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

[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]

 

Интересное

Для чего служит .htaccess?
Набирая адрес в строке браузера, вы получаете на свой компьютер файлы, которые отображает браузер. Управление тем, какие файлы и как вам показывать (пересылать) осуществляет веб-сервер. Наиболее...
Подробнее...
DOTNET - Да или Нет. С...
Руководитель IT департамента любой сколько-нибудь развившейся и вставшей на ноги компании почти наверняка имеет мечту. Мечту, в которой его предприятие совершает все деловые операции со всеми...
Подробнее...
Основы позиционирования блоков
Блоки — прямоугольные области, используемые в CSS для формирования и отображения документов. Это упрощенно, очень сильно упрощенно, но для начала вполне может и хватить.С появлением нового...
Подробнее...
Скрытая загрузка
Не для кого не секрет, что в наше время Интернет-странички просто переполнены различной графикой (баннеры, дизайн странички, графические счетчики) — без этого уже почти невозможно представить...
Подробнее...

Авторизация






Шрифты и вы - кто кого?
Гармоничный выбор преобразит вашу работу: ведь каждый шрифт — это настроение, эпоха, сила. И эти определения невольно передаются тексту, заставляя нас изначально предвзято относиться к...
Подробнее...
Начало создания сайта
Структура узлаОдним из главных слагаемых успеха узла является правильная организация его структуры. От нее зависит не только удобство навигации, но и легкость его пополнения, добавления разделов....
Подробнее...
Увеличение...
Настройка сетевой подсистемы FreeBSDЭта статья описывает несколько простых шагов, которые можно выполнить,для получения прироста производительности сетевой подсистемы, а такжеправильно выбрать...
Подробнее...
Летать самолётом боятся...
Летать самолётом боятся очень многие – и это вполне объяснимо. Ведь небо не является для человека средой обитания. Но бывают моменты, когда не полететь нельзя: нет времени на длительное...
Подробнее...
Что делать если Windows XP...
Переход с Windows XP на Windows Vista довольно медленный процесс, особенно когда пользователь любопытен, но в то же время нерешителен. Не все убеждены в том, что новая ОС имеет функции, ради...
Подробнее...
Выбираем лучший способ...
Те, кто рассматривает проблемы «одомашнивания» кинотеатра всерьез, при покупке AV-аппарата уделяют больше внимания не передней, а задней панели, то есть коммутационным возможностям. При этом упор...
Подробнее...