Chave do Registro já existe o que posso fzer?

Started by Casanova, 16 de January , 2007, 03:07:19 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Casanova

Estou tentndo fazer um prog que otimiza um pouco o Windows fazendo mudanças no registro mas notei que dá erro quando a chave já existe. Veja o codigo:

procedure Tformotimiza.bitbtnagiliza2Click(Sender: TObject);
var
reg:Tregistry;

begin
reg:=Tregistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('System\CurrentControlSet\Control\SessionManager\MemoryManagement',false);
reg.WriteBool('ClearPageFileAtShutdown',true);
reg.CloseKey();
reg.Free;


end;

Eu tentei até deletar a chave primeiro e depois cria-la novamente mas num deu certo tentei isso no evento oncreate do form, tente por assim if reg.valueExist(' ClearPageFileAtShutdown') then
reg.deletevalue('('ClearPageFileAtShutdown')
else
reg.writebool ('ClearPageFileAtShutdown');
end;

Mas também não dá pergunto como faço para mudar um valor que já exist no registro?

whit3_sh4rk

Olha, pelo meu ver, não tem nada aparentemente errado..

Somente na parte que você colocou:
Quoteif reg.valueExist(' ClearPageFileAtShutdown') then
reg.deletevalue('('ClearPageFileAtShutdown')
else
reg.writebool ('ClearPageFileAtShutdown');
end;

Estou sem delphi aqui, e não mexo faz uns 7 meses, então não tenho absoluta certeza.. mas realmente não encontrei nada de errado..

Fale qual erro que aparece que aí fica mais fácil ajudar..

[]s

shake

Ai cara fiz a procedure aqui e deu certo!!!


procedure TForm1.Button1Click(Sender: TObject);
var
reg:TRegistry;

begin
    reg:=Tregistry.Create;
    reg.RootKey:=HKEY_LOCAL_MACHINE;
    reg.OpenKey('\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management', False);
if  reg.ValueExists('ClearPageFileAtShutdown') then
    reg.WriteBool('ClearPageFileAtShutdown', true);
    reg.CloseKey();
    reg.Free;
end;


Abraços

shake

Putz malz ai esqueci de colocar pra criar se não existir!


procedure TForm1.Button1Click(Sender: TObject);
var
reg:TRegistry;

begin
    reg:=Tregistry.Create;
    reg.RootKey:=HKEY_LOCAL_MACHINE;
    reg.OpenKey('\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management', False);
    reg.WriteBool('ClearPageFileAtShutdown', true);
if  reg.ValueExists('ClearPageFileAtShutdown') then
    reg.WriteBool('ClearPageFileAtShutdown', true);
    reg.CloseKey();
    reg.Free;
end;

Agora acho que está certo!

Abraços

Casanova

Whit3_sh4rk e Shake muito obrigado por terem respondido, observei o codigo de vcs e abri o projeto e notei a diferença.
Modifiquei e deu certo. Uma coisa insignificante, mas eu não sabia que isso podia interferir.
Obrigado mais uma vez.

Ah...o erro foi ter ajuntado as palavras: veja;

certo = reg.OpenKey('\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management', False);

errado =reg.OpenKey('\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement', False);

Só isso, é preciso aumentar o grau de meus oculos rsss...

Desculpa o infortunio....

shake

Que isso cara estou aqui pra ajudar mesmo!

Normalz ocorrer isso!

Nesse caso vc mexendo com o registro vc poderia fazer assim:

Clicar no nome da chave que deseja ultilizar com o botão direito do mouse e mandar copiar o nome da chave!

Fica mais rápido e diminui a possibilidade de erro!

Blz???

Até mais!

Abraços

whit3_sh4rk

[Casanova]
Rs.. que bom que foi isso.. pq eu realmente não havia encontrado nada de errado.. porém não tinha reparado muito bem no nome da chave..

[]s