[Delphi]Odczyt i zapis do rejestru.

0

Witam!
Mam dwa pola RadioButton. Che zrobic tak, ze przy zaznaczeniu na jedno z nich nastapi odczytanie wartosci z rejestru, typ Reg-sz (a dokladniej adresu w ktorym jest zainstalowany program np. HKCU\Software\mojaaplikacja). Nastepnie utworzy w kluczu HKLM\Software\Microsoft\Windows\CurentVersion\Run wartosc Reg_sz z adresem do katalogu z zainstalowana aplikacja + nazwa_pliku.exe. Jak cos takie zrobic? Moze ktos podac gotowe rozwiazanie? Dlugo sie z tym mecze... Jestem poczatkujacy.</delphi>

0
uses Registry

...

var
Reg:TRegistry;
path:string;
const
app_name = "cos";

begin
Reg:=TRegistry.Create;
IF RadioButton1.Checked = True then
path:=Reg.ReadString('Software\'+app_name,False)
else Exit;

Reg.CloseKey;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',False);
Reg.WriteString(app_name,ParamStr(0));
Reg.CloseKey;
Reg.Free;
end;
0

Przepraszam, popełniłem błąd w kodzie (za bardzo przyzwyczaiłem się do edycji :) ), a zalogowac się nie mam możliwości.

...

Reg:=TRegistry.Create;
Reg.OpenKey('Software\'+app_name);
if RadioButton1.Checked = True then
path:=Reg.ReadString('Path');
else Exit;

...

Reszta jest raczej dobrze
</delphi>

0

Rozumiem, ze app_name to moj exe, ktory pojdzie do autostartu?
Robie tak:

procedure TForm1.Button1Click(Sender: TObject);
var
Reg:TRegistry;
path:string;
const
app_name = "cos";

begin
Reg:=TRegistry.Create;
Reg.OpenKey('Software'+app_name);
if RadioButton1.Checked = True then
path:=Reg.ReadString('Path');
else Exit;

Reg.CloseKey;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun',False);
Reg.WriteString(app_name,ParamStr(0));
Reg.CloseKey;
Reg.Free;
end;
end.

w miejsce cos wpisac nazwe pliku exe?
Reg.OpenKey('Software'+app_name); <- tutaj wpisac klucz do aplikacji ? SoftwareNazwaaplikacji? (w nim jest wartosc domyslna z path gdzie jest zainstalowany program.)
Szczerze mowiac to nie wiele z tego zrozumialem... Albo cos jest nie tak albo nie widze swojej osoby jako programisty ;p
Przy probie kompilacji delphi ma pretensje do tego:

app_name = "cos";

i wypisuje mi:
[Error] Unit1.pas(33): Illegal character in input file: '"' ($22)
[Error] Unit1.pas(33): Illegal character in input file: '"' ($22)
[Error] Unit1.pas(37): Not enough actual parameters
[Error] Unit1.pas(40): ';' not allowed before 'ELSE'
[Error] Unit1.pas(13): Unsatisfied forward or external declaration: 'TForm1.RadioButton1Click'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
ponizej to co jest w poszczegolnych liniach:
33 app_name = "cos";
37 Reg.OpenKey('Software'+app_name);
40 else Exit;
13 procedure RadioButton1Click(Sender: TObject);

Dzieki za odpowiedz.</delphi>

0
procedure TForm1.Button1Click(Sender: TObject);
var
Reg:TRegistry;
path:string;
const
app_name:string = 'cos';  //stringi sie podaje w pojedynczych cudzyslowach
exe_name:string='cos'
begin
if not RadioButton1.Checked = True then exit;
Reg:=TRegistry.Create; //tworzy dostep do rejestru
Reg.RootKey := HKEY_LOCAL_MACHINE; //wybiera galaz nadrzedna
Reg.OpenKey('Software\'+app_name, false); //otwiera klucz app_name - jesli nie istnieje to nie tworzy nowego, dajesz true i juz tworzy :)
path:=Reg.ReadString('')  //do zmiennej path przypisuje wartosc path z rejestru
Reg.CloseKey; //zamyka klucz rejestru
Reg.RootKey := HKEY_LOCAL_MACHINE; //ustawia nowa galaz
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',True); //otwiera nowy klucz w trybie do zapisu
Reg.WriteString(app_name,path+exe_name);//zapisuje pod nazwa app_name sciezke do samego siebie
Reg.CloseKey;//zamyka klucz
Reg.Free; //zwalnia pamiec
end;//konczy procedure
end. //konczy kod programu

i wypisuje mi:
[Error] Unit1.pas(33): Illegal character in input file: '"' ($22)

stringi sie pisze w ' '

[Error] Unit1.pas(33): Illegal character in input file: '"' ($22)

j/w

[Error] Unit1.pas(37): Not enough actual parameters

za malo parametrow - mususz mu jeszcze dac czy moze zapisywac

[Error] Unit1.pas(40): ';' not allowed before 'ELSE'
przed else nie moze byc srednika

[Error] Unit1.pas(13): Unsatisfied forward or external declaration: 'TForm1.RadioButton1Click'

zobacz TForm1.Radiobutton1click(Sender:TObject) albo czy masz radiobutton na formie

[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

wiadomo czemu sie nie skompiluje, bo sa bledy

0

Okej teraz si kompiluje, ale po zaznaczeniu radiobutton i kliknieciu na przycisk wyskakuje komunikat Faild to set data for 'test.exe'.
app_name = 'test.exe';
Przepraszam za zawracanie d**y ale juz mi rece opadaja ;(

0

nie wiem czy zamiast " app_name=''cos' " nie powinno byc " app_name:string='cos' "

ten kod wyzej - poprawilem i dziala.
Tylko nie widze sensu jednej rzeczy - po co odczytujesz z rejestru zmienna path, jak i tak jej nigdzi nie wykorzystujesz??

<font color="orange" size="6">ZROBIONE - EOT;</span>

0

I tak wyskakuje ten sam blad... Moglbys mi po kolei napisac co znacze poszczegolne instrukcje?

0

nie wiem czy zamiast " app_name=''cos' " nie powinno byc " app_name:string='cos' "

kompilator sam dobierze odpowiedni typ, nie musisz go definiować.

Tylko nie widze sensu jednej rzeczy - po co odczytujesz z rejestru zmienna path, jak i tak jej nigdzi nie wykorzystujesz??

Przecież napisał, że ma odczytać adres gdzie jest zainstalowany program. Nie wiem po co, no ale napisał :)

Znacznik [delphi] znów obcina , dlatego teraz go nie zastosuje :-8

var
Reg:TRegistry;
path:string;
//Będzie zawierał niepotrzebną ścieżkę

const
app_name = 'cos';
// Nazwa programu NIE ścieżka

begin
Reg:=TRegistry.Create;
Reg.OpenKey('\Software'+app_name,True);
// Otwiera klucz HKEY_CURRENT_USER\Software\cos

if RadioButton1.Checked = True then
// Jeżeli radio button jest zaznaczony
path:=Reg.ReadString('Path')
// To odczytaj do path ścieżkę programu (tylko po co???)
else Exit;

// w przeciwnym razie zakończ działanie procedury
Reg.CloseKey;
//Zamknij otwarty klucz

Reg.RootKey := HKEY_LOCAL_MACHINE;
//Ustaw "główny klucz" na ten co wyzej
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',False);
//Otwórz klucz zawierające progi autostartu
Reg.WriteString(app_name,ParamStr(0));
//Zapisz ścieżkę do programu jako nazwę programu

Reg.CloseKey;
//Zamknij Klucz
Reg.Free;
//Zwolnij

1 użytkowników online, w tym zalogowanych: 0, gości: 1