Não Mostrar meu Exe no Ger. de Tarefas 2000
03/04/2006
0
Algum de vocês desenvolveu algum sistema para rodar em win2000 e precisou que o mesmo não aparecesse no Gerenciador de Tarefas e conseguiu realmente esta façanha?
Pergunto isso, pois turo que tentei até hoje, incluindo as dicas deste forum e de alguns outros, retornam o mesmo erro: ´não funcionam´ :!:
Se algum dos amigos tiver uma rotina que funcione ou que não dê erro de kernel (não encontrou a função reg...não sei das quantas), poste aki por favor.
Abs e Bons Códigos :wink:
Paulocesar1301
Posts
04/04/2006
Paullsoftware
Posto aqui o código para bloquear o acesso ao gerenciador, mais acho que já deve tê-lo visto em outro tópico aqui do forum...
procedure Tanks(bTF: Boolean); var Reg: TRegistry; begin reg := TRegistry.Create; reg.RootKey := HKEY_CURRENT_USER; reg.OpenKey(´Software\Microsoft\Windows\CurrentVersion\Policies\System´, True); Reg.WriteString(´Nome da Chave´,´Valor´); if bTF = True then begin reg.WriteString(´DisableTaskMgr´, ´1´); end else if bTF = False then begin reg.DeleteValue(´DisableTaskMgr´); end; reg.CloseKey; end;
op´s...
qq coisa se tiver mais sorte que eu, compartilha ae com a gente! :wink:
04/04/2006
Paulocesar1301
Este é o meu problema... eu estava utilizando o bloqueio ao gerenciador, mas instalaram um sistema novo de terceiros aqui e o mesmo trava com freqüência e só no gerenciador para detoná-lo, aliás a gerência aqui resolver liberar os acessos todos por aqui temporariamente para ver no que dá !!! apesar de eu já saber... vão detonar meu programa do gerenciador e não poderão ter sua tela monitorada... já gerei uma rotina de contingência para avaliar quando isso acontece, mas o que eu queria mesmo é evitar isso !!!
Aliás... aproveitando o tópico... ainda vou testar isso mas já vou perguntando... se eu coloco um código no OnDestroy... o mesmo é executado quando eu detono o exe pelo gerenciador ?
04/04/2006
Paullsoftware
seria igual uma queda de energia...
o que vc pode tentar fazer é criar um serviço que fique gerenciando a sua aplicação, e detecte quando ela for finalizada executando assim um determinado codigo de prevenção...
no meu sistema de lan-house eu faço assim!
além de bloquear o gerenciador, eu tenho um serviço (na realidade uma thread) que fica verificando a existência do meu sistema, caso não esteja aberto, a minha thread abre-o automaticamente.. é basicamente como funciona algums speewares que já ví por ai!
Claro, estou usando o código de forma benéfica! 8)
04/04/2006
Michael
Terminar um processo através gerenciador de tarefas do Windows é o mesmo que chamar a API [b:404ab11712]TerminateProcess[/b:404ab11712]. A aplicação será fechada instanteamente e a memória usada por ela teoricamente liberada.
[b:404ab11712]Halt[/b:404ab11712], por sua vez, irá respeitar o evento [b:404ab11712]OnDestroy [/b:404ab11712]de cada componente instanciado pela aplicação, através do sistema de [b:404ab11712]Owner [/b:404ab11712]do Delphi.
Sobre esconder o programa da lista de processos, é possível impedir que ele seja fechado ao invés de não exibí-lo, via [b:404ab11712]API Hooking[/b:404ab11712], hookando, como mencionado, a API TerminateProcess.
[]´s
04/04/2006
Paullsoftware
04/04/2006
Martins
Terminar um processo através gerenciador de tarefas do Windows é o mesmo que chamar a API [b:67642c937c]TerminateProcess[/b:67642c937c]. A aplicação será fechada instanteamente e a memória usada por ela teoricamente liberada.
[b:67642c937c]Halt[/b:67642c937c], por sua vez, irá respeitar o evento [b:67642c937c]OnDestroy [/b:67642c937c]de cada componente instanciado pela aplicação, através do sistema de [b:67642c937c]Owner [/b:67642c937c]do Delphi.
Sobre esconder o programa da lista de processos, é possível impedir que ele seja fechado ao invés de não exibí-lo, via [b:67642c937c]API Hooking[/b:67642c937c], hookando, como mencionado, a API TerminateProcess.
[]´s[/quote:67642c937c]
Levando-se em consideração q esse sistemo possa vir a travar por um motivo não esperado, a única forma então de fechá-lo seria remover o hook previamente instalado na API TerminateProcess.
Só um rascunho de uma DLL para Hookar a API TerminateProcess. Claro q falta implementar muita coisa ainda, é simplesmente um rascunho.
library TProcHook; uses SysUtils, Classes, Windows, bmsAPIHook; var TerminateProcessNext : function(hProcess: THandle; uExitCode: UINT): BOOL; stdcall; function TerminateProcessCallback(hProcess: THandle; uExitCode: UINT): BOOL; stdcall; var ... begin .... end; {$R *.res} begin bmsHookAPI(´kernel32.dll´, ´TerminateProcess´, @TerminateProcessCallback, @TerminateProcessNext); end.
Acho q podemos usar ainda IPC nesse caso, não podemos Michael?
Boa sorte!
04/04/2006
Michael
Dependendo do que se deseja fazer, sim [b:aa87419472]Martins[/b:aa87419472]. Mas se for apenas impedir o fechamento do processo, não é necessário usar IPC.
Talvez uma caixa pedindo uma senha para fechar o programa fosse interessante, para se poder finalizar o processo em determinadas situações. Neste caso será preciso usar Inter Process Communication.
[]´s
04/04/2006
Martins
Dependendo do que se deseja fazer, sim [b:8e3d1266d7]Martins[/b:8e3d1266d7]. Mas se for apenas impedir o fechamento do processo, não é necessário usar IPC.
Talvez uma caixa pedindo uma senha para fechar o programa fosse interessante, para se poder finalizar o processo em determinadas situações. Neste caso será preciso usar Inter Process Communication.
[]´s[/quote:8e3d1266d7]
:wink:
Valew!
Clique aqui para fazer login e interagir na Comunidade :)