Fórum Saber quando minha aplicação está sendo fechada... #350256
07/12/2007
0
Bem minha dúvida é mais ´escabrosa´, mas como está dificil de conseguir uma ajuda para ela entaum vou tentar um paleativo...
Tem como eu saber quando minha aplicação está sendo fechada através do gerenciado de processos. Ou seja o usuário pressiona ctrl + alt + del e seleciona meu processo e mata-o... tem como eu saber através da minha ~própria aplicação que ela está sendo fechada...???? tipo quando o usuário matar o processo aparece uma mensagem para ele...
Lauro.balceiro
Curtir tópico
+ 0Posts
07/12/2007
Marcosrocha
Gostei + 0
10/12/2007
Sistemald
se você usar o onCloseQuery, você saberá que ela esta sendo fechado e só isso, agora se foi pelo ctrl alt del, ou apertou o ´x´ na janela, não sei se tem como pegar.
Gostei + 0
10/12/2007
Lauro.balceiro
Se o cara for no gerenciador de tarefas, selecionar meu processo e finalizar o processo, eu naum consigo interceptar se o processo está sendo fechado... sei que tem como fazer isso pois já vi isso em uma outra aplicação...
alguém saberia como fazer isso... pode ser através de hooking... sei que tem uns especialistas aqui no site né nildo... tentei usar o BmsApiHook mas mesmo assim naum consegui...
tem como dar uma dica ai meu???
valew
Gostei + 0
10/12/2007
Facc
E se vc dar um findwindow? procurando o gerenciador de tarefas do Windows? se achar vc emite uma mensagem...
Gostei + 0
10/12/2007
Marcosrocha
Aí a aplicação do cara vai parecer aqueles vírus que não deixam dar CTRL+ALT+DEL ou fazer qualquer coisa com o PC...
O negócio é que se o Windows Mandou, não tem choro nem vela, sua aplicação vai fechar e pronto acabou!!!
Para ajudá-lo melhor amigo [b:36096fafa4]lauro.balceiro[/b:36096fafa4], eu gostaria de saber qual é o tipo da sua aplicação? É comercial? É um vírus? É o quê? Por que não pode ser fechada pelo usuário?
Pergunto isso pra te dar possíveis soluções ok?
Gostei + 0
10/12/2007
Facc
Aí a aplicação do cara vai parecer aqueles vírus que não deixam dar CTRL+ALT+DEL ou fazer qualquer coisa com o PC...
O negócio é que se o Windows Mandou, não tem choro nem vela, sua aplicação vai fechar e pronto acabou!!!
Para ajudá-lo melhor amigo [b:70242870dc]lauro.balceiro[/b:70242870dc], eu gostaria de saber qual é o tipo da sua aplicação? É comercial? É um vírus? É o quê? Por que não pode ser fechada pelo usuário?
Pergunto isso pra te dar possíveis soluções ok?[/quote:70242870dc]
na verdade até deixaria dar o CTRL+ALT+DEL, só emitiria um aviso para o usuário que foi precionado e gravaria num log, para verificação caso o o sistema viesse dar algum erro... eu uso esse processo e nunca tive problemas
Gostei + 0
11/12/2007
Lauro.balceiro
Realmente não quero desabilitar CTRL + ALT + DEL ou fazer um programa rodando background verificando se a minha janela está ativa ou não... pois isso é um paleativo muuiiittoooo paleativo, queria que minha aplicação fosse auto-suficiente não necessitando dessas soluções paralelas... não estou desmerecendo a solução proposta pelo nosso amigo [b:afb025bdf3]Facc[/b:afb025bdf3] ela é de grande importância, mas no meu caso não atende...
espero que alguém possa me ajudar...
Gostei + 0
11/12/2007
Lauro.balceiro
Gostei + 0
12/12/2007
Lauro.balceiro
Gostei + 0
13/12/2007
Weber
- Crie um serviço separado de seu projeto e este serviço fica encarregado de verificar se sua aplicação fechou.
- Ao abrir sua aplicação veja se seu serviço já esta rodando, se o serviço não estiver rodando então ative ele.
Gostei + 0
13/12/2007
Silviogs
tente isso.
Desligando Windows via programação
function ExitWindowsEx(uFlags : integer; // shutdown operation
dwReserved : word) : boolean; // reserved
external ´user32.dll´ name ´ExitWindowsEx´;
procedure Tchau;
const
EWX_LOGOFF = 0; // Dá ´logoff´ no usuário atual
EWX_SHUTDOWN = 1; // ´Shutdown´ padrão do sistema
EWX_REBOOT = 2; // Dá ´reboot´ no equipamento
EWX_FORCE = 4; // Força o término dos processos
EWX_POWEROFF = 8; // Desliga o equipamento
begin
ExitWindowsEx(EWX_FORCE, 0);
end;
Detectando a finalização do Windows
Para detectar a finalização do Windows, deve-se capturar a mensagem WM_ENDSESSION. Estes passos devem ser tomados:
Declarar uma rotina de manipulação de mensagens na sessao private de sua form:
procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION;
Adicionar a procedure à seção implementation de sua unit:
procedure TForm1.WMEndSession(var Msg : TWMEndSession);
begin
if Msg.EndSession = TRUE then
ShowMessage(´O Windows está finalizando ´ + #13 + ´às ´ +
FormatDateTime(´c´, Now));
inherited;
end;
acho que uma destas dicas pode ajudá-lo
Silvio Guedes
Gostei + 0
13/12/2007
Lauro.balceiro
mas de qualquer forma muito obrigado
Gostei + 0
14/12/2007
Lauro.balceiro
Gostei + 0
15/12/2007
Docdoc
O windows qdo determina o encerramento de um programa envia para este programa uma notificação [b:8b91a00d3c] WM_QUIT[/b:8b91a00d3c], após a notificação o programa sai do looping de mensagens e encerra.
Bem oq ue vc poderá fazer é colocar a sua rotina de finalização ai;
procedure WMQUIT(var Msg : TWMEndSession); message WM_QUIT; Adicionar a procedure à seção implementation de sua unit: procedure TForm1.WMQUIT(var Msg : TWMQUIT); begin RotinaDeSalvamento; end;
Se isso ai não resolver, vc poderá tentar com a mensagem WM_CLOSE, mas neste caso vc poderá evitar o encerramento da janela principal do programa simplesmente colocando no campo result da mensagem um valor acima de zero.
Gostei + 0
15/12/2007
Lauro.balceiro
o que poderia ser isso?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)