GARANTIR DESCONTO

Fórum Saber quando minha aplicação está sendo fechada... #350256

07/12/2007

0

E ai Galera,


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

Lauro.balceiro

Responder

Posts

07/12/2007

Marcosrocha

Saber se a sua aplicação está sendo fechada com CTL+ALT+DELETE é técnicamente impossível.


Responder

Gostei + 0

10/12/2007

Sistemald

Quando você pressione o ctrl alt del e pede para fechar aplicação, ele manda um sinal para aplicação fechar normal, e espera um tempo até matar o processo.

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.


Responder

Gostei + 0

10/12/2007

Lauro.balceiro

Entaum galera...

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


Responder

Gostei + 0

10/12/2007

Facc

Entaum galera... 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


E se vc dar um findwindow? procurando o gerenciador de tarefas do Windows? se achar vc emite uma mensagem...


Responder

Gostei + 0

10/12/2007

Marcosrocha

E se vc dar um findwindow? procurando o gerenciador de tarefas do Windows? se achar vc emite uma mensagem...

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?


Responder

Gostei + 0

10/12/2007

Facc

[quote:70242870dc=´Facc´]E se vc dar um findwindow? procurando o gerenciador de tarefas do Windows? se achar vc emite uma mensagem...

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


Responder

Gostei + 0

11/12/2007

Lauro.balceiro

Enaum [b:afb025bdf3]mcblade[/b:afb025bdf3] minha aplicação é um sistema de controle comercial, onde eu tenho uma tela de frente de caixa que deverá ser fechada apenas se o usuário clicar no botão fechar, pois ai eu faço vários tipos de validações... o problema passa a acontecer se o usuário fechar o processo, ai não teria como fazer essas validações a não ser que eu consiga interceptar esse comportamento.

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...


Responder

Gostei + 0

11/12/2007

Lauro.balceiro

e ai pessoal alguma dica???


Responder

Gostei + 0

12/12/2007

Lauro.balceiro

desculpe a incistência pessoal, mas é que preciso muito dessa solução...


Responder

Gostei + 0

13/12/2007

Weber

Pode parecer ´gambiarra´ mas você pode criar um ´guard´, tipo o FBGuard do firebird.

- 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.


Responder

Gostei + 0

13/12/2007

Silviogs

Olá amigo

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


Responder

Gostei + 0

13/12/2007

Lauro.balceiro

Cara isso naum ajuda, na verdade não quero saber quando o windows será fechado e sim quando minha aplicação estiver sendo finalizado via gerenciados de processos.

mas de qualquer forma muito obrigado


Responder

Gostei + 0

14/12/2007

Lauro.balceiro

E ai pessoal, alguém se habilita???


Responder

Gostei + 0

15/12/2007

Docdoc

Caros Amigos:

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.


Responder

Gostei + 0

15/12/2007

Lauro.balceiro

Cara essa solução parece que realmente servirá, mas o problema é que dá um erro Unknown directive ´message´...

o que poderia ser isso?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar