![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с датой [D7, WinXP]
AleksandrR © (2007-07-10 14:18:00)Написал программу и на эту программу поставил защиту (проверка ключа) т.е без ключа программа расчитана на 30 запусков, а теперь я хочу сделать следующее: при первом запуске считывается дата и записывается например в ini файл. Затем при следующем запуске эта дата сравнивается с системной и если она больше 30 дней то программа вырубается. Теперь вопрос как осуществить саму математику с датой, т.е. (дата системная - дата начальная).
Заранее благодарен. С уважением Aleksandr!
Ega23 (2007-07-10 19:14:00) [1]
> Как хорошо раньше вот так шареварные проги и прописывались
> простенько в реестр, без всяких там хитростей... Крассотищща!
Дату сместить можно. Да и не обязательно дату писать. В смысле, как datetime.
Наизголяться можно по самое нехочу.
Вот только может и не быть прав на запись в реестр... :)
Скарамуш (2007-07-10 19:09:00) [2]Не, больше всего мне нравится:
> при первом запуске считывается дата и записывается например
> в ini файл
</
> clickmaker © (10.07.07 14:46) [2]
> пиши зашифрованной при первом запуске. Если попытаются подменить,
> сделай, чтоб программа писала "неверный файл ключа" и отваливала
I>
Взять да и порешить ini-шник, прога не найдёт и создаст новый. С новой датой (Я так понимаю, что прога на FormCreate дату записывать будет? А в таком случае - или ini есть и тогда - считать, или - нет, и тогда - создать.) Тогда уж лучше в реестр.
Кстати, через реестр - тоже чушь, если уж ini лезть, который х.з. где запрятан может быть, то реестр уж почистить по дате - милое дело...
Как хорошо раньше вот так шареварные проги и прописывались простенько в реестр, без всяких там хитростей... Крассотищща!
Johnmen (2007-07-10 17:13:00) [3]Я вот не понимаю, как люди с такими знаниями умудряются писать программы, которые надо защищать?
Или это обыкновенная паранойя?
Anatoly Podgoretsky (2007-07-10 15:47:00) [4]
> Следущим будет вопрос: "Как сделать так, чтобы программа
> запускалась только один раз в день?"
Да пусть немного поразвлекается.
Такая корова нужна самому,
Такую корову не продам никому.
Anatoly Podgoretsky (2007-07-10 15:45:00) [5]
> А причем здесь 30 запусков ?
Ни причем, читай внимательно вопрос.
Разница между было и хочу
Сергей М. (2007-07-10 15:16:00) [6]
> поставил защиту
Грош цена такой "защите" в базарный день.
Германн (2007-07-10 15:13:00) [7]
> Сергей М. © (10.07.07 15:11) [9]
>
>
> > как осуществить саму математику с датой
>
>
> А причем здесь 30 запусков ?
>
Следущим будет вопрос: "Как сделать так, чтобы программа запускалась только один раз в день?"
:)
Германн (2007-07-10 15:12:00) [8]
> Rouse_ © (10.07.07 14:46) [3]
>
> Жжош Легыч :) Небось специально хранил ;)
>
Да у него небось все стены облеплены подобными перлами. Даже в сортире :)
Сергей М. (2007-07-10 15:11:00) [9]
> как осуществить саму математику с датой
А причем здесь 30 запусков?
Ega23 (2007-07-10 14:51:00) [10]
> Ну да :)
Почитай хелп по Tdatetime :)
homm_ro (2007-07-10 14:49:00) [11]Ну да :)
Ega23 (2007-07-10 14:49:00) [12]
> homm_ro (10.07.07 14:47) [4]
Открыть секрет? :)
Ega23 (2007-07-10 14:48:00) [13]
> Жжош Легыч :) Небось специально хранил ;)
Я такие вещи всегда храню!
homm_ro (2007-07-10 14:47:00) [14]> [1] Ega23 © (10.07.07 14:45)
Епа…
На пхп это одна строка.
Rouse_ (2007-07-10 14:46:00) [15]Жжош Легыч :) Небось специально хранил ;)
clickmaker (2007-07-10 14:46:00) [16]пиши зашифрованной при первом запуске. Если попытаются подменить, сделай, чтоб программа писала "неверный файл ключа" и отваливала
Ega23 (2007-07-10 14:45:00) [17]Воспользоваться функцией IncDay:
function TfmMain.IncDay(const DateTime: TDateTime; NumberOfDays: Integer): TDateTime;
{Функция предназначена для изменения даты (DateTime) путем добавления количества дней (NumberOfDays). Значение NumberOfDays может быть отрицательным.}
var
Y, M, D, CountDays: Word;
N: Integer;
Sign, NoBreak: Boolean;
begin
Sign := NumberOfDays >= 0;
DecodeDate(DateTime, Y, M, D);
N := NumberOfDays;
NoBreak := True;
if Sign then //Прибавить
begin
while(NoBreak) do
begin //Количество дней в месяце
CountDays := MonthDays[IsLeapYear(Y), M];
if (N + D) <= CountDays then //Если в пределах данного месяца
begin
Inc(D, N);
NoBreak := False;
end
else
begin
if M < 12 then
Inc(M, 1)
else
begin
M := 1;
Inc(Y, 1);
end;
N := N - (CountDays - D);
D := 0;
end;
end;
end
else //Отнять
begin
N := -N;
while(NoBreak) do
begin
if D > N then //Если в пределах данного месяца
begin
Dec(D, N);
NoBreak := False;
end
else
begin
if M > 1 then
Dec(M, 1)
else
begin
M := 12;
Dec(Y, 1);
end;
//Количество дней в месяце
CountDays := MonthDays[IsLeapYear(Y), M];
N := N - D;
D := CountDays;
end;
end;
end;
Result := EncodeDate(Y, M, D);
//Установить время из старой даты
ReplaceTime(Result, DateTime);
end;