AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ReadProcessmemory-Schleife funktioniert nicht

ReadProcessmemory-Schleife funktioniert nicht

Ein Thema von Karlson · begonnen am 6. Feb 2005 · letzter Beitrag vom 8. Feb 2005
 
Karlson

Registriert seit: 12. Apr 2004
92 Beiträge
 
#1

ReadProcessmemory-Schleife funktioniert nicht

  Alt 6. Feb 2005, 19:33
Hallo.

Ich habe hier eine Readprocessmemoryfunction, und eine dazu gehörige Schleife.

Ich hab die Schleife jetzt mal relativ weit vereinfacht, eigentlich wird des Readprocessmemory in einen Farbwert umgerechnet.
Hab jetzt hier einfach mal soweit umgeschrieben, dass die Schleife überprüft ob der Speicher einen bestimmten Wert hat. Hier der Code:

Delphi-Quellcode:
{Zunächst mal die Read-Function, diese funktioniert zu 100%, ich poste sie trotzdem mal:}

function ReadMemory(Adresse:String; Fenstername : string):string;
var fensterhandle, processhandle : THandle;
    ProcessID : Cardinal;
    wert : integer;
    b : cardinal;
    i : integer;
begin
 fensterhandle := FindWindow(nil, PChar(FensterName));
 if fensterhandle = 0 then
  begin
   showmessage('Fenster kann nicht gefunden werden');
   exit;
  end;
 GetWindowThreadProcessId(Fensterhandle, @ProcessId);
 processhandle := OpenProcess(PROCESS_ALL_ACCESS, false, ProcessId);
 readprocessmemory(processhandle, ptr(strtoint(adresse)), @wert, sizeof(wert), b);
 if b = sizeof(wert) then
  begin
   result := inttostr(puffer);
  end;
end;

{Hier meine Prozedure:}

procedure TForm1.DOLIST(Grenze1, Grenze2, Fenstertitel, Wert : String);
var i : integer;
    gA, gB : Integer;
    ZW : Integer;
    TeilerCount : Integer;
begin
 gA := strToInt(Grenze1);
 gB := strToInt(Grenze2);
 ZW := gB - gA;
 TeilerCount := round(ZW div 100);
 for i := gA to gB do
  begin
   if ReadMemory('$' +inttoHex(i,2), FensterTitel)=Wert then
    begin
     listbox1.Items.add(ColorToString(clblue);
    end;
   if (i mod 500) = 0 then
    begin
     Application.ProcessMessages;
     gauge1.Position := round(i div TeilerCount);
    end;
   end;
end;
Grenze1 beschreibt die Adresse, ab der angefangen werden soll zu suchen.
Grenze2 bis wohin gelesen werden soll.
Wobei ich für Grenze 1 immer $4000 und $7FFFFFFF einsetze. Soweit ich weiss, müsste das ungefähr den Speicherbereich eines Prozesses abdecken.
ZW ist einfach die Grösse des Zwischenraums, daraus berechne ich Teilercount, welches dann für die Gauge(Progressbar) als Modifikator dient. Aber auch das funktioniert nicht. Ich glaube ich mache da beim rechnen mit den Hexzahlen was falsch

Und zwar: Es werden einfach keine Werte gefunden. Wenn ich für Wert also 0 einsetze und als Grenzen $40000 bis $FFFFF angebe, so findet er garnichts...was ja nicht sein kann.

Hier ist übrigens der Link zum Crosspost im Delphi-Forum. Dort antwortet leider niemand.
http://www.delphi-forum.de/topic_Rea...cht_36184.html
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:55 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-2025 by Thomas Breitkreuz