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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2010, 00:26   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Можно ли получить информацию о компе по типу ID?

Т.е. такую, чтобы её можно было получить как и программным путём (с помощью делфи), так и вручную без доп. программ.
TwiX вне форума Ответить с цитированием
Старый 13.02.2010, 01:43   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот заело вас...
Попробуйте вот это (грешен, но на многие вопросы даю ответы их DFaq-а. Тожет, кое-что уже и устарело (как и я сам ), но все же:
[QUOTE]Как узнать информацию о системе

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

Прежде всего, где хранится эта самая системная инфа? В Реестре, куда мы сможем залезть, добавив модуль 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,'Лог создан: '+datetimetos
tr(now));
writeln(f,'');

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

Цитата:
//пользователь, версия ОС и т.д.
writeln(f,' О Системе:');
writeln(f,wininfo(hkey_local_machin e,winvers,'registeredowner'));
writeln(f,wininfo(hkey_local_machin e,winvers,'registeredorganization') );
writeln(f,wininfo(hkey_local_machin e,winvers,'productid'));
writeln(f,wininfo(hkey_local_machin e,winvers,'productkey'));
writeln(f,wininfo(hkey_local_machin e,winvers,'productname'));
writeln(f,wininfo(hkey_local_machin e,winvers,'version'));
writeln(f,wininfo(hkey_local_machin e,winvers,'versionnumber'));
//Какой браузер?
writeln(f,wininfo(hkey_local_machin e,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,sizeo f(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_machin e,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_machin e,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_machin e,winvers,'programfilesdir'));
writeln(f,wininfo(hkey_local_machin e,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_machin e,winvers,'wallpaperdir'));
writeln(f,'windows: '+windir);
close(f); //отсоединяемся от файла
end.

Результаты сохранятся в директории windows в файле osinfo.txt. Чтобы ознакомиться с ними, вам достаточно открыть этот файл.

Такое приложение весит 156 кило. А если бы мы создали "нормальную" программу с формой, размер был бы в два-три раза больше
Не будет работать в семерке? Или даже в ХР ?
Да у нас тут столько светлых голов, что мы это в момент решим
Только заикнитесь...
mihali4 вне форума Ответить с цитированием
Старый 13.02.2010, 01:49   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию продолжение

Цитата:
//пользователь, версия ОС и т.д.
writeln(f,' О Системе:');
writeln(f,wininfo(hkey_local_machin e,winvers,'registeredowner'));
writeln(f,wininfo(hkey_local_machin e,winvers,'registeredorganization') );
writeln(f,wininfo(hkey_local_machin e,winvers,'productid'));
writeln(f,wininfo(hkey_local_machin e,winvers,'productkey'));
writeln(f,wininfo(hkey_local_machin e,winvers,'productname'));
writeln(f,wininfo(hkey_local_machin e,winvers,'version'));
writeln(f,wininfo(hkey_local_machin e,winvers,'versionnumber'));
//Какой браузер?
writeln(f,wininfo(hkey_local_machin e,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,sizeo f(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_machin e,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_machin e,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_machin e,winvers,'programfilesdir'));
writeln(f,wininfo(hkey_local_machin e,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_machin e,winvers,'wallpaperdir'));
writeln(f,'windows: '+windir);
close(f); //отсоединяемся от файла
end.

Результаты сохранятся в директории windows в файле osinfo.txt. Чтобы ознакомиться с ними, вам достаточно открыть этот файл.

Такое приложение весит 156 кило. А если бы мы создали "нормальную" программу с формой, размер был бы в два-три раза больше[
Не будет работать в семерке? Или даже в ХР ?
Да у нас тут столько светлых голов, что мы это в момент решим
Только заикнитесь...
mihali4 вне форума Ответить с цитированием
Старый 13.02.2010, 01:53   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

информацию о компьютере можно перечислять и перечислять... вам, TC, достаточно ограничится несколькими основными, но говорить никому не нужно... но затея сомнительная.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 13.02.2010, 02:09   #6
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Код:
но затея сомнительная
Понимая, что у всех стоит разная винда, я пришёл к выводу, что защита для самописной проги и написание алгоритма защиты не стоили бы того) Пожалуй, ограницусь только серийником =)
Всем спасибо (плюсик смог поставить только raxp'у)
TwiX вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++. Извлечь информацию о жестких дисках имеюшихся на данном компе Sarius Общие вопросы C/C++ 1 09.12.2009 17:07
Получить информацию о графическом адаптере dimon_91 Общие вопросы C/C++ 1 08.12.2009 23:46
Можно ли покинуть цикл? Что-нибудь по типу exitLoop? TwiX Общие вопросы Delphi 2 04.08.2009 01:00
как получить список запущенных процессов на компе One.Love Win Api 10 17.03.2009 01:36
info video - получить информацию о видео файле Toxa Общие вопросы Delphi 1 04.12.2006 17:02