Array
(
)

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

Paulocesar1301
   - 03 abr 2006

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:


Paullsoftware
   - 04 abr 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...

#Código

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:


Paulocesar1301
   - 04 abr 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 ?


Paullsoftware
   - 04 abr 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)


Michael
   - 04 abr 2006


Citação:
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 TerminateProcess. A aplicação será fechada instanteamente e a memória usada por ela teoricamente liberada.

Halt, por sua vez, irá respeitar o evento OnDestroy de cada componente instanciado pela aplicação, através do sistema de Owner 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 API Hooking, hookando, como mencionado, a API TerminateProcess.

[]´s


Paullsoftware
   - 04 abr 2006


Citação:

Citação:
Halt, por sua vez, irá respeitar o evento OnDestroy de cada componente instanciado pela aplicação, através do sistema de Owner do Delphi.
valeu, pensei que o Halt terminava a aplciação bruscamente! :wink:


Martins
   - 04 abr 2006


Citação:

Citação:
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 TerminateProcess. A aplicação será fechada instanteamente e a memória usada por ela teoricamente liberada.

Halt, por sua vez, irá respeitar o evento OnDestroy de cada componente instanciado pela aplicação, através do sistema de Owner 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 API Hooking, hookando, como mencionado, a API TerminateProcess.

[]´s


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.

#Código


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!


Michael
   - 04 abr 2006


Citação:
Acho q podemos usar ainda IPC nesse caso, não podemos Michael?


Dependendo do que se deseja fazer, sim Martins. 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


Martins
   - 04 abr 2006


Citação:

Citação:
Acho q podemos usar ainda IPC nesse caso, não podemos Michael?


Dependendo do que se deseja fazer, sim Martins. 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


:wink:

Valew!