Jump to content


Photo

Programa - Altera Registro


  • Faça o login para participar
16 replies to this topic

#1 corvox

corvox

    That's No Easy Way Out

  • Usuários
  • 434 posts
  • Sexo:Masculino

Posted 02/03/2005, 16:15

Olá gostaria de saber como programa um button para qnd eu clicar nel ele aterar algumas chaves de registros automaticamente. Tem como ? Estou utlilizando Delphi 5.

Edição feita por: corvox, 02/03/2005, 16:16.


#2 proteus_adi

proteus_adi

    @handle:=proteus;//>>>

  • Usuários
  • 309 posts
  • Sexo:Não informado
  • Localidade:Minas Gerais>> Belo Horizonte
  • Interesses:Programação e Web>>>

Posted 03/03/2005, 21:28

algumas chaves de registro de uma base de dados?
PROTEUS [ADSUMUS]
ETERNAL ########
---------------------------------------------------------------
"Já dizia o mestre: PROGRAMAR é diferente de CODIFICAR"...

#3 corvox

corvox

    That's No Easy Way Out

  • Usuários
  • 434 posts
  • Sexo:Masculino

Posted 03/03/2005, 23:47

Nao! Registro do windows msm aqueles que voce pde editar usando regedit... como posso fazer ?

#4 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 04/03/2005, 01:15

Olá! ;)

Seguinte... B)

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? B)

Qualquer coisa tamos aê... :)

Flw's, T+V! :DAté mais

#5 corvox

corvox

    That's No Easy Way Out

  • Usuários
  • 434 posts
  • Sexo:Masculino

Posted 05/03/2005, 15:26

Opa vlw! Mas eu gostaria de saber tbem alem de alterar chave como criar a chave ??

Edição feita por: corvox, 05/03/2005, 15:28.


#6 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 05/03/2005, 15:52

Opa vlw! Mas eu gostaria de saber tbem alem de alterar chave como criar a chave ??

Olá! ;)

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? B)

Flw's, T+V! :DAté mais

#7 corvox

corvox

    That's No Easy Way Out

  • Usuários
  • 434 posts
  • Sexo:Masculino

Posted 05/03/2005, 16:17

Opa.. mas tpw o valor a chave existe... mas eu quero criar o valor e esse valor e DWord como q eu posso fazer ?

Edição feita por: corvox, 05/03/2005, 16:23.


#8 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 05/03/2005, 16:46

Opa.. mas tpw o valor a chave existe... mas eu quero criar o valor e esse valor e DWord como q eu posso fazer ?

Opa... ;)

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! :DAté mais

#9 corvox

corvox

    That's No Easy Way Out

  • Usuários
  • 434 posts
  • Sexo:Masculino

Posted 05/03/2005, 19:32

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 :)

#10 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 06/03/2005, 08:21

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 :)

Opa... ;)

DWORD é mesma coisa que integer... então, logo temos:

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;

Sacou? B)

Flw's, T+V! :DAté mais

#11 corvox

corvox

    That's No Easy Way Out

  • Usuários
  • 434 posts
  • Sexo:Masculino

Posted 06/03/2005, 11:03

Hum tendi agora.. por isso que alguns valores nao estavao sendo alterado... mas no caso eu iria ter que fazer a funcao para alterar valor que é integer no caso DWORD e no caso que for uma string correto ?

#12 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 06/03/2005, 12:18

Opa... ;)

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? B)

Flw's, T+V! :D Até mais

#13 corvox

corvox

    That's No Easy Way Out

  • Usuários
  • 434 posts
  • Sexo:Masculino

Posted 06/03/2005, 17:11

Vida Loka brigadao por estar ajudando e mas nao ta dando certo na hora de aplicar o codigo nas strings, meu código ta o seguinte

// 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 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 06/03/2005, 17:41

Opa... ;)

Este erro só acontece na compilação do Delphi... no programa, num acontece este erro... e funciona normalmente... B)

Veja:

function IsInteger(TestaString:String):Boolean;
begin
try
StrToInt(TestaString);
except
On EConvertError do Result:=False;
else
Result:=True;

end;
end;

É aí que o erro acontece...

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... (y) ...no Delphi o erro ocorre, mas ao apertar F9 novamente, o programa continua normalmente... e muda o registro sem nenhum problema... B)

Aqui deu certinho... :)

Flw's, T+V! :DAté mais

#15 corvox

corvox

    That's No Easy Way Out

  • Usuários
  • 434 posts
  • Sexo:Masculino

Posted 06/03/2005, 21:49

Po mas eu achei zuado dar erro pq depois que executa e crias as chaves... ele mostra uma msg que deu certo ... esquisito mas msm assim vlw :) c vc conseguir arrumar o erro me da um toque




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq