У меня есть приложение, которое должно работать в течение длительного времени без присмотра в Windows XP и 7. Он работает на удаленной машине, на которой установлен LogMeIn, так что я могу посмотреть на нее издалека. В программе есть регулярные задачи по ведению журнала, которые отслеживаются таймерами.
Я заметил, что, если ПК был настроен на сохранение экрана после задержки, а затем отображать экран входа пользователя в систему при выходе из заставки, мое приложение перестанет работать, когда ПК войдет в заставку.
Когда я вхожу удаленно и выкидываю его из экранной заставки, он продолжает с того места, где остановился, но за прошедший период данные не регистрируются.
Я думал, что решил эту проблему, сняв флажок «при возобновлении, показывать экран приветствия» в настройках заставки, но проблема, похоже, снова вернулась. Я вообще пытался отключить заставку - не повезло.
Как я могу убедиться, что моя программа работает постоянно? Я знаю, что на экране приветствия Windows сообщает, что у меня запущено "x программ", но, похоже, это не распространяется на таймеры Windows, по крайней мере, в некоторых случаях.
Дополнительная информация:
Я добавил отладочный код и получил немного больше информации.
Приложение представляет собой приложение с графическим интерфейсом Delphi 2006. Одна из обычных задач, которую он выполняет, - это создание отчета. Пока создается отчет (это может занять некоторое время), я показываю индикатор выполнения. Это реализовано как модальная форма, где вся обработка происходит в обработчике OnPaint
.
Я обнаружил, что если отчет запускается после запуска экранной заставки и установлен флажок «при возобновлении показа экрана приветствия», метод OnPaint
этой модальной формы никогда не срабатывает. Событие OnShow
формы запускается, и приложение затем зависает. Как только мы выходим из заставки и возобновляем работу, происходит событие OnPaint
и все происходит.
Мое исходное предположение о том, что события таймера не запускались во время активной заставки, было неверным. Фактически, другой код для предотвращения повторного входа в событие таймера препятствовал тому, чтобы что-либо происходило до тех пор, пока отчет не был завершен, и отчет не был зацеплен за событие OnPaint
.
Есть какие-нибудь предложения относительно того, как реализовать эту форму прогресса таким образом, чтобы она работала, когда ПК сохранил экран на экране приветствия?