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, botów: 0