AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ProgressBar (Update GUI)

Ein Thema von sILeNt heLLsCrEAm · begonnen am 29. Nov 2021 · letzter Beitrag vom 1. Dez 2021
 
sILeNt heLLsCrEAm

Registriert seit: 19. Dez 2012
15 Beiträge
 
Delphi 12 Athens
 
#1

ProgressBar (Update GUI)

  Alt 29. Nov 2021, 15:29
Hallo Liebe Community,

ich Versuche hier mal mein Problem zu schildern...
Folgendes, ich programmiere recht erfolgreich die unterschiedlichsten Trainer für verschiedene Games.
Nun kann es manchmal passieren das ein User den entsprechenden Trainer passend zur Spielversion nutzt, aber dennoch nicht funktioniert. So, nun habe ich mir einen Address Searcher gebastelt welchen dann ein User nutzen kann bzw. ich die entsprechenden Offsets im Spieleprozess auf dem Rechner des Users suche. Das funktioniert auch soweit, das ist nicht das Problem.
Nun bin ich dabei diesen Searcher zu optimieren und wollte nun eine ProgressBar einbauen.

Der Code sieht nun folgendermaßen aus...
Code:
procedure StatusShown();
begin
  // Label Caption - Anzeige was gemacht wird...
  Form1.ProgressBar1.StepBy(5);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  // Search Button deaktivieren
  Button1.Enabled:= False;

  // ProgressBar zurücksetzen bzw. auf Anfang
  ProgressBar1.Position:= 0;
  ProgressBar1.Min:= 0;
  ProgressBar1.Max:= 300;

        // MD5 Hash ermitteln
        MD5Hash:= MD5(GetModulePath(ProcessFile, ProcID));
        StatusShown();

        //Dateipfad ermitteln
        Dateipfad:= GetModulePath(ProcessFile, ProcID);

         // Dateiversion ermitteln
        Versionsergebnis:= GetFileVersion(Dateipfad);
        StatusShown();

        // Produktversion ermitteln
        Produktversion:= GetFileInfo(Dateipfad, 'ProductVersion');
        StatusShown();

        // Basisadresse ermitteln
        GetBaseAddy(DLLName, BaseAddy);

        // Hier werden die einzelnen Addy's gesucht...
        // Beispiel...
        // AmmoAddy:= Search(AmmoSearch);
         SectionAuslesen(BaseAddy);
        StatusShown;
        HealthAddy:= SearchMore(BaseAddy, HealthSearch);
        StatusShown;
         OneHitKillAddy:= SearchMore(BaseAddy, OneHitKillSearch);
        StatusShown;
         Stamina1Addy:= SearchMore(BaseAddy, Stamina1Search);
        StatusShown;
         Stamina2Addy:= SearchMore(BaseAddy, Stamina2Search);
        StatusShown;
         AmmoAddy:= SearchMore(BaseAddy, AmmoSearch);
        StatusShown;
         NoReloadAddy:= SearchMore(BaseAddy, NoReloadSearch);
        StatusShown;
         ThrowablesAddy:= SearchMore(BaseAddy, ThrowablesSearch);
        StatusShown;
         FreeSection;

        // Die Anzahl der auszulesenden Bytes kann/sollte noch angepasst werden...
        HealthValue:= ReadMemory(50, HealthAddy);
        StatusShown;
         OneHitKillValue:= ReadMemory(50, OneHitKillAddy);
        StatusShown;
         Stamina1Value:= ReadMemory(50, Stamina1Addy);
        StatusShown;
         Stamina2Value:= ReadMemory(50, Stamina2Addy);
        StatusShown;
         AmmoValue:= ReadMemory(50, AmmoAddy);
        StatusShown;
         NoReloadValue:= ReadMemory(50, NoReloadAddy);
        StatusShown;
         ThrowablesValue:= ReadMemory(50, ThrowablesAddy);
        StatusShown;
    end;

    // Search Button aktivieren
    Button1.Enabled:= True;

    if ProcID = -1 then begin
      Label1.Caption:= 'DyingLightGame.exe not found in memory...' + #13#10 +
                       'Please make sure that the game is running...';
    end;
end;

Nun ist es ja so daß die ProgressBar innerhalb dieses Button.Click Ereignisses zwar aktualisiert wird, allerdings ist dieses nicht sichtbar. Erst wenn die Button Prozedur komplett abgearbeitet wurde ist auch die ProgressBar bei 100%. Als workaround hab ich die "ProgressBar1.Stepby(5)" innerhalb einer eigenen Prozedur verfasst. Das funktioniert auch soweit ganz gut, wenn da nicht die Antiviren-/Firewalllösung dazwischen funken würde. Ich nutze z.B. Kaspersky, wenn der Searcher ausgeführt wird meldet sich Kaspersky und ich muss z.B. das Ausführen des Programms erlauben. Ist ja auch okay, aber die ProgressBar wird wiederrum erst nach dem kompletten abarbeiten geändert. Starte ich diesen Searcher das zweite Mal (mittlerweile ist der Searcher Kaspersky bekannt) dann funktioniert auch das updaten der ProgressBar.
Nun wäre meine Frage ob es nicht eine bessere Lösung hierfür gibt. Mit Threads habe ich hier noch nicht gearbeitet, das wäre noch meine nächste Idee...

Vielen Dank für's aufmerksame lesen und vielen Dank für eure Lösungsvorschläge...

MfG sILeNt
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz