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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2014, 18:58   #1
hamik
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 11
По умолчанию контроль времени

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


Код:
begin

 
  sec := sec + 1;
  if sec = 60 then
    begin
      min := min + 1;
      sec := 0;
    end;
  if min = 60 then
    begin
      hour := hour + 1;
      min := 0;
    end;
  if hour = 24 then hour := 0;

  if sec < 10 then
    Label3.Caption := '0' + IntToStr(sec)
  else
    Label3.Caption := IntToStr(sec);

  if min < 10 then
    Label2.Caption := '0' + IntToStr(min)
  else
    Label2.Caption := IntToStr(min);

  if hour < 10 then
    Label1.Caption := '0' + IntToStr(hour)
  else
    Label1.Caption := IntToStr(hour);


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.02.2014 в 22:28.
hamik вне форума Ответить с цитированием
Старый 06.02.2014, 22:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если речь идёт о Windows, то гораздо надежней отобрать у пользователя права на изменение системного времени.
Например, создайте учётную запись с правами "Пользователь", зайдите в систему под этим пользователем и убедитесь, что сама операционнка не даст пользователю изменить системную дату и время!


ну, что же касается вашего подхода, то с таймером Вы по любому выбрали провальный путь...имхо, разумеется...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.02.2014, 23:02   #3
hamik
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
если речь идёт о Windows, то гораздо надежней отобрать у пользователя права на изменение системного времени.
Например, создайте учётную запись с правами "Пользователь", зайдите в систему под этим пользователем и убедитесь, что сама операционнка не даст пользователю изменить системную дату и время!


ну, что же касается вашего подхода, то с таймером Вы по любому выбрали провальный путь...имхо, разумеется...
речь идет именно о Windows, учетка пользователя уже есть с ограничениями но также есть админ учетка, и детишки постоянно под разными предлогами просят вход в админку ну а там сами знаете что происходит. нужно конкретно что-то что не даст откатить время, сам счетчик я скинул выше а вот как в переменые засунуть системное время не знаю
hamik вне форума Ответить с цитированием
Старый 06.02.2014, 23:04   #4
blackstrip
Форумчанин
 
Аватар для blackstrip
 
Регистрация: 21.01.2012
Сообщений: 240
По умолчанию

Можно, например, получить при старте программы:
а) текущее время (обычное там через Now())
б) количество миллисекунд с момента запуска Windows через winapi-функцию GetTickCount.

И потом когда нужно узнать переводил ли пользователь часы или нет - просто запросить еще раз GetTickCount, и разница между текущим GetTickCount и запомненным на старте GetTickCount - должна быть в точности равна изменению времени на часах с момента старта. В любом случае даже с переведенными часами можно восстановить текущее время, прибавив к стартовому datetime-времени количество прошедших миллисекунд.

А еще можно через компоненту TidNtp запрашивать интернет-время с любого ntp-сервера и синхронизовать комповские часы с этим временем. Тогда хоть обпереводись - сервер-то чётко работает, его не переведешь (правда должен быть инет подключен и сервер не в оффлайне).
blackstrip вне форума Ответить с цитированием
Старый 07.02.2014, 00:05   #5
hamik
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от blackstrip Посмотреть сообщение
Можно, например, получить при старте программы:
а) текущее время (обычное там через Now())
б) количество миллисекунд с момента запуска Windows через winapi-функцию GetTickCount.

И потом когда нужно узнать переводил ли пользователь часы или нет - просто запросить еще раз GetTickCount, и разница между текущим GetTickCount и запомненным на старте GetTickCount - должна быть в точности равна изменению времени на часах с момента старта. В любом случае даже с переведенными часами можно восстановить текущее время, прибавив к стартовому datetime-времени количество прошедших миллисекунд.

А еще можно через компоненту TidNtp запрашивать интернет-время с любого ntp-сервера и синхронизовать комповские часы с этим временем. Тогда хоть обпереводись - сервер-то чётко работает, его не переведешь (правда должен быть инет подключен и сервер не в оффлайне).
мне кажется через GetTickCount будет еще геморойнее, по крайней мере я даже представить не могу как это будет работать а насчет онлайн синхронизации тоже не вариант ведь не стоит забывать что мы вопервых делаем защиту не просто так а от детей а они не совсем глупые и легко догадаются вырубить нет и даже если не догадаются то отсутствие инета им подскажет
hamik вне форума Ответить с цитированием
Старый 07.02.2014, 00:15   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну и прогу вашу они еще быстрей раскусят
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.02.2014, 00:26   #7
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

а время биоса не вариант? я не знаю как его достать, но кажется оно не меняется программно, из по ОС
ZuBy вне форума Ответить с цитированием
Старый 07.02.2014, 00:36   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
а время биоса не вариант? я не знаю как его достать, но кажется оно не меняется программно, из по ОС
А разве БИОС показывает какое-то другое время? Всё время был уверен что RTC в компьютере есть в единственном экземпляре.
northener вне форума Ответить с цитированием
Старый 07.02.2014, 00:40   #9
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
А разве БИОС показывает какое-то другое время? Всё время был уверен что RTC в компьютере есть в единственном экземпляре.
я ничего особо не знаю о том как устроено время на компе, просто предложил. поправьте если ошибаюсь
ZuBy вне форума Ответить с цитированием
Старый 07.02.2014, 00:42   #10
hamik
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
а время биоса не вариант? я не знаю как его достать, но кажется оно не меняется программно, из по ОС
время в биосе и время в трее одно и тоже
hamik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод времени и выходного дня вместо времени Mikesh PHP 2 31.01.2014 00:22
WinAPI синхронизация времени с сайтом точного времени. Walker32 Помощь студентам 4 07.06.2012 18:59
контроль заголовков spydark91 Общие вопросы Delphi 4 15.06.2011 21:27
Контроль памяти FW-TOT Помощь студентам 2 15.11.2008 14:04
Контроль принтера Noor Общие вопросы Delphi 0 06.11.2008 20:43