Não Mostrar meu Exe no Ger. de Tarefas 2000

03/04/2006

0

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:


Paulocesar1301

Paulocesar1301

Responder

Posts

04/04/2006

Paullsoftware

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

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:


Responder

04/04/2006

Paulocesar1301

É 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 ?


Responder

04/04/2006

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

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)


Responder

04/04/2006

Michael

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


Responder

04/04/2006

Paullsoftware

[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:


Responder

04/04/2006

Martins

[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!


Responder

04/04/2006

Michael

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


Responder

04/04/2006

Martins

[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!


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar