Получаем имя компа:
Код:
function GetCompName: string;
var
buffer: array[0..255] of char;
size: dword;
begin
size := 256;
if GetComputerName(buffer, size) then
Result := buffer
else
Result := ''
end;
Имя юзверя:
Код:
function GetUserName: string;
var
Size : cardinal;
PRes : PChar;
BRes : boolean;
begin
Size := MAX_COMPUTERNAME_LENGTH + 1;
PRes := StrAlloc(Size);
BRes := GetUserName(PRes, Size);
if BRes then Result:=StrPas(PRes) else Result:='';
end;
Тип проца:
Код:
function ProcType: string;
var
lpSystemInfo : TSystemInfo;
begin
GetSystemInfo(lpSystemInfo);
Result:=IntToStr(lpSystemInfo.dwProcessorType);
end;
Ну и допустим количество памяти:
Код:
function MemorySize: string;
var
lpMemoryStatus : TMemoryStatus;
begin
lpMemoryStatus.dwLength := SizeOf(lpMemoryStatus);
GlobalMemoryStatus(lpMemoryStatus);
with lpMemoryStatus do begin
Result:=Format('%0.0f',[dwTotalPhys div 1024 / 1024])+' Mb';
end;
end;
Всё это соединяет, шифруем каким-нить своим алго, и передаём себе. У себя же расшифровываем, определяем все железки и генерим другим алго ключег, который сверяется в софтине. Всё элементарно. Так же это просто пример того что можно получать стандартными апи, запусти любой бенчмарк и увидишь как много инфы к которой можно привязаться

Так же рекомендую использовать куски ключа при расчётах важных функций в программе, т.е. включать их в алгоритм а не ставить тупую сверку значений, отшибающуюся битхаком B)
ps.
0verbreaK, про диск я чёто не понял)) ну есть сидиром в компе и что дальше? он много где есть
п.с. тут надо комбинировать инфу с железок а не использовать какой-то один параметр..