Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать об изменении системного времени, Не говорите мне про WM_TIMECHANGE 
:(
    Опции темы
bems
Дата 6.1.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



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

Код

procedure TimeData(system,real:FILETIME);
var s,r:SYSTEMTIME;
begin
FileTimeToSystemTime(system,s);
FileTimeToSystemTime(real,r);
outputdebugstring(PChar(inttostr(s.wDay)+'.'+inttostr(s.wMonth)+'.'
                        +inttostr(s.wYear)+' '+inttostr(s.wHour)+':'
                        +inttostr(s.wMinute)+':'+inttostr(s.wSecond)
                        +'      '+inttostr(r.wDay)+'.'+inttostr(r.wMonth)+'.'
                        +inttostr(r.wYear)+' '+inttostr(r.wHour)+':'
                        +inttostr(r.wMinute)+':'+inttostr(r.wSecond)   ))
end;

function TimingThread(param:pointer):DWORD;stdcall;
var hkeyBase:HKEY;SysTime,LastSysTime,RealTime:FILETIME;KeyType,size:cardinal;
    CantRead:boolean;delta,Zero64:int64;timer:THANDLE;st:SYSTEMTIME;
    TickCount:FILETIME;
begin
CantRead:=false;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,BaseKey,0,KEY_ALL_ACCESS,hkeyBase);
KeyType:=REG_BINARY;
size:=SizeOf(FILETIME);
if (RegQueryValueEx(hkeyBase,'SystemTime',nil,@KeyType,@LastSysTime,@size)<>ERROR_SUCCESS) or
   (size<>SizeOf(FILETIME))
    then CantRead:=true;
size:=SizeOf(FILETIME);
if (RegQueryValueEx(hkeyBase,'RealTime',nil,@KeyType,@RealTime,@size)<>ERROR_SUCCESS) or
   (size<>SizeOf(FILETIME))
    then CantRead:=true;
if CantRead then begin
                 CantReadRegistry;
                 delta:=0;
                 end
            else delta:=int64(SysTime)-int64(RealTime);

GetLocalTime(st);
SystemTimeToFileTime(st,SysTime);
int64(RealTime):=int64(SysTime)-delta;
timer:=CreateWaitableTimer(nil,false,nil);
Zero64:=0;
SetWaitableTimer(timer,Zero64,10000,nil,nil,false);
TickCount.dwHighDateTime:=0;
TickCount.dwLowDateTime:=GetTickCount;
while true do begin
              WaitForSingleObject(timer,INFINITE);
              GetLocalTime(st);
              SystemTimeToFileTime(st,SysTime);
              TickCount.dwLowDateTime:=GetTickCount-TickCount.dwLowDateTime;
              int64(RealTime):=int64(RealTime)+int64(TickCount)*10000;

              outputdebugstring(pchar(inttostr(TickCount.dwLowDateTime)+'     '+inttostr(int64(systime))));//!!

              TickCount.dwLowDateTime:=GetTickCount;
              TimeData(SysTime,RealTime);//!!
              end;
result:=0;
end;


Код уже работал пару минут, и тут я запустил debugview c SysInternals и получил такую картину
(см вложение)

Мне не нравиться третья строка (она всегда третья, сколько бы времени не прошло с момента запуска моей библиотеки до запуска debugview).
Помогите плиз, уж очень не хочется перехватывать SetSystemTime.

Это сообщение отредактировал(а) bems - 6.1.2006, 15:49

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  __________.JPG 65,00 Kb


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.