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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2015, 13:31   #1
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Вопрос Как отследить смену даты?

Для отслеживания изменения вручную даты/времени отлавливаю сообщение message WM_TIMECHANGE. Как отловить смену системной даты при естественной ее смене, то есть при наступление полночи? Есть какие-нибудь варианты кроме как в таймере (TTimer) сравнивать даты?

Последний раз редактировалось garuna; 27.01.2015 в 13:35.
garuna вне форума Ответить с цитированием
Старый 27.01.2015, 13:44   #2
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Цитата:
garuna
Есть какие-нибудь варианты кроме как в таймере (TTimer) сравнивать даты?
Ну поставь кнопку на форму и жми на кнопку через определенные промежутки времени.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 27.01.2015, 13:46   #3
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

мне нужно чтобы программа отреагировала на наступление новой даты без участия пользователя.
garuna вне форума Ответить с цитированием
Старый 27.01.2015, 13:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В планировщик задач закинуть не вариант?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2015, 13:55   #5
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В планировщик задач закинуть не вариант?
Тогда уж проще в таймере) А вообще, неужели система не рассылает никаких сообщений при наступлении новой даты?
garuna вне форума Ответить с цитированием
Старый 27.01.2015, 14:00   #6
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Планировщик задач хорошая идея, но у меня только при помощи командной строки получается так сделать в делфи.
И еще где то слышал теорию- можно просто программно скопировать файл который создает планировщик (сделать в нем измерения если надо), а затем его просто создать в той же папке в которй и брали и с тем же расширением, но при помощи делфи уже.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 27.01.2015, 14:11   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
неужели система не рассылает никаких сообщений при наступлении новой даты?
Ну какбы... нет.
А зачем ей это делать?
Есть прерывания таймера, но сама винда делает это по требованию - т.е. по WM_TIMER сообщению, и только тем кто заказал такой отсчет. Произвольно она это сообщение рассылать прогам не станет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.01.2015, 00:18   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,596
По умолчанию

Можно таймеру поставить интервал, равный оставшемуся до полуночи времени. Есть пара проблем: 1. если пользователь сменит системное время, то программа это упустит; 2. таймер может не совсем точно сработать.
Arigato вне форума Ответить с цитированием
Старый 28.01.2015, 00:50   #9
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Интересно, как программа будет отличать смену дат, когда компьютер выключен, от смены дат в BIOS? Или постоянно настраивать программу на одну сессию WIN?
Как вариант, отследить текущее время, и время работы ОС. Сделать синхронизацию в памяти. Как только время/дата рассинхронизируется с часами процессора, значит была произведена ручная смена времени. Проверять синхронизацию в этом случае можно хоть раз в 5 минут. Так же нужно учесть синхронизацию часов с интернетом. Как вариант, отключить соответствующую настройку Windows программно при старте программы, и включить обратно при завершении.

Последний раз редактировалось WinCoder; 28.01.2015 в 00:57.
WinCoder вне форума Ответить с цитированием
Старый 28.01.2015, 01:02   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,596
По умолчанию

Нет никаких проблем следить в отдельном потоку, проверяя дату раз в секунду или реже (в зависимости от требуемой скорости реакции). Нагрузки на ЦП будет минимум.
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше отследить смену активного окна в Windows? Delphi ProstoK Помощь студентам 1 19.04.2012 08:09
Как сделать так чтобы не отображались даты Даты вместо Цифр в ЕКСЕЛЬ? d88n Помощь студентам 1 17.06.2011 05:16
Как сделать в Excel 2007 автоматическую смену ячейки YooJen Microsoft Office Excel 4 05.10.2010 08:14
GLScene, как сделать смену дня и ночи? Alex2009 Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 16.09.2009 20:16
Как перехватить программно смену пользователя ale_krolik Win Api 1 15.12.2006 20:15