Skaner Rejestru

0
        Bardzo nie lubię takich programów, które zaśmiecają rejestr i nawet po ich usunięciu zostawiają w nim swoje klucze.
      Wyjściem jest FORMAT C:, ale komu się chce instalować wszystko od nowa?
      Wpadłem na pomysł napisania aplikacji która usuwa takie "śmieci".
      Schemat jej działania (bez szczegółów):
      
        1. Robi kopię rejestru.
        2. Instaluje jakiś program.
        3. Robi drugą kopię rejestru.
        4. Porównuje obydwie kopie i wyświetla klucze nie znalezione we
           wcześniejszej kopii.
        
        Odnośnie tego projektu mam parę pytań :
         
         1. Czy można w miarę szybko zrobić kopię rejestru.
         2. Czy jest szybszy sposób porównania 2 dość dużych plików (kopia
         rejestru - u mnie 9,30 MB) niż wymyślony przeze mnie :

procedure TForm1.StartBtnClick(Sender: TObject);
var
Plik1,Plik2 : TextFile; * Pliki - pierwsza i druga kopia rejestru.
S1, S2 : String; * Zmienne z tekstem do porównania.
Find : Boolean; * Zmienna "Czy znaleziono szukaną wartość (s1 = s2);
begin
Postep.Progress := 0; *nie ważne
lb1.Clear; * wyczyść ListBox
Stop := False; *Zmienna globalna "czy ktoś nacisnął przycisk Stop" na False
Find := False; *Chyba nie trzeba tłumaczyć
AssignFile(Plik1,Edit1.Text); * Skojarz zmienną plikową z plikiem (Tekstem w Edit1).
AssignFile(Plik2,Edit2.Text); * ------------------------------||------------------------------
Reset(Plik2); * Otwórz nowszą kopię
try
while not Eof(Plik2) and (Stop = False) do * dopuki nie koniec pliku i Stop = False;
begin
Application.ProcessMessages; *Daj odpocząć win... cośtam
Readln(Plik2,S2); *Odczytaj linijkę z nowszej kopii
Reset(Plik1); *Otwórz plik 1 (starsza kopia)
while not (eof(Plik1)) and (Find = False) and (Stop = False) do *to samo co 5
* linijek temu tyle że inny plik i
*jeśli jeszcze nie znaleziono (S2 &lt&gt S1 to Find = False)
begin
ReadLn(Plik1,S1); *Odczytaj linijkę z starszej kopii
if (S2 = S1) then * Jeśli linijka nowa jest w starej kopii to
Find := True else * Znaleziono - przerwij pętlę
Find := False; * jeśli nie znaleziono szukaj dalej
Postep.Progress := Postep.Progress + 1; * nie ważne
if (Postep.Progress = Postep.MaxValue) then * nie ważne
Postep.Progress := 0; *Nie ważne
end;
CloseFile(Plik1); *zamknij plik1 - starszy
if (Find = False) and (Stop = False) then * jeśli pętla(wewnętrzna) się
* skończyła i nie znaleziono
lb1.Items.Add(s2); *to dodaj linijkę (S2) do ListBox
end;
if Eof(Plik2) then * jeśli koniec nowego pliku
ShowMessage('Skanowanie zakończone'); *to wyświetl napis "Skan..."
finally
CloseFile(plik2); //zamknij Plik 2
end;

          To działa dobrze ale czy nie dało by się szybciej?
          Bo przy pliku 9 Mb...
          Można by było pomijać linijki z Pliku 1, które mają odpowiednik w pliku 2, bo ta pętla każdą linijkę 2 pliku porównuje z KAŻDĄ 1 pliku, a wiadomo że jeśli S1 było równe S2 w poprzednim przebiegu pętli to teraz to samo S1 &lt&gt od nowego S2

          I Jeszcze jedno : Jak pobrać ilość linijek w TextFile.

                                                            Piotrek, znaczy Gal Anonim.

          
0

Ja do tego celu co opisałeś używam RegCleaner :)--Delphi 6
Pozdrowienia{hello} ,
Moderator Imperior

0

Tak, ale ja chcę to napisać, a nie używać jakiejś gotowej aplikacji.
Może to głupie. Taka ambicja.

                                                                                Gal Anonim
0

Ambicaj nie jest głupia

szybkie kopiowanie rejestru zależy od Windows np. w 98 pliki kopjują się wolniej niż w Me :)

Ale no dobra -po porstu skopjuj (takie trudne?)

Co do szukania i powiązywania to:

Hmm rejestr jest większy niż nie wiem ludzi na świecie :P

heh zobacz jak szybko normalny edytor rejestru szuka dany klucz o podanej nazwie.......

Mi się zdaje że ten sposób co napisałeś (z tym porównywaniem - jest troszkę zły -nikomu niechce się czekać 1 godz :PPP)

Dobra aby skrócić czas trwania szukania

musisz podać w jakim najbliższym kluczu znajduje się dana wartość

jezeli chodzi o te instali i deinstalki to: a nie wiem

inny przykład musisz cos znaleźć w rejestrze Delphiego

ale zamiast szuakania wszystkich kluczy w
HKEY_CURRENT_USER\

powinieneś użyć: HKEY_CURRENT_USER\SOFTWARE\Borland\Delphi\ - ijuż szuka się gdzieś 80% szybciej :)

na takiej zasadzie działa wyszukiwanie w rejestrze windowsa (no regedit)

0

Nie do końca o to mi chodzi.
Pytanie powinno brzmieć Jak wyeksportować rejestr - tak jak w regedit -Rejestr|Eksportuj

0

regedit.exe /s /e out.reg HKEY_LOCAL_MACHINE\Software\--Delphi 6
Pozdrowienia{hello} ,
Moderator Imperior

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