• 04-12-2012, 19:34:45
    #1
    var
     MyHandle: THandle;
     Struct: TProcessEntry32;
     pathstr: string;
     SL: TStringList;
     begin
     ListBox3.ItemIndex :=0;
     ListBox1.Clear;
        try
          MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPProcess, 0);
          Struct.dwSize:=Sizeof(TProcessEntry32);
          if Process32First(MyHandle, Struct) then
             begin
               pathstr := GetMFEx(Struct.Th32ProcessID);
             //  ListBox1.Items.Add(pathstr);
              if ((copy(pathstr,1,1)='C') or (copy(pathstr,1,1)='D') or (copy(pathstr,1,1)='E') ) then ListBox1.Items.Add(pathstr);
            end;
           while Process32Next(MyHandle, Struct) do
              begin
                pathstr := GetMFEx(Struct.Th32ProcessID);
              // ListBox1.Items.Add(pathstr);
    
      pathstr:=trim(pathstr);
      if ((copy(pathstr,1,1)='C') or (copy(pathstr,1,1)='D') or (copy(pathstr,1,1)='E') ) then ListBox1.Items.Add(pathstr);
              end;
        except
          ShowMessage('Error showing process list');
        end;
    while Process32Next(MyHandle, Struct) do kısmında overflow hatası alıyorum. Biraz araştırdım, sonsuz döngüye girdiği için diyor herkes. Belirli işlemler sonucu düzenli olarak bu prosedürü çalıştırıyorum. 20-25 dakika sonra program hata veriyor.
  • 04-12-2012, 22:01:55
    #2
    overflow hatası bellek yetersiz oldugunda veyahut tanımlı olan tip değeri aşıldığında beliren hatalardan biridir. Muhtemel sonsuz döngüye iştigal ediyordur. Kodu ilkkez mi yazdınız yoksa daha once kullanıyordunuz da bu seferlik mi öyle oldu?
  • 04-12-2012, 22:26:00
    #3
    DarKPeArL adlı üyeden alıntı: mesajı görüntüle
    overflow hatası bellek yetersiz oldugunda veyahut tanımlı olan tip değeri aşıldığında beliren hatalardan biridir. Muhtemel sonsuz döngüye iştigal ediyordur. Kodu ilkkez mi yazdınız yoksa daha once kullanıyordunuz da bu seferlik mi öyle oldu?
    İlk kez yazdım. Bu hatayıda ilk kez alıyorum. Bir önlem bulamadım. Prosedürü farklı farklı anlık creat etmeyi deneyeceğim şimdi.
  • 06-12-2012, 20:26:36
    #4
    Maalesef çözüm bulabilmiş değilim.
  • 11-12-2012, 00:22:35
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    function GetMFEx(inmod: THandle): string;
    var
      hProcess: THandle;
      ModuleName: array [0..MAX_PATH] of Char;
      GetModuleFileNameEx:   function (inProcess: THandle; inModule: THandle; Filename: PChar; size: DWord): DWord; stdcall;
    begin
       @GetModuleFileNameEx:=GetProcAddress(LoadLibrary('psapi.dll'),'GetModuleFileNameExA');
       hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False, inmod);
       if (hProcess <> 0) then
       begin
              GetModuleFilenameEx(hProcess, 0, ModuleName, SizeOf(ModuleName));
              CloseHandle(hProcess);
              Result := ModuleName;
       end;
    end;
    
    
    Procedure AddToList(var Data : String);
    Begin
      if windows.lstrlenA(PAnsiChar(Data))>0 then
      Begin
       if ((data[1]='C') or (data[1]='D') or (data[1]='E') ) then form1.lst1.Items.Add(data);
      End;
      data:='';
    end;
    procedure TForm1.btn1Click(Sender: TObject);
    var
     MyHandle: THandle;
     Struct: TProcessEntry32;
     pathstr: string;
     SL: TStringList;
    begin
       lst1.Items.Clear;
        try
          MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPProcess, 0);
          ZeroMemory(@Struct,SizeOf(TProcessEntry32));
          Struct.dwSize:=Sizeof(TProcessEntry32);
          if Process32First(MyHandle, Struct) then
          begin
               pathstr := GetMFEx(Struct.Th32ProcessID);
               AddToList(pathstr);
          end;
          while Process32Next(MyHandle, Struct) do
          begin
               pathstr := GetMFEx(Struct.Th32ProcessID);
               AddToList(pathstr);
          end;
        except on e : exception do
          Windows.OutputDebugStringA(PAnsiChar(e.Message));
        end;
    end;
    
    procedure TForm1.tmr1Timer(Sender: TObject);
    begin
    btn1Click(sender);
    end;


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 00:22:35 -->-> Daha önceki mesaj 00:19:13 --

    merhaba,
    timer in intervalini 10 yaptim ve test ettim. yukaridaki ekledigim kod overflow vs vermeyecektir.
    iyi calismalar...
  • 11-12-2012, 00:26:13
    #6
    R10SS adlı üyeden alıntı: mesajı görüntüle
    function GetMFEx(inmod: THandle): string;
    var
      hProcess: THandle;
      ModuleName: array [0..MAX_PATH] of Char;
      GetModuleFileNameEx:   function (inProcess: THandle; inModule: THandle; Filename: PChar; size: DWord): DWord; stdcall;
    begin
       @GetModuleFileNameEx:=GetProcAddress(LoadLibrary('psapi.dll'),'GetModuleFileNameExA');
       hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False, inmod);
       if (hProcess <> 0) then
       begin
              GetModuleFilenameEx(hProcess, 0, ModuleName, SizeOf(ModuleName));
              CloseHandle(hProcess);
              Result := ModuleName;
       end;
    end;
    
    
    Procedure AddToList(var Data : String);
    Begin
      if windows.lstrlenA(PAnsiChar(Data))>0 then
      Begin
       if ((data[1]='C') or (data[1]='D') or (data[1]='E') ) then form1.lst1.Items.Add(data);
      End;
      data:='';
    end;
    procedure TForm1.btn1Click(Sender: TObject);
    var
     MyHandle: THandle;
     Struct: TProcessEntry32;
     pathstr: string;
     SL: TStringList;
    begin
       lst1.Items.Clear;
        try
          MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPProcess, 0);
          ZeroMemory(@Struct,SizeOf(TProcessEntry32));
          Struct.dwSize:=Sizeof(TProcessEntry32);
          if Process32First(MyHandle, Struct) then
          begin
               pathstr := GetMFEx(Struct.Th32ProcessID);
               AddToList(pathstr);
          end;
          while Process32Next(MyHandle, Struct) do
          begin
               pathstr := GetMFEx(Struct.Th32ProcessID);
               AddToList(pathstr);
          end;
        except on e : exception do
          Windows.OutputDebugStringA(PAnsiChar(e.Message));
        end;
    end;
    
    procedure TForm1.tmr1Timer(Sender: TObject);
    begin
    btn1Click(sender);
    end;


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 00:22:35 -->-> Daha önceki mesaj 00:19:13 --

    merhaba,
    timer in intervalini 10 yaptim ve test ettim. yukaridaki ekledigim kod overflow vs vermeyecektir.
    iyi calismalar...
    Çook teşekkür ederim sorun falan kalmadı çok stabil çalışıyor.