Edição feita por: corvox, 02/03/2005, 16:16.
Programa - Altera Registro
#1
Posted 02/03/2005, 16:15
#2
Posted 03/03/2005, 21:28
ETERNAL ########
---------------------------------------------------------------
"Já dizia o mestre: PROGRAMAR é diferente de CODIFICAR"...
#3
Posted 03/03/2005, 23:47
#4
Posted 04/03/2005, 01:15
Seguinte...
Na cláusula uses, adicione Registry.
Agora siga esta função e procedure que fiz...
Função para obter valor:
function ObtemValor(RootKey:HKEY;Chave,Valor:String):String; var Reg:TRegistry; begin Reg:=TRegistry.Create; Reg.RootKey:=HKEY_CURRENT_USER; Reg.OpenKey(Chave,False); Result:=Reg.ReadString(Valor); Reg.CloseKey; Reg.Destroy; end;Procedure para mudar valor:
procedure MudaValor(RootKey:HKEY;Chave,Nome,Valor:String); var Reg:TRegistry; begin Reg:=TRegistry.Create; Reg.RootKey:=RootKey; Reg.OpenKey(Chave,False); Reg.WriteString(Nome,Valor); Reg.CloseKey; Reg.Destroy; end;Exemplo de uso da função:
begin Edit1.Text:=Caption:=ObtemValor(HKEY_CURRENT_USER,'Software\Microsoft\Internet Explorer\Main','Start Page'); end;Exemplo de uso da procedure:
MudaValor(HKEY_CURRENT_USER,'Software\Microsoft\Internet Explorer\Main','Start Page','http://forum.wmonline.com.br'); end;Sacou?
Qualquer coisa tamos aê...
Flw's, T+V! Até mais
#5
Posted 05/03/2005, 15:26
Edição feita por: corvox, 05/03/2005, 15:28.
#6
Posted 05/03/2005, 15:52
Olá!Opa vlw! Mas eu gostaria de saber tbem alem de alterar chave como criar a chave ??
No OpenKey(Chave,False), ele apenas abre a chave... se quiser criá-la se não existir, mude para True.
Para criar um valor, o WriteString tanto cria quanto altera, se houver, altera, se não houver, cria.
Sacou?
Flw's, T+V! Até mais
#7
Posted 05/03/2005, 16:17
Edição feita por: corvox, 05/03/2005, 16:23.
#8
Posted 05/03/2005, 16:46
Opa...Opa.. mas tpw o valor a chave existe... mas eu quero criar o valor e esse valor e DWord como q eu posso fazer ?
Bom, esqueci de mencionar isto... mas veja, o Registry pode escrever estes tipos de valores:
WriteCurrency(const Name:String; Value: Currency);
WriteBinaryData(const Name:String; var Buffer; BufSize: Integer);
WriteBool(const Name:String; Value: Boolean);
WriteDate(const Name:String; Value: TDate);
WriteDateTime(const Name:String; Value: TDateTime);
WriteFloat(const Name:String;Value: Double);
WriteInteger(const Name:String;Value: Integer);
WriteString(const Name:String; Value: String);
WriteExpandString(const Name:String; const Value: String);
WriteTime(const Name:String; Value: TTime);
Qualquer coisa tamos aê...
Flw's, T+V! Até mais
#9
Posted 05/03/2005, 19:32
#10
Posted 06/03/2005, 08:21
Opa...Mas no caso eu faca uma DWORD com o tipo que esta na função MUDAVALOR nao vai dar problema correto? pq alterando pelo jeito nao deu aki
DWORD é mesma coisa que integer... então, logo temos:
Sacou?procedure MudaValor(RootKey:HKEY;Chave,Nome:String;Valor:Integer);
var
Reg:TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
Reg.OpenKey(Chave,False);
Reg.WriteInteger(Nome,Valor);
Reg.CloseKey;
Reg.Destroy;
end;
Flw's, T+V! Até mais
#11
Posted 06/03/2005, 11:03
#12
Posted 06/03/2005, 12:18
Sim, você poderia criar uma procedure chamada por exemplo MudaValorString, MudaValorInteger...
Se for mexer só com string e integer, pode-se juntar as duas, usando também uma outra função, veja:
// Verifica se string contém um inteiro
function IsInteger(TestaString:String):Boolean;
begin
try
StrToInt(TestaString);
except
On EConvertError do Result:=False;
else
Result:=True;
end;
end;
// 2 em 1
procedure MudaValor(RootKey:HKEY;Chave,Nome:String;Valor:Variant);
var
Reg:TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
Reg.OpenKey(Chave,False);
if IsInteger(Valor) then
Reg.WriteInteger(Nome,Valor)
else
Reg.WriteString(Nome,Valor);
Reg.CloseKey;
Reg.Destroy;
end;
Daí poderíamos dos dois jeitos, veja os exemplos:
// String
MudaValor(HKEY_CURRENT_USER,'Software\Microsoft\Internet Explorer\Main','Start Page','http://forum.wmonline.com.br');
end;
// Integer
MudaValor(HKEY_CURRENT_USER,'Software\Microsoft\Internet Explorer\Main','Page_Transitions',0);
Entendido?
Flw's, T+V! Até mais
#13
Posted 06/03/2005, 17:11
// Mudando valor Int ou String procedure MudaValor(RootKey:HKEY;Chave,Nome:String;Valor:Variant); var Reg:TRegistry; begin Reg:=TRegistry.Create; Reg.RootKey:=RootKey; Reg.OpenKey(Chave,False); if IsInteger(Valor) then Reg.WriteInteger(Nome,Valor) else Reg.WriteString(Nome,Valor); Reg.CloseKey; Reg.Destroy; end; procedure CriaValor(RootKey:HKEY;Chave,Nome,Valor:String); var Reg:TRegistry; begin Reg:=TRegistry.Create; Reg.RootKey:=RootKey; Reg.OpenKey(Chave,True); Reg.WriteString(Nome,Valor); Reg.CloseKey; Reg.Destroy; end; procedure TForm1.Button1Click(Sender: TObject); begin // Chaves alteradas MudaValor(HKEY_CURRENT_USER,'Software\Microsoft\Internet Explorer\Main','Start Page','http://www.compuativa.com.br'); // Pagina Incial MudaValor(HKEY_CURRENT_USER,'Software\Microsoft\Internet Explorer\Main','Default_Page_URL','http://www.compuativa.com.br'); // Pagina Default MudaValor(HKEY_CURRENT_USER,'Control Panel\Desktop','MenuShowDelay',10); // ShowMenuDelay
Se eu tirar a linha muda pro www.compuativa.com.br ele vai funcionar ou seja so ta funfando com as integer.. ta dando o seguinte erro:
"http://www.compuativa.com.br" is not a valid integer value
Parece que o erro é na linha abaixo, pois apos eu dar Ok no erro acima ele aponta pra linha seguinte:
if IsInteger(Valor) then
Como posso solucionar ?
Edição feita por: corvox, 06/03/2005, 17:15.
#14
Posted 06/03/2005, 17:41
Este erro só acontece na compilação do Delphi... no programa, num acontece este erro... e funciona normalmente...
Veja:
É aí que o erro acontece...function IsInteger(TestaString:String):Boolean;
begin
try
StrToInt(TestaString);
except
On EConvertError do Result:=False;
else
Result:=True;
end;
end;
Mas, ao dar except, setamos o Result para False, fazendo com que nosso programa não o interprete...
Tente rodar o programa normalmente, sem ser pelo F9 do Delphi... ...vc verá que não ocorre erro algum... ...no Delphi o erro ocorre, mas ao apertar F9 novamente, o programa continua normalmente... e muda o registro sem nenhum problema...
Aqui deu certinho...
Flw's, T+V! Até mais
#15
Posted 06/03/2005, 21:49
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)