Форум: "Система";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];
ВнизКАК можно определить Изменение Системного времени Найти похожие ветки
← →
cdaDmitriy (2002-05-01 14:45) [0]О WM_TIMECHANGE можно не говорить Я знаю но Мне
НУЖНО НА СКОЛЬКО ИЗМЕНИЛОСЬ ВРЕМЯ
procedure WMTimeChange(var Message: TMessage); message WM_TIMECHANGE;
procedure TForm1.WMTimeChange(var Message: TMessage); begin
Inc(Count);
Label1.Caption:="Change Time "+IntTostr(Count);
Label2.Caption:=INTTOSTR(Message.WParam)+" "+INTTOSTR(Message.lParam);
inherited;
endж
← →
cdaDmitriy (2002-05-02 08:46) [1]?????
← →
Ka$per (2002-05-02 10:07) [2]вообще, вопрос не совсем понятен
попробуй так:
var d:TDateTime;
.....
d:=Now;
......
d:=Now-d;
d - разница между вызовами в сутках,
остается только перевести в минуты(секунды, и т.д.)
← →
cdaDmitriy (2002-05-02 11:17) [3]An application sends the WM_TIMECHANGE message to all top-level windows after changing the system time.
Приложение посылает WM_TIMECHANGE сообщение всем окнам верхнего уровня после изменения(замены) системного времени.
Но это что прошло изменение А МНЕ НУЖНО НА СКОЛЬКО
Например было 10:23:34 юзер поменял на 11:23:34
Мне после изменения нужно получить D=1 час
← →
Dima-k17 (2002-05-02 12:56) [4]Точно не понял, но по-моему здесь лежала информация о том, как из одного времени вычесть другое. Если ее найти, то придется постоянно мониторить проверяя текущее время. А после того, как произошло изменение поймать ставшее время и после этого из 1-го вычесть 2-е.
← →
JC (2002-05-02 16:15) [5]Попробуй через каждое n-ное время(1 сек) получать текущее, а потом сравнивай если изменилось больше чем на n, то вычисляй
D= [текущее вр.]-[последнее запомненное]-n...
← →
cdaDmitriy (2002-05-05 11:32) [6]Может есть еще что нибудь ????
← →
anod (2002-05-05 16:55) [7]А что в wParam и lParam лежит?
← →
Набережных С. (2002-05-05 18:15) [8]Видимо, можно при запуске программы делать:
TC:=GetTickCount;
Dt:=Now;
А при получении сообщения использовать их для вычисления изменения. Чтобы исключить возможность переполнения, можно обновлять переменные, скажем, каждые 10 часов, или 10 дней, или ...
← →
cdaDmitriy (2002-05-06 08:42) [9]> anod ©
An application sends the WM_TIMECHANGE message to all top-level windows after changing the system time.
WM_TIMECHANGE
wParam = 0; // not used, must be zero
lParam = 0; // not used, must be zero
Вешать обработчик на Таймер не хотелось бы
Может есть еще что нибудь ????
ВОПРОС ОЧЕНЬ КРИТИЧЕН ЗАКАЗЧИК УТВЕРЖДАЕТ ЧТО НЕ МЕНЯЕТ
ВРЕМЯ А Я ДУМАЮ (САБОТАЖ)
← →
leshy (2002-05-06 09:35) [10]Если пользователь меняет время вручную, то есть сам при помощи мышки, приложение будет терять фокус. Почему бы не использовать события потери/получения фокуса для запуска/остановки контроля времени?
← →
cdaDmitriy (2002-05-06 09:59) [11]> leshy
Апликация очень большая ~ 100 окон и в каждом контролы
отследить события потери/получения фокуса сложно
кроме того Апликация работает не всегда
нужна маленькая прог, для логера изменения времени
← →
Cobalt (2002-05-07 05:41) [12]Совершенно согласен с Набережных С. (05.05.02 18:15)
Запоминай GetTickCount и текущую дату при загрузке.
Когда ловишь WM_TIMECHANGE , сравнивай (разницу между GetTickCount и запомненым) и с разницей между текущей датой и запомненой (переводи в мс). Если разница >1 минуты, то это означает мухлёж.
А логер... А что логер? Почти то же самое.
Призагрузке <повтор>
Когда ловишь WM_TIMECHANGE, записываешь новое время(которое было установлено), и то, которое должно быть по твоим выкладкам(т.е. разница в TickCount переводится в сек/мин/часы/дни + сохраненная дата). Это все шифруется как-нить (чтоб в текстовом ред-ре не было видно), и говорится заказчику, что она, якобы, ведет запись результатов некоторых внутренних процессов.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c