Bloquear combinaçôes de teclas
Wesley...
Como faço para bloquear algumas combinações de teclas tipo:
Ctrl+Alt+Del
Ctrl+Shitf+Esc
Obrigado...
Evandro Silva
Curtidas 0
Respostas
Wesley Yamazack
29/01/2009
Olá, Evandro. Segue abaixo a procedure para poder desabilitar. as teclas
procedure TForm1.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;
//Para ativar a função execute a mesma e passe um valor Boolean para ela. Conforme abaixo
procedure TForm1.Button1Click(Sender: TObject);
begin
HabilitaCTRLALTDEL( True ));
//HabilitaCTRLALTDEL( False ));
end;
Espero que te ajude, qualquer coisa estamos ai.
Att,
Wesley Y
procedure TForm1.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;
//Para ativar a função execute a mesma e passe um valor Boolean para ela. Conforme abaixo
procedure TForm1.Button1Click(Sender: TObject);
begin
HabilitaCTRLALTDEL( True ));
//HabilitaCTRLALTDEL( False ));
end;
Espero que te ajude, qualquer coisa estamos ai.
Att,
Wesley Y
GOSTEI 0
Evandro Silva
29/01/2009
Boa tarde Wesley...
Essa rotina que vc me passou para bloquear as teclas server também para a combinação ctrl+shift+esc e alt+f4 ????
Eu preciso que o usuário não consiga usar as combinações de teclas para terminar a execução da minha aplicação através das teclas ctrl_alt_del (que permite a troca de usuário, desligar o micro, fazer logoff, etc) e nem pela combinação de teclas ctrl+shift+esc (que habilita o Gerenciador de Tarefas do Windows) e nem pela combinação alt+f4.
O que eu preciso é travar através da minha aplicação qualquer combinação de teclas que permita que o usuário consiga encerrar o meu aplicativo sem ser atarvés do menu close ou através da digitação da senha para poder encerrar a mesma. Mesmo as teclas Alt+F4 deve ser bloqueada.
Fico no aguardo de sua resposta.
Obrigado...
GOSTEI 0
Wesley Yamazack
29/01/2009
Olá Evandro, a rotina serve para CRTL+ALT +DEL , e CTRL+SHFT+ESC.
PARA DESABILITAR O ALT+F4 você usa.
Você terá que programar o evento FormKeyDown, do seu formulário, com a seguinte linha de código.
if (Key = VK_F4) and (ssAlt in Shift) then
Key := 0;
Sendo assim teu usuario, não irá conseguir fechar com ALT+F4.
Abracos.
Att,
Wesley Y
PARA DESABILITAR O ALT+F4 você usa.
Você terá que programar o evento FormKeyDown, do seu formulário, com a seguinte linha de código.
if (Key = VK_F4) and (ssAlt in Shift) then
Key := 0;
Sendo assim teu usuario, não irá conseguir fechar com ALT+F4.
Abracos.
Att,
Wesley Y
GOSTEI 0
Evandro Silva
29/01/2009
Boa tarde.
Wesley testei sua rotina em minha aplicação e quase deu 100% de acerto...
Funcionou quase tudo conforme eu preciso a única coisa que houve que não deu certo é que quando eu uso a combinação de teclas "ctrl+alt+del" o windows me exibe uma tela com as seguintes opções:
- Bloquear este computador
- Trocar usuário
- Alterar uma senha
- Cancelar
Eu preciso que nem essa tela seja exibida... o sistema tem de travar o hardwarer (micro) enquanto estiver rodando independente das combinações de teclas que o usuário use (apenas combinações: "ctrl + alguma tecla", "alt + f4").
O micro deve ser liberado apenas com a digitação de uma palavra secreta (senha).
Esta quase tudo ok... só preciso que a tela que é exibida pelo windows quando uso as teclas "ctrl+alt+del" não seja exibida também...
Estou usando o windows vista no micro que estou desenvolvendo a aplicação mas a mesma deve rodar em qualquer versão do windows (inclisive server).
Fico no aguardo... obrigado.
GOSTEI 0
Evandro Silva
29/01/2009
Wesley..
Testei a aplicação apenas com a rotina que vc me avia passado da primeira vez, sem o código para barrar o "alt+f4" e ela rodou e não foi fechada pela combinação "alt+f4).
Vou deixar sem implementar o evendo formKeyDown que vc me passou por último.
Para encerrar a aplicação só necessito barrar a tela que mencionei anteriormente quando uso as teclas ctrl+alt+del.
Fico no aguardo.
GOSTEI 0
Wesley Yamazack
29/01/2009
Evandro, estou numa missao !! descobri quais sao as chaves que respresentao as teclas que voce quer..rsrsrs.. nao vai ser facil...Mas estou tentando aqui peco que espere um pouco. Assim que tiver o resultado te respondo.
Att,
Wesley Y
Att,
Wesley Y
GOSTEI 0
Wesley Yamazack
29/01/2009
Evandro, infelizmente nao tem como. Estou vendo aqui no registro do window, mas nao tem as chamadas para desabilitar estas funcoes.
As que consegui achar foram estas.
WriteInteger('NoChangeStartMenu',0) ;
WriteInteger('NoClose',0) ;
WriteInteger('NoLogOff',0) ;
WriteInteger('NoRun',0);
//WriteInteger('NoDesktop',0);
//WriteInteger('NoFind',0);
//WriteInteger('NoChange',0);
//WriteInteger('undockwithoutlogon',0);
//WriteInteger('NoChangeStartMenu',0);
Infelizmente, nao tem as entradas para estas chamadas do regitro.
Att,
Wesley Y
As que consegui achar foram estas.
WriteInteger('NoChangeStartMenu',0) ;
WriteInteger('NoClose',0) ;
WriteInteger('NoLogOff',0) ;
WriteInteger('NoRun',0);
//WriteInteger('NoDesktop',0);
//WriteInteger('NoFind',0);
//WriteInteger('NoChange',0);
//WriteInteger('undockwithoutlogon',0);
//WriteInteger('NoChangeStartMenu',0);
Infelizmente, nao tem as entradas para estas chamadas do regitro.
Att,
Wesley Y
GOSTEI 0
Evandro Silva
29/01/2009
Wesley...
Bom dia.
Rapaz para eu poder concluir o aplicativo só faltava eu conseguir bloquear a tela que te falei que aparece quando se pressiona as teclas ctrl+alt+del que já mencionei anteriormente.
Ah e tem mais uma coisinha que me esqueci de perguntar também... que é como desabilitar a tecla do menu inciar do windows no teclado.
Não tem mesmo como bloquear a tela do ctrl+alt+del????
Me passe por favor uma rotina para bloquear o botão do menu iniciar do teclado.
Fico no aguardo... obrigado.
GOSTEI 0
Evandro Silva
29/01/2009
Wesley olha eu aqui de novo.
To enchendo o saco né... rsrsrsrsrs
Seguinte...
Nesse mesmo aplicativo preciso fazer com que ele rode como um serviço do windows para que não apareça no Gerenciador de Tarefas do Windows.
Estava tendo usar a seguinte dica que encontrei em um site :
Escondendo o Programa de Ctrl+Alt+Del
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{Para ocultar um programa, deve-se registrar este como um serviço do Windows. Normalmente um serviço do Windows é ativado quando com a inicialização do sistema (Windows) e pemanece ativo até a finalização deste. Este processo esconde o programa da lista "Ctrl+Alt+Del"}
Const
Servico_Simples = 1;
Servico_Unregister = 1;
Function RegisterServiceProcess(DwProcessID, dwType: DWord): DWord; StdCall; External 'KERNEL32.dll';
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID, Servico_Simples);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID, Servico_Unregister);
end;
end.
Tentei usar essa dica mas da um erro na execução dizendo que não foi possível localizar o ponto de entrada do procedimento RegisterServiceProcess na de vínculo dinâmico KERNEL32.dll.
Como resolvo essse problema ?
PS.: Não se esqueça de que esse aplicativo vai estar rodando em várias versões do windows (98/ME/XP/Vista e Server).
Fico no aguardo... Obrigado
GOSTEI 0
Wesley Yamazack
29/01/2009
Evandro, Bom dia. Segue abaixo um exemplo com todo material que consegui achar sobre o bloqueio de teclas. Quanto a ocultar o Programa do Gereniador de Tarefas, você nao precisa se preocupar, pois a rotina que te mandei, ela não deixar nem você abrir o gerenciador de tarefas. Porém as funções, Bloquear, Altera senha, não estão funcionando pois o windows não tem chamadas para esta Politicas, no REGEDIT. Infelizmente não tem.
Abaixo segue o link do exemplo. De uma olhada bem detalhada nele.
http://www.4shared.com/file/83234875/7c5fc21/BLOQUEAR_WINDOWS.html
Abraços
Att,
Wesley Y
Abaixo segue o link do exemplo. De uma olhada bem detalhada nele.
http://www.4shared.com/file/83234875/7c5fc21/BLOQUEAR_WINDOWS.html
Abraços
Att,
Wesley Y
GOSTEI 0
Evandro Silva
29/01/2009
Bom dia Wesley...
Valeu pela ajuda... muito grato.
Pode dar a chamada por encerrada.
Bom final de semana.
GOSTEI 0
Wesley Yamazack
29/01/2009
Boa tarde Evandro,
O chamado foi concluido. Se precisar de mais alguma coisa. estamos a disposição.
Boa semana.
Att,
Wesley Y
O chamado foi concluido. Se precisar de mais alguma coisa. estamos a disposição.
Boa semana.
Att,
Wesley Y
GOSTEI 0