Não Mostrar meu Exe no Ger. de Tarefas 2000
Pessoal não me matem !!
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:
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
Curtidas 0
Respostas
Paullsoftware
03/04/2006
amigo, sinceramente acho difícil você esconder algum processo do win2k ou xp, pois, o gerenciador mostra os processos e não apenas as tarefas, o que você pode tentar é bloquear o acesso ao gerenciador de tarefas, mais ocultar a sua aplicação eu já rodei muito atrás disso tb. nenhuma das dicas funcionaram da versão 2000 pra cá...
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...
op´s...
qq coisa se tiver mais sorte que eu, compartilha ae com a gente! :wink:
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:
GOSTEI 0
Paulocesar1301
03/04/2006
É caríssimo...
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 ?
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 ?
GOSTEI 0
Paullsoftware
03/04/2006
nunca testei, mais acredito que não. Uma vez que o sistema é desligado de form brusca... semelhante ao Halt(0) por exemplo.
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)
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)
GOSTEI 0
Michael
03/04/2006
nunca testei, mais acredito que não. Uma vez que o sistema é desligado de form brusca... semelhante ao Halt(0) por exemplo.
seria igual uma queda de energia...
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
GOSTEI 0
Paullsoftware
03/04/2006
[quote:c05c197965]Halt, por sua vez, irá respeitar o evento OnDestroy de cada componente instanciado pela aplicação, através do sistema de Owner do Delphi.
[/quote:c05c197965] valeu, pensei que o Halt terminava a aplciação bruscamente! :wink:GOSTEI 0
Martins
03/04/2006
[quote:67642c937c=´paullsoftware´]nunca testei, mais acredito que não. Uma vez que o sistema é desligado de form brusca... semelhante ao Halt(0) por exemplo.
seria igual uma queda de energia...
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!
GOSTEI 0
Michael
03/04/2006
Acho q podemos usar ainda IPC nesse caso, não podemos 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
GOSTEI 0
Martins
03/04/2006
[quote:8e3d1266d7=´Martins´]Acho q podemos usar ainda IPC nesse caso, não podemos Michael?
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!
GOSTEI 0