Olá pessoal, através deste simples artigo vamos aprender a criar um programa que gerencie os programas que iniciam com o sistema, tendo a mesma função que o MSCONFIG. O Artigo é simples e bem detalhado, se adere a todos os níveis de programadores.
Iremos usar o registro do Windows, já que apartir do mesmo podemos trocar muitas configurações, eu considero o Registro do Windows, como o sangue do sistema operacional.
Pré- Requisitos:
Mero conhecimento em trabalhar com Registro. Registry.
Gerenciando Itens da Inicialização
Criar uma Nova Aplicação:
Declarando as Units a serem usadas
|
Vamos declarar a principal Unit de nossa aplicação, era será responsável pela entrada e obtenção de dados do registro do Windows, uma Unit bem conhecida a Registry.
Inserindo os Componente no Form
|
Nossa Aplicação terá o seguinte visual:
Usaremos os seguintes componentes:
- Imagelist
Panel
GroupBox
ListView
Edit
Button
Vamos a inserção dos itens:
Troque a cor do FORM para Branco.
Insira um Panel com a cor BRANCA, vamos colocar dentro dele um Image, com a seguinte figura:
Agora coloque um Label com o Caption Itens Iniciados com o sistema.
Ele ficará dessa forma:
Vamos colocar um GroupBox e dentro dele um ListView:
Vamos trocar as seguintes propriedades do ListView:
Para isso, selecione-o e vá até o Object Inspector:
Propriedade |
Novo Valor |
Comentário |
Ctl3D |
False |
Visual |
GridLines |
True |
Exibe linhas na ListView |
ReadOnly |
True |
Não deixa que alguém sobrescreva um item, edite um item. |
RowSelect |
True |
Deixa que o usuário selecione um item |
SortType |
StText |
Para que coloquemos textos no listView |
ViewStyle |
VsReport |
Modo de Exibição Detalhes |
Name |
LV |
Trocamos o nome dele para LV |
Color |
$00FFF4EA |
Trocarmos a cor para um azul claro ... |
Nosso ListView ficará dessa forma:
Agora vamos inserir duas colunas no nosso ListView, uma será a coluna NOME onde terá o nome da entrada, do programa que está iniciando juntamente com o Windows a outra coluna terá o Valor, ou seja o diretório desse programa ou arquivo que está iniciando.
Para isso dê dois clicks sobre o ListView:
Clique sobre o botão ADD NEW.
Assim ele vai criar o item 0 - TListColumn nossa primeira coluna, selecione esse item e vá até o Object Inspector e troque as seguintes propriedades dele:
Propriedade |
Novo Valor |
Comentário |
Caption |
Nome |
|
MaxWidth |
130 |
O Tamanho máximo dele será 130 px |
Width |
130 |
E o Tamanho predefinido também será 130 px. |
Clique novamente no botão ADD NEW para Adicionarmos outra Coluna, e troque as propriedades dela da seguinte forma:
Propriedade |
Valor |
Caption
|
Valor
|
MaxWidth
|
248
|
Width
|
248 |
Atenção: Estes tamanho vão de acordo com sua necessidade, troque-os da forma que desejares. |
|
|
Nossa listView ficará desta forma:
|
Insira um GroupBox abaixo do GroupBox do ListView e vamos inserir nele os seguintes componentes:
Button, Edit, Caption >> Da forma que nos mostra a figura abaixo:
O Edit que se encontra do lado do Caption NOME terá o seguinte nome: TXTNAM
O Edit do caption VALOR terá o seguinte nome: TXTVALUE
|
|
Declarando Variáveis Globais e a Procedure LoadScreen
|
Bom pessoal vamos declarar duas variáveis globais:
var
Form1: TForm1;
//Responsável para dar entrada no registro ...
Reg: TRegistry;
{Declaramos essa Variável "KEY1" Global, pelo seguinte fato: Nela ficará armazenada
o seguinte valor: ""\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" ou seja é a chave responsável por armazenar os itens da inicialização. Abriremos a mesma para obter os valores da inicialização}
Key1: string;
implementation
|
Agora vamos declarar a procedure responsável para dar um LOAD nos itens da inicialização e jogar dentro do ListView.
Private
{ Private declarations }
procedure LoadScreen;
|
implementation
{$R *.dfm}
procedure TForm1.LoadScreen;
{Nós usaremos uma variável do Tipo TStringList
para podermos Enumerar todos os valores da chave}
var Values: TStringList;
{Precisaremos também de um índice para nosso StringList}
i: Integer;
begin
{Instanciando a nossa variável}
Values := TStringList.Create;
{Agora vamos ajustar a chave Raíz do registro}
Reg.RootKey := HKEY_LOCAL_MACHINE;
{Iremos abrir uma chave do registro, o método OpenKey faz
Isso para nós, ele vai abrir a CHAVE que estiver armazenada
dentro da Variável Global KEY1, o valor de KEY1 será definido no evento OnCreate do sistema, como "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", ou seja ele vai
abrir essa chave e obter todos os valores, esses valores são os items que se iniciam no sistema}
if Reg.OpenKey(Key1, False) then
begin
{ Achamos os valores, então vamos colocar tudo dentro
da variável Values que tem o tipo de dado StringList }
{Vamos dar um GET, vamos obter esses valores então ...}
Reg.GetValueNames(values);
{Pronto já demos um GET, pegamos os valores, agora vamos inserir
esses valores dentro do ListView}
LV.Clear;
for i := 0 to Values.Count - 1 do
begin
with LV.Items.Add do
begin
Caption := Values[i];
{Pega o valor correspondente Values[i]}
SubItems.Add(Reg.ReadString(Values[i]));
end;
end;
{Finally - fecha a chave}
Reg.CloseKey;
end;
Values.Free;
end;
|
Evento ONCREATE do FORM
procedure Tform1.FormCreate(Sender: TObject);
begin
Reg := TRegistry.Create;
{Definimos a chave para KEY1, essa que será usada pelo procedimento (LoadSreen) e
aberta para obtenção dos dados da inicialização do sistema}
Key1 := '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
{Vamos executar o procedimento acima criado, para darmos um Load,e jogar todos os dados para o ListView}
LoadScreen;
end;
|
Evento ONCLICK do botão Adicionar Valor:
procedure Tform1.btnAddClick(Sender: TObject);
begin
{Agora vamos escrever um valor dentro do registro, ou seja na inicialização
do sitema, se vc quer que um programa inicie, so colocar o nome do mesmo e seus diretório ...}
txtNam.Color := clWhite;
txtNam.Font.Color := clBlack;
txtValue.Color := clWhite;
txtValue.Font.Color := clBlack;
if Trim(txtNam.Text) = '' then
begin
{Se ñ tiver tiver valor nehum no campo Nome Da um Showmessage Alertando e troca
a cor de fundo do Edit Nome para vermelho ...}
MessageDlg('Sem nenhum valor para ser Adicionado', mtError, [mbOK], 0);
txtNam.Color := clRed;
txtNam.Font.Color := clYellow;
txtNam.SetFocus;
Exit;
end;
if Trim(txtValue.Text) = '' then
begin
{Mesma coisa aqui se ñ tiver nenhum valor ele dar um Showmessage e troca a cor de fundo do
edi para Vermelho ...}
MessageDlg('Sem nehum valor para o diretório do EXE ...', mtError, [mbOK], 0);
txtValue.Color := clRed;
txtValue.Font.Color := clYellow;
txtValue.SetFocus;
Exit;
end;
{Caso tudo preenchido, então vamos ADD os valores ao Registro ...}
if Reg.OpenKey(Key1, False) then
begin
//Escreve o valor no registro ...
Reg.WriteString(Trim(txtNam.Text), Trim(txtValue.Text));
//Fecha a chave aberta
Reg.CloseKey;
//DA uma load nos itens de inicialização, Atualiza os itens do listview ..
LoadScreen;
end;
end;
|
Evento OnClick do Deletar Item
procedure Tform1.BtnDelClick(Sender: TObject);
{Para deletarmos um valor do registro, primeiramente precisaremos
saber o nome do mesmo, então por isso iremos declarar esta variável
NAM nele será armazenado o valor do item que estiver selecionado no ListView,
Dessa forma excluiremos ele}
var Nam: string;
begin
{Vamos fazer uma condição para vermos se tem algum item selecionado
na listView ...}
if LV.SelCount < 1 then
begin
MessageDlg('Nenhum Item Selecionado para deletar.', mtError, [mbOK], 0);
Exit;
end;
{abriremos a Chave Raíz do registro HKEY_LOCAL_MACHINE }
Reg.RootKey := HKEY_LOCAL_MACHINE;
{Vamos abrir a chave correspondente aos items da inicialização do
sistema "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" que se encontra na Variável
Global KEY1 que foi defifinida na inicialização do Sistema.}
if Reg.OpenKey(Key1, False) then
begin
{A Variável NAM terá o valor do item selecionado no ListView, para podermos
Ecluir ela do registro, na inicialização ...}
Nam := LV.Selected.Caption;
{Deleta o item Selecionado}
Reg.DeleteValue(Nam);
{Fecha a Chave}
Reg.CloseKey;
{Daremos um LOAD nos items da Chave KEY, que são os items
da inicialização, porq excluímos uma chave agora, então
Nosso lisiview será atualizado conforme os valores do registro.}
LoadScreen;
end
end;
|
Evento Onclick do botão Fechar
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
|
Print da Aplicação e Código fonte
|
Download Código Fonte
Bom pessoal, com este simples artigo podemos fazer outras coisinhas legais, tipo verificar se um item da inicialização contém vírus, usando seu próprio Antivírus, o kara seleciona o Item da Inicialização, e pede pra verificar, damos um ShellExecute linkando para seu antivírus e fazendo com que ele verifique essa entrada ou seja o Valor dela que neste caso será o diretório do Arquivo.
Vou ficando por aqui em breve estarei postando mais Artigos.
Abração à todos que tiram um tempinho para lerem os Artigos.
Att,
Kennedy Tedesco P.
Kennedy@delphi.eti.br
Ktpigs@hotmail.com
|