Bloqueando o Windows pelo Delphi

 

Muitas vezes precisamos restringir o acesso à algumas funções do Windows, como painel de controle, ou até mesmo de desligar o Windows. Tudo isso pode ser feito através de configurações no registro do Windows.

O Registro do Windows nada mais é do que um banco de dados que armazena informação sobre suas configurações. Esse banco de dados pode ser utilizado por qualquer aplicação, por exemplo você pode utilizar o registro do windows para armazenar a string de conexão de um banco de dados ou a última posição de uma determinada janela de seu aplicativo.

Acessando o Registro do Windows

O Delphi encapsulou toda a rotina de manipulação ao registro em uma classe chamada TRegistry  que está localizada na Unit Registry. Veja na listagem 1 um exemplo de como utilizar a classe TRegistry.

 

Listagem 1. Exemplo do Help do Delphi sobre como usar TRegistry

function GetRegistryValue(KeyName: string): string;

var

  Registry: TRegistry;

begin

  Registry := TRegistry.Create(KEY_READ);

  try

    Registry.RootKey = HKEY_LOCAL_MACHINE;

    Registry.OpenKey(KeyName, False);

    Result := Registry.ReadString('VALUE1');

  finally

    Registry.Free;

  end;

end;

 

A função acima permite que seja lido o valor contido na chave passada como parâmetro. Eu particularmente considero o uso do registro do windows um pouco perigoso porque o acesso a suas chaves é todo através de string, portanto se durante a execução passamos uma valor que não existe, não vamos obter o valor esperado ou podemos criar uma nova chave desnecessária.

Os segredos do registro

Digamos que você precise “esconder” o botão desligar do menu Iniciar. Para a maioria dos usuários comuns do windows isso já seria suficiente para “entrarem em pane”. Então vamos lá inicie uma nova aplicação e em seu formulário principal acrescente dois botões com os respectivos textos “Esconder botão Desligar” e “Trazer botão Desligar”, veja Figura 1.

 

 

Figura 1. Aplicação exemplo

 

Para fazer o que precisamos devemos incluir no registro do windows, exatamente na localização HKEY_Current_User/Software/Microsoft/Windows/CurrentVersion/Policies dentro da chave Explorer um novo valor “secreto” do tipo DWORD de nome NoClose. O valor NoClose poderá conter apenas um número que é 0 (falso, desligado) ou 1 (verdadeiro, ligado) .

Crie um método conforme a listagem 2, lembrando de acrescentar à clausula Uses a unit Registry.

 

Listagem 2. Método que irá alterar o registro

procedure TForm1.RemoverBotaoDesligar(SimNao: Boolean);

const

  Registro = '\Software\Microsoft\Windows\CurrentVersion\Policies\';

  Chave = 'Explorer\';

  YesNo : array[False .. True] of Word = (0, 1);

begin

  with TRegistry.Create do

  try

    RootKey:=HKEY_CURRENT_USER;

    if OpenKey(Registro + Chave, True) then

      WriteInteger('NoClose',YesNo[SimNao]);

    CloseKey;

  finally

    Free;

  end;

end;

 

No botão “Esconder...” chame nosso método passando parâmetro True, e no botão “Trazer...” chame o método com parâmetro False. Execute a aplicação clique no primeiro botão, reinicie ou efetue um Logoff e veja o resultado.

Existem algumas outras chaves, na tabela 1 vemos algumas delas, lembrando que a chave raiz é HKEY_Current_User/Software/Microsoft/Windows/CurrentVersion/Policies

 

Subchave /Explorer

Valor

Descrição

NoRun

Desabilita o comando “Executar” do menu Iniciar

NoLogoff

Desabilita o “Logoff” da janela de segurança

NoClose

Desabilita o botão “Desligar” do menu Iniciar

NoDesktop

Desabilita os ícones da área de trabalho

NoFind

Desabilita o comando “Procurar” do menu Iniciar

NoControlPanel

Desabilita o Painel de Controle

Subchave /Network

NoFileSharingControl

Desabilita os controles de compartilhamento de arquivos

NoPrintSharing

Desabilita os controles de compartilhamento de impressoras

Tabela 1. Algumas chaves ocultas

Conclusão

Vimos que o registro do Windows é uma base de dados da qual podemos utilizar em nossas aplicações, além disso, ele esconde alguns “segredos” que, se conhecidos, podem otimizar e/ou restringir o uso do sistema operacional. Infelizmente esses segredos não são documentos, mas nada que um tempo de pesquisa no Google não resolva.

Abraço e até a próxima.