Jump to content


Photo

Como Executar Um .reg (registro Do Win)


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

#1 NewMillenium

NewMillenium

    pois é... Papalégua 200k...

  • Usuários
  • 84 posts
  • Sexo:Não informado
  • Interesses:Praticamente tudo que diz respeito à informática.

Posted 12/10/2003, 19:32

Eu queria executar um arquivo .reg para modificação do registro do windows...
1- como executar o arquivo?
2- como fazer com que a mensagem "Tem certeza que deseja adicionar as informações contidas em <caminho do arquivo> ao Registro?"



vlw, galera! obrigado pela paciencia...
NewMillenium

Maior Interesse
Interação entre Flash e Action Script

Contato
ICQ - 172478715
E-mail - daniel902@zipmail.com.br
Atenção: Ao me adicionar no icq, identifique-se como membro do fórum, por favor. Obrigado.

#2 The Tamer

The Tamer

    'F' motivos para se gostar de Hexa

  • Usuários
  • 185 posts
  • Sexo:Não informado

Posted 13/10/2003, 12:47

Com o seu .REG em mãos, é só executar uma função do delphi que "EXECUTA" o qualquer arquivo de acordo as configurações do PC do usuário, através do SHELL do Windows:


ShellExecute(Handle, nil, PChar('C:\file.reg'), nil, nil,SW_SHOWNORMAL)

Atenção: Se as configurações do computador do usuário, definir que os arquivos .REG devem abrir no NOTEPAD por exemplo, o notepad vai abrir ao invés de mesclar o .REG no registro...

O melhor a se fazer é através do DELPHI, você por linhas de código adicionar e alterar chaves no registro. (sempre com muita cautela e fazendo backups do registro todo para tal)


A função mais completa desta função ShellExecute é assim:

//
// Esta procedure requer a ShellApi na clausula Uses da unit.
//
// Declare a procedure na clausua ""private"" da unit e coloque-a apos a clausula
// implementation assim: procedure Tform1.ExecFile(F: String);
//
// use a procedure assim: ExecFile('c:\windows\Ladrilhos.bmp')
//

procedure ExecFile(F: String);
var
 r: String;
begin
 case ShellExecute(Handle, nil, PChar(F), nil, nil,SW_SHOWNORMAL) of
  ERROR_FILE_NOT_FOUND: r := 'O arquivo especificado não foi encontrado ou não existe. (CD-ROM ERROR)';
  ERROR_PATH_NOT_FOUND: r := 'O Caminho é inválido ou não existe. (CD-ROM ERROR)';
  ERROR_BAD_FORMAT: r := 'O Aplicativo está corrompido ou não é um Aplicativo Win32 válido. (POWERPNT.EXE ERROR)';
  SE_ERR_ACCESSDENIED: r := 'O sistema negou acesso a este arquivo por algum motivo desconhecido. (Bloqueio de Compartilhamento do sistema NTFS do WinNT)';
  SE_ERR_ASSOCINCOMPLETE: r := 'Este arquivo tem uma associação inválida ou incompleta a ele. (Erro de Registro do Windows)';
  SE_ERR_DDEBUSY: r := 'A transação DDE não pode ser efetuada por já haver outra Transação DDE em andamento. (Feche todos os arquivos PowerPoint, e execute novamente)';
  SE_ERR_DDEFAIL: r := 'Não foi possível efetuar a transação DDE. (Reinstale o PowerPoint)';
  SE_ERR_DDETIMEOUT: r := 'A transação DDE não pode ser efetuada porque o tempo requerido expirou. (Reinicie o Computador)';
  SE_ERR_DLLNOTFOUND: r := 'Uma Biblioteca DLL necessária ào aplicativo associado não foi encontrada. (Reinstale o PowerPoint)';
  SE_ERR_NOASSOC: r := 'Este arquivo não tem nenhum aplicativo associado à ele. (Reinstale o PowerPoint)';
  SE_ERR_OOM: r := 'memória insuficiente para prosseguir com esta operação. (Feche um ou mais aplicativos e tente novamente)';
  SE_ERR_SHARE: r := 'Ocorreu uma violação de compartilhamento ao efetuar esta operação.';
 else
  Exit;
end;
 ShowMessage(r);
end; 


Abraços! :blink:
__________________________________________
The Tamer
Quando morrer, escrevam em minha lápide: </life>

Blog: http://www.dtsoftware.eti.br/
MCWD - Macromedia Certified Web Designer MX

#3 NewMillenium

NewMillenium

    pois é... Papalégua 200k...

  • Usuários
  • 84 posts
  • Sexo:Não informado
  • Interesses:Praticamente tudo que diz respeito à informática.

Posted 13/10/2003, 20:43

E aew kra! blz??? nussa kra, eh mto codigo pra minha cabeça... assim eu fico loko... :wacko: tipow.. o delphi acusou um erro no qual supostamente o "Handle" deveria ser uma variável... enfim... o certo eh q eu naum entendi nda e por isso queria t pedir c vc naum poderia postar um exemplo... tipow, c vc puder... por favor.. vlw pela resposta e paciencia... :lol:
NewMillenium

Maior Interesse
Interação entre Flash e Action Script

Contato
ICQ - 172478715
E-mail - daniel902@zipmail.com.br
Atenção: Ao me adicionar no icq, identifique-se como membro do fórum, por favor. Obrigado.

#4 The Tamer

The Tamer

    'F' motivos para se gostar de Hexa

  • Usuários
  • 185 posts
  • Sexo:Não informado

Posted 14/10/2003, 12:42

Faz o download deste projeto em ZIP... talvez você consiga ve-lo...
Este foi feito em Delphi 6:

Attached Files

  • Attached File  Abre.zip   1.72KB   21 downloads

__________________________________________
The Tamer
Quando morrer, escrevam em minha lápide: </life>

Blog: http://www.dtsoftware.eti.br/
MCWD - Macromedia Certified Web Designer MX

#5 NewMillenium

NewMillenium

    pois é... Papalégua 200k...

  • Usuários
  • 84 posts
  • Sexo:Não informado
  • Interesses:Praticamente tudo que diz respeito à informática.

Posted 14/10/2003, 14:35

ahnnn! vlw kra... mais tipow, como eu faço pra q ele naum mostre akela janela de confirmação????
vlw, flws!
NewMillenium

Maior Interesse
Interação entre Flash e Action Script

Contato
ICQ - 172478715
E-mail - daniel902@zipmail.com.br
Atenção: Ao me adicionar no icq, identifique-se como membro do fórum, por favor. Obrigado.

#6 The Tamer

The Tamer

    'F' motivos para se gostar de Hexa

  • Usuários
  • 185 posts
  • Sexo:Não informado

Posted 15/10/2003, 12:27

Daí você tem que fazer as alterações via código...

Mandei mais um anexo de um mini-projeto que cria e lê uma chave no registro... depois pegue ele e dê uma fuçada...

Depois experimente outras funções do código, mas sempre tomando cuidado com os testes... a função "DELETEKEY" é perigosa e deve ser usada somente com certeza do registro a ser apagado...

Faça um backup do seu registro e brinque! ;)

OBS.: Sempre que for usar o registro, declare no uses a unit Registry.

Se tiver mais problemas, poste, podemos nos aprofundar mais no registro.


flw. :ph34r:

Attached Files


__________________________________________
The Tamer
Quando morrer, escrevam em minha lápide: </life>

Blog: http://www.dtsoftware.eti.br/
MCWD - Macromedia Certified Web Designer MX

#7 NewMillenium

NewMillenium

    pois é... Papalégua 200k...

  • Usuários
  • 84 posts
  • Sexo:Não informado
  • Interesses:Praticamente tudo que diz respeito à informática.

Posted 17/10/2003, 12:53

ahn.. vlw kra... eu vo fuçar aki e ver o que eu consigo fazer, soh uma coisinha...como eu faço pra xegar na chave "[HKEY_CURRENT_USER\Control Panel\Desktop]", atraves da REG.ROOT ?? :huh:

ah! e mais uma coisa... como eu faço pra editar uma chave? tipow, no caso, vc criou uma chave "Meu_Registro" e pos um valor nela... se eu usasse esse processo, eu sobreescreveria a chave... mas creio eu que seria mais rapido editá-la..

flw... vlw.

Edição feita por: NewMillenium, 17/10/2003, 16:28.

NewMillenium

Maior Interesse
Interação entre Flash e Action Script

Contato
ICQ - 172478715
E-mail - daniel902@zipmail.com.br
Atenção: Ao me adicionar no icq, identifique-se como membro do fórum, por favor. Obrigado.

#8 The Tamer

The Tamer

    'F' motivos para se gostar de Hexa

  • Usuários
  • 185 posts
  • Sexo:Não informado

Posted 29/10/2003, 11:30

As chaves do registro tem estrutura semelhante a uma árvore de diretórios, portanto, chamadas do tipo Software\Microsoft\CurrentConfig são perfeitamente válidas.

Daí por diante, você poderá ler e gravar diversas chaves e valores no registro do Windows (recomenda-se fazer a operação em um bloco protegido, para evitar problemas durante o processamento).

Ao criar um objeto do tipo TRegistry, o root padrão é sempre o HKEY_CURRENT_USER.

Para alterá-lo, utilize:

Reg.RootKey := [root key desejado];

onde "Reg" é o nome da minha variável TRegistry; e:

onde [root key desejado] é o root que se deseja conectar, como por exemplo HKEY_LOCAL_MACHINE.


Depois de definir o seu ROOT, você da a função OpenKey(chave, PodeCriar);

Exemplo


procedure AbreChave;
 var
   Reg: TRegistry; 
 begin
   Reg.Root := HKEY_CURRENT_USER;
   Reg.OpenKey('Control Panel\Desktop',false);
      // Defini "false", pois se a chave não existir, ele NÃO cria
   {faz o que quiser aqui}

   Reg.Free;    // Libere da memória
 end;


PS.: Caso você escreva em um valor que já existe (WriteString) por exemplo, você estará EDITANDO este ok? Caso ele não exista, você cria uma nova entrada(valor).




----------------------------------
Para escrever valores DWORD não sei, mas aqui segue um passo-a-passo legal para ler e escrever dados binários no registro:

Vamos lá:
Coloque no uses: Registry

Coloque no Form:

- três edits;

- dois botões.

Logo abaixo da palavra implementation declare:

type 
{ Declara um tipo registro } 
TFicha = record 
Codigo: integer; 
Nome: string[40]; 
DataCadastro: TDateTime; 
end;




- Escreva o evento OnClick do Button1 conforme abaixo:

procedure TForm1.Button1Click(Sender: TObject); 
var 
Reg: TRegistry; 
Ficha: TFicha; 
begin 
{ Coloca alguns dados na variável Ficha } 
Ficha.Codigo := StrToInt(Edit1.Text); 
Ficha.Nome := Edit2.Text; 
Ficha.DataCadastro := StrToDate(Edit3.Text); 
Reg := TRegistry.Create; 
try 
{ Define a chave-raiz do registro } 
Reg.RootKey := HKEY_CURRENT_USER; 
{ Abre uma chave (path). Se não existir cria e abre. } 
Reg.OpenKey('Cadastro\Pessoas\', true); 
{ Grava os dados (o registro) } 
Reg.WriteBinaryData('Dados', Ficha, SizeOf(Ficha)); 
finally 
Reg.Free; 
end; 
end;

- Escreva o evento OnClick do Button2 conforme abaixo:

procedure TForm1.Button2Click(Sender: TObject); 
var 
Reg: TRegistry; 
Ficha: TFicha; 
begin 
Reg := TRegistry.Create; 
try 
{ Define a chave-raiz do registro } 
Reg.RootKey := HKEY_CURRENT_USER; 
{ Se existir a chave (path)... } 
if Reg.KeyExists('Cadastro\Pessoas') then 
begin 
{ Abre a chave (path) } 
Reg.OpenKey('Cadastro\Pessoas', false); 
{ Se existir o valor... } 
if Reg.ValueExists('Dados') then 
begin 
{ Lê os dados } 
Reg.ReadBinaryData('Dados', Ficha, SizeOf(Ficha)); 
Edit1.Text := IntToStr(Ficha.Codigo); 
Edit2.Text := Ficha.Nome; 
Edit3.Text := DateToStr(Ficha.DataCadastro); 
end else 
ShowMessage('Valor não existe no registro.') 
end else 
ShowMessage('Chave (path) não existe no registro.'); 
finally 
Reg.Free; 
end; 
end;


Observações:
Qualquer tipo de dado pode ser gravado e lido de forma binária no registro do Windows. Para isto você precisa saber o tamanho do dado. Para dados de tamanho fixo, use SizeOf(). Lembrete: não grave dados muito extensos no Registro do Windows (ex: imagens),


Abraços :)
__________________________________________
The Tamer
Quando morrer, escrevam em minha lápide: </life>

Blog: http://www.dtsoftware.eti.br/
MCWD - Macromedia Certified Web Designer MX

#9 NewMillenium

NewMillenium

    pois é... Papalégua 200k...

  • Usuários
  • 84 posts
  • Sexo:Não informado
  • Interesses:Praticamente tudo que diz respeito à informática.

Posted 01/11/2003, 20:58

A soh! vlw kra... mais tipow, eu to fazenu tudo legalzinho e ele naum vai.. tipow eu naum ia alterar uma soh chave.. ia ser umas par... intaum, dae ele soh autera a primeira.... vc sab me dizer o q esta acontecenu???? flw kra.!
NewMillenium

Maior Interesse
Interação entre Flash e Action Script

Contato
ICQ - 172478715
E-mail - daniel902@zipmail.com.br
Atenção: Ao me adicionar no icq, identifique-se como membro do fórum, por favor. Obrigado.

#10 The Tamer

The Tamer

    'F' motivos para se gostar de Hexa

  • Usuários
  • 185 posts
  • Sexo:Não informado

Posted 04/11/2003, 07:59

POSTA O CÓDIGO AQUI PARA VERMOS!


FLW
__________________________________________
The Tamer
Quando morrer, escrevam em minha lápide: </life>

Blog: http://www.dtsoftware.eti.br/
MCWD - Macromedia Certified Web Designer MX




0 user(s) are reading this topic

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

IPB Skin By Virteq