Todo mundo já deve conhecer sobre a manipulação de registros do Windows através do Delphi, então o que eu vou mostrar é um exemplo prático do que você pode fazer.
Conteúdo dessa postagem:
- Listar pastas de uma determinada chave de registro.
- Buscar através de uma lista de pastas, uma pasta com um caracter coringa.
- Verificar existência de uma chave de registro.
- Excluir uma chave de registro.
Antes de mais nada, temos que declarar a biblioteca Registry no projeto.
Conteúdo dessa postagem:
- Listar pastas de uma determinada chave de registro.
- Buscar através de uma lista de pastas, uma pasta com um caracter coringa.
- Verificar existência de uma chave de registro.
- Excluir uma chave de registro.
Antes de mais nada, temos que declarar a biblioteca Registry no projeto.
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Registry;
Já declarada, você poderá manipular variáveis do tipo TRegistry, vou colocar a procedure inteira mas você pode parametrizar ela conforme a sua necessidade.
A procedure abaixo apaga um determinado registro fixo no programa, mas o problema é que a primeira chave é variável, ou seja, não tem como passar um caminho fixo para excluir o registro.
A solução foi executar um loop, buscando pelo caracter coringa, até encontrar o registro a excluir.
Raiz: HKEY_USERS
Chave: S-1-5-21-xxxxxxxxxx-xxxxxxxxx-xxxxxxxxxx-xxxx\Software\SimonTatham\putty\SshHostKeys\
onde xxxxxxxxxx-xxxxxxxxx-xxxxxxxxxx-xxxx é variável de computador para computador.
procedure ApagaRegistrosWindows; var i : integer; RegWin : TRegistry; achou, fim : boolean; Chaves : TStringList; begin RegWin := TRegistry.Create; // Chama o construtor do objeto RegWin.RootKey := HKEY_USERS; // seta raiz do registro Chaves := TStringList.Create; // cria uma stringlist para referência RegWin.OpenKey('', False); // abre a pasta da raiz caso exista RegWin.GetKeyNames(Chaves); // associa as pastas para a stringlist // inicializa variáveis i := 0; achou := false; fim := false; while ((not achou) and (not fim)) do begin // busca a chave que contém 'S-1-5-21' e não contenha a palavra 'Classes' if ((Pos('S-1-5-21', Chaves.Strings[i]) > 0) and (Pos('Classes', Chaves.Strings[i]) = 0)) then achou := true else if i = Chaves.Count-1 then // se estiver no último registro, termina fim := true else Inc(i); // se não encontrar, incrementa o contador end; if achou = true then begin // facilitando a vida do programador Chaves.Strings[i] := Chaves.Strings[i] + '\Software\SimonTatham\PuTTY\SshHostKeys'; // verifica se o registro existe if RegWin.KeyExists(Chaves.Strings[i]) then RegWin.DeleteKey(Chaves.Strings[i]); // apaga o registro se existir end; RegWin.CloseKey; // Fecha a chave e o objeto RegWin.Free; // Libera o registro da memória Chaves.Free; // Libera a stringList da memória end;