DESABILITAR CTRL ALT DEL NO WINXP, 2000 E NT Esta dica visa solucionar, ou pelo menos dar uma boa idéia de como impedir que o usuário invoque o Gerenciador de Tarefas do Windows XP e finalize um aplicativo ou serviço. Existem muitos métodos espalhados por aí utilizados para impedir o usuário de finalizar o programa com a combinação CTRL+ALT+DEL... e alguns outros que impedem a aplicação de ser exibida na lista de processos do Windows, utilizando chamadas externas à função RegisterServiceProcess da dll Kernel32. O problema é que essa função não é encontrada nas versões mais recentes do Windows, o que torna impossível utiliza-la para impedir que um programa seja exibido na lista de processos ativos. A extensão do problema é maior ainda quando tentamos simplesmente desativar o conjunto CTRL+ALT+DEL do aplicativo, ou mesmo tentar enganar o Windows, forçando a aplicação a aparecer como um Screen-Saver... Assim, se você quer esconder o seu programa dos sistemas compatíveis com o Windows NT (o 2000 e o XP) você precisará trabalhar com o registro... O procedimento HabilitaCTRLALTDEL aceita um valor booleano para o parâmetro Yes / No. Se você envia um valor False como parâmetro, e o código é executado, quando o usuário pressiona a combinação CTRL + ALT + DEL, o Gerenciador de Tarefas (Task Manager) será desabilitado, enviando a mensagem padrão. Aqui está o código: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Adicione a unit Registry no seu projeto ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Como usar: Você poderá iniciar e finalizar o procedimento respectivamente nos eventos OnCreate e OnDestroy do seu formulário principal: procedure TForm1.FormCreate(Sender: TObject); begin HabilitaCTRLALTDEL(False); // Desativa a combinação CTRLALTDEL. Desativa também o Gerenciador de Tarefas no computador com a aplicação executada; end; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ procedure TForm1.FormDestroy(Sender: TObject); begin HabilitaCTRLALTDEL(True); // Habilita o conjunto de teclas, bem como o Gerenciador de Tarefas; end; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Insira o procedimento HabilitaCTRLALTDEL na sessão implementation do form, como segue abaixo: procedure HabilitaCTRLALTDEL(YesNo : boolean) ; const sRegPolicies = '\Software\Microsoft\Windows\CurrentVersion\Policies'; begin with TRegistry.Create do try RootKey:=HKEY_CURRENT_USER; if OpenKey(sRegPolicies+'\System\',True) then begin case YesNo of False: begin WriteInteger('DisableTaskMgr',1) ; end; True: begin WriteInteger('DisableTaskMgr',0) ; end; end; end; CloseKey; if OpenKey(sRegPolicies + '\Explorer\',True) then begin case YesNo of False: begin WriteInteger('NoChangeStartMenu',1) ; WriteInteger('NoClose',1) ; WriteInteger('NoLogOff',1) ; end; True: begin WriteInteger('NoChangeStartMenu',0) ; WriteInteger('NoClose',0) ; WriteInteger('NoLogOff',0) ; end; end; end; CloseKey; finally Free; end; end; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ E é isso ai, salve o seu projeto e rode o programa. Faça o teste apertando a tecla Ctrl+Alt+Del. Se tudo deu certo, o Windows exibirá uma mensagem de erro padrão, informando que o Gerenciador de Tarefas foi desativado. Você pode até mesmo tentar executar o aplicativo do Gerenciador de tarefas, o arquivo taskmgr.exe. Espero que o artigo seja útil a vocês! Observação: Matheus Venâncio venancio@advancecci.com.br