![]() |
|
#1
|
|||
|
|||
![]() Дано: Программа - только EXE-файл.
Задача - вписать в исходник проверку текущей даты с датой первого запуска программы (притом в дату запуска добавить точное время). Цель - заблокировать запуск если накрутилось н-ое кол-во дней и дать возможность ввести ключик. Генерация ключей - реализована. А вот проверку - не умею. ![]() |
#2
|
||||
|
||||
![]() Немного теории...
Дату тервого запуска можно хранить в 2-х местах...в реестре или в файле...можно хранить в явном или зашифрованном виде, но это уже реализция... Дата в Delphi хранится в виде дробного числа, целая часть количество дней с какой то даты (по моему 1 декабря 1899 года), дробная чать время(формат не помню)... Получешь текущую дату, получаешь дату первого запуска, вычитаешь одну дату из другой и сравниваешь количетсво дней... Вот функции работы с датой и временем... http://www.helloworld.ru/texts/comp/.../var/var54.htm В начале был Бит, потом Байт и только потом появилось Слово... Последний раз редактировалось NIch, 23.11.2009 в 12:42. |
#3
|
|||
|
|||
![]() спасибо... А можно все-таки в EXE-шник записать?
И если реализовывать то как?(DLL, TXT.....) |
#4
|
||||
|
||||
![]() Если экзешник засунуть и можно, то это проблематично...С таким никогда не сталкивался...
Вот немного инфы по защите программ... http://www.z-oleg.com/secur/articles/progprotect.php http://www.delphisources.ru/forum/showthread.php?t=9934 Почитай...защита шарованых программ дело неблагодарное... В начале был Бит, потом Байт и только потом появилось Слово... |
#5
|
|||
|
|||
![]() Можнто-то можно, в ресурсы. только вот учти, что мнгие антивирусы это дело отловят и покажут пользователю, а это уже дыра в защите. Вообще, я бы посмотрел в сторону нормальных "навесных" защит, которые умеют нормально интегрироваться с программой и предоставляют кучу хороших возможностей для защиты.
|
#6
|
|||
|
|||
![]() Тогда приведите, пожайлуста пример записи/чтения переменной в Реестр или еще как нибудь, кроме TXT.
![]() |
#7
|
|||
|
|||
![]() просмотрел, спасибо. Но задача поставлена - надо как-то решить... Хотя бы на примитивном уровне. Там где будут ее использовать взламывать вряд ли будут.
|
#8
|
||||
|
||||
![]() Работа с реестром...Автор Алексей Федоров...
Код:
unit RDUnit; interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry; type TForm1 = class(TForm) Memo1: TMemo; GroupBox1: TGroupBox; GroupBox2: TGroupBox; Label1: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation{$R *.DFM}var RegFile: TRegIniFile; const //Подсекция SubKey: string = 'Software\RegDemo'; // Элемент для хранения логических данных BoolKey: string = 'BoolKey'; // Элемент для хранения целочисленных данных IntKey: string = 'IntKey'; // Элемент для хранения строчных данных StrKey: string = 'StrKey'; procedure TForm1.FormCreate(Sender: TObject); begin // Создать экземпляр класса RegFile := TRegIniFile.Create(SubKey); end; procedure TForm1.Button1Click(Sender: TObject); begin // Записать целочисленное значение RegFile.WriteInteger(IntKey, 'Value', 1998); end; procedure TForm1.Button2Click(Sender: TObject); begin // Записать булево значение RegFile.WriteBool(BoolKey, 'Value', True); end; procedure TForm1.Button3Click(Sender: TObject); begin // Записать строку RegFile.WriteString(StrKey, 'Value', 'Demo'); end; procedure TForm1.Button4Click(Sender: TObject); begin // Считать целочисленное значение Memo1.Lines.Add('Int Value = ' + IntToStr(RegFile.ReadInteger(IntKey, 'Value', 0))); end; procedure TForm1.Button5Click(Sender: TObject); begin // Считать булево значение if RegFile.ReadBool(BoolKey, 'Value', False) then Memo1.Lines.Add('Bool Value = True') else Memo1.Lines.Add('Bool Value = False'); end; procedure TForm1.Button6Click(Sender: TObject); begin // Считать строку Memo1.Lines.Add(RegFile.ReadString(StrKey, 'Value', '')); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin // Удалить секцию RegFile.EraseSection(SubKey); // Освободить память RegFile.Free; end; end. В начале был Бит, потом Байт и только потом появилось Слово... |
#9
|
|||
|
|||
![]() Не получалось копированием(а странно) - как только ручками набрал - заработало!
Последний раз редактировалось AntoNechayuk, 24.11.2009 в 09:05. |
#10
|
|||
|
|||
![]() с реестром все получилось! Огромное спасибо NIch.
Теперь прошу - дайте пример как с ресурсом сделать!! И желательно чтоб "как для новичка". Заранее благодарен. |
#11
|
||||
|
||||
![]() За спасибо пожалуйста...
А работа с ресурсами уже поднималась...пользуйся поиском... В начале был Бит, потом Байт и только потом появилось Слово... |