Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 2
Всего онлайн: 2
Зарегистрировано юзеров: 6358
Комментариев на сайте: 645
Новый юзер: Realtyvaday



Последние комментарии
c
Aqel прокомментировал "Урок 71 - Работа с сжатыми файлами":
GZip псевдоархив, на мой вопрос тоже не отвечают, как распаковать отдельные файлы/папки...
Pingitrus прокомментировал "Урок 71 - Работа с сжатыми файлами":
Есть еще кто нибудь живой на этом сайте, кто сможет помочь? Так то все работает, zip и rar распаковывает, но у меня есть файл dat который сжат GZip, почему то его не удается распаковать или так не получится так как этот файл не является архивом или является?)) пишет ошибку что неверная функция



Мы в соцсетях
c
Delphi
Как узнать информацию о системе в Delphi

Вы, возможно, видели нестандартные дельфийские компоненты, позволяющие сделать лог системы. Сейчас мы самостоятельно реализуем что-нибудь не хуже. Прежде всего, где хранится эта самая системная инфа? В Реестре, куда мы сможем залезть, добавив модуль 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 getVolumeInformation(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.description','keyboard.typ')); 
WriteLn(F,'Мышь: '+getDevice('boot.description','mouse.drv')); 
WriteLn(F,'Дисплей: '+getDevice('boot.description','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 кило. А если бы мы создали "нормальную" программу с формой, размер был бы в два-три раза больше.

Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 24 Ноября 2013
Просмотров:


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.