Skomplikowane pobieranie rozmieru...

0

Siemka. Mam takie wielki problemik, którego sam ort!, więc dlatego piszę ten post na tym forum. Mam taki kodzik:

var Reg: TRegistry;
      S: TStringList;
      i: integer;
      Item: TListItem;
Reg.RootKey := HKEY_LOCAL_MACHINE;
   Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunServicesOnce', False);
   Reg.GetValueNames(S);
   for i := 0 to S.Count -1 do
   begin
      Item := ListView1.Items.Add;
      Item.Caption := S.Strings[i];
      Item.SubItems.Add(Reg.ReadString(S.Strings[i]));
      Item.SubItems.Add('KB');
      Item.SubItems.Add('Rejestr - Machine RunServicesOnce');
   end;
   REg.CloseKey;
   //KOLEJNY KLUCZ
   S.Clear;
   Reg.RootKey := HKEY_CURRENT_USER;
   Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunOnce', False);
   Reg.GetValueNames(S);
   for i := 0 to S.Count -1 do
   begin
      Item := ListView1.Items.Add;
      Item.Caption := S.Strings[i];
      Item.SubItems.Add(Reg.ReadString(S.Strings[i]));
      

Item.SubItems.Add('KB');

      Item.SubItems.Add('Rejestr - Current RunOnce');
   end;
   REg.CloseKey;
   Reg.Free;
   S.Free;

Pogrubiony tekst to ma być rozmier pliku w KiloBajtach, którego ścieżka dostępu jest w 2 SubItemie, czyli wartości klucza. I właśnie o to mi chodzi, chciałbym, żeby w tym Subitemie: Item.SubItems.Add('KB'); wyświetlał się rozmier tych plików, czy to ort! możliwe, a jak tak to może ktoś by mi pomógł, bardzo proszeeee, sam nigdy tego ort! :(

0

Tak, możliwe :-)

var Reg: TRegistry;
      S: TStringList;
      i: integer;
      Item: TListItem;
      file:file of byte; 
Reg.RootKey := HKEY_LOCAL_MACHINE;
   Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunServicesOnce', False);
   Reg.GetValueNames(S);
   for i := 0 to S.Count -1 do
   begin
      Item := ListView1.Items.Add;
      Item.Caption := S.Strings[i];
      Item.SubItems.Add(Reg.ReadString(S.Strings[i]));
      Item.SubItems.Add('KB');
      Item.SubItems.Add('Rejestr - Machine RunServicesOnce');
   end;
   REg.CloseKey;
   //KOLEJNY KLUCZ
   S.Clear;
   Reg.RootKey := HKEY_CURRENT_USER;
   Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunOnce', False);
   Reg.GetValueNames(S);
   for i := 0 to S.Count -1 do
   begin
      Item := ListView1.Items.Add;
      Item.Caption := S.Strings[i];
      Item.SubItems.Add(Reg.ReadString(S.Strings[i]));

      Assignfile(file,Reg.ReadString(S.Strings[i]));
      Reset(file);  
      Item.SubItems.Add(Format('%10.1f',[FileSize(file)/1024]) + ' kb');
      Closefile(file);

      Item.SubItems.Add('Rejestr - Current RunOnce');
   end;
   REg.CloseKey;
   Reg.Free;
   S.Free;

Wystarczy poczytać archiwum

0

Lipa, coś wyświetla błąd w file:file of byte; w var'ze :( Trzeba to jakoś poprawić, tylko <ort>niewiem</ort> jak :(

0

No prawda, mój błąd [wstyd]
Nie można użyć indentyfikatora File, gdyż jest on zarezerwowany;
Zamiast tego możesz podać F , zmień wszędzie gdzie podałem File na F
Powinno działać :-)

0

I nadal lol ;( Teraz zatrzymuje się na Reset(f);, ale juz po kompilacji i wyswietla błąd: Invalid filename :( Zobacz, może to dlatego, że ja ort! całego mojego kodu - dostępny on jest na: http://strony.it-net.pl/~ftpzone/2.txt

0

A jesteś pewny, że plik, który chcesz otworzyć, istnieje?

0

Plik ?! Jak pobiera jego ścieżkę z wartości wpisu rejestru, to chyba raczej istnieje :) po prostu jest wpis w rejestrze o nazwie np.: mks_menu, o wartości C:\mks_menu.exe w kluczu HKEY_CURRENT_MACHINE/Software/Microsoft/Windows/Run. Chyba wiecie o co mi chodzi :D

0

No tak, nie doczytałem całego kodu. A może program natrafia na takie coś, jak np. 'C:...\Gadu-Gadu\GG.exe /tray' i na tym '/tray' się wywala?

0

Raczej to nie oto chodzi, ponieważ od razu podczas uruchamiania aplikacji pojawia się jakis błąd I/O :( Coś tu musi być nietak w kodzie ;/

0

To radzę sobie dać ShowMessage() i sprawdzić przed otwarciem pliku, jaki to plik program otwiera.

0

Ja jeszce lama jestem i niewiem jak stosować tą funkcję, bawilem się z nią, ale mi nic niewychodzi, czy ktoś by mógł mi na przykładzie pokazać ? :(

0

Ech.... Na podstawie kodu Cool_Programing:

var Reg: TRegistry;
         S: TStringList;
         i: integer;
         Item: TListItem;
         file:file of byte; 
Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunServicesOnce', False);
    Reg.GetValueNames(S);
    for i := 0 to S.Count -1 do
    begin
         Item := ListView1.Items.Add;
         Item.Caption := S.Strings[i];
         Item.SubItems.Add(Reg.ReadString(S.Strings[i]));
         Item.SubItems.Add('KB');
         Item.SubItems.Add('Rejestr - Machine RunServicesOnce');
    end;
    REg.CloseKey;
    //KOLEJNY KLUCZ
    S.Clear;
    Reg.RootKey := HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunOnce', False);
    Reg.GetValueNames(S);
    for i := 0 to S.Count -1 do
    begin
         Item := ListView1.Items.Add;
         Item.Caption := S.Strings[i];
         Item.SubItems.Add(Reg.ReadString(S.Strings[i]));

         ShowMessage(Reg.ReadString(S.Strings[i]));

         Assignfile(file,Reg.ReadString(S.Strings[i]));
         Reset(file);   
         Item.SubItems.Add(Format('%10.1f',[FileSize(file)/1024]) + ' kb');
         Closefile(file);

         Item.SubItems.Add('Rejestr - Current RunOnce');
    end;
    REg.CloseKey;
    Reg.Free;
    S.Free;
0

Lipa, wyświetla się po kompilacji w Okienku kompunkatu pierwszy wpis z listy, a Od razu potem znowu ten błąd, ja już niemogę :(((( Może ktoś by u sibie w Delphi strorzyl ListView1 svRaport i 3 kolumny, w oncreate ten kod dał i zobaczyć czemu niedziała - proszeee :(

0

Nie jestem do konca pewny czy rozumiem twoje pytanie, ale mam nadzieje, ze tak. ponizszy kod powinien rozwazac twoj problem:
Program x;
Begin

End.

0

A pokaż treść tego komunikatu, jaki się wyświetla...

// Mi chodzi o konkrety... Pokaż, co to jest za ścieżka. I najlepiej od razu sprawdź, czy masz taki plik na dysku. Mógł on zostać kiedyś usunięty, a wpis mógł pozostać

0

Wyświetla się 2 subitem w Message z wartością wpisu :(

0

to może najlepiej sprawdzaj wcześniej czy plik istnieje

FileExist(filename: string);

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