Eu tenho um aplicativo que precisa ser executado por um longo período sem supervisão no Windows XP e 7. Eu o tenho executado em uma máquina remota que tenha o LogMeIn instalado para que eu possa vê-lo de longe. O programa tem tarefas regulares de registro que são estimuladas por timers.
Eu tinha notado que se o PC fosse configurado para salvar a tela após um atraso e apresentar a tela de login do usuário ao sair do protetor de tela, meu aplicativo pararia de funcionar quando o computador entrasse em proteção de tela.
Quando eu faço o login remotamente e faço o kickout do protetor de tela, ele continua de onde parou, mas não há dados registrados no período intermediário.
Eu pensei que tinha resolvido isso desmarcando a opção "no currículo, mostrar tela de boas-vindas" nas opções de proteção de tela, mas o problema parece estar de volta. Eu tentei desativar o screensaver completamente - sem sorte.
Como posso ter certeza de que meu programa continua funcionando o tempo todo? Eu sei que na tela de boas-vindas o Windows me diz que tenho "x programas em execução", mas isso não se estende ao Windows temporizadores, pelo menos algum tempo.
Mais informações:
Adicionei um código de depuração e tenho um pouco mais de informação.
O aplicativo é um aplicativo GUI Delphi 2006. Uma das tarefas regulares que ele faz é gerar um relatório. Enquanto o relatório está sendo gerado (pode levar algum tempo) eu mostro uma barra de progresso. Isso é implementado como um formato modal no qual todo o processamento ocorre em um manipulador OnPaint
.
Descobri que, se o relatório for acionado depois que a proteção de tela tiver sido ativada e a caixa de seleção "no currículo, mostrar tela de boas-vindas" estiver marcada, o método OnPaint
desse formato modal nunca será disparado. O evento OnShow
do formulário é disparado e o aplicativo é interrompido. Assim que sairmos do protetor de tela e retomarmos, o evento OnPaint
será executado e tudo acontecerá.
Minha suposição original de que os eventos do timer não estavam disparando enquanto o protetor de tela estava ativo estava errada. Na verdade, outro código para impedir a reentrada do evento do timer estava impedindo que nada acontecesse até que o relatório fosse concluído, e o relatório foi roubado no evento OnPaint
.
Alguma sugestão sobre como implementar este formulário de progresso de forma que ele seja executado quando o computador tiver sido salvo na tela de boas-vindas?