Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit Listbox und Typen (https://www.delphipraxis.net/115598-problem-mit-listbox-und-typen.html)

wadimwadim 14. Jun 2008 17:16


Problem mit Listbox und Typen
 
Hallo, leider komme ich nicht mehr alleine weiter.
Ich habe ein Programm erstellt, dass Speicheradressen aus einem bestimmten Bereich ausliest und in einer Listbox ausgibt.
Mir wird so etwas als String ausgegeben: z.B. (00A00000) also Hextyp.
Nun möchte ich mit einem ButtonClick, diese gefundenen Adressen weiter verwenden, um mit ihnen mit Readprocessmemory die Werte auszulesen.
Aber dieser Type bei Readprocessmemory ist ja : ptr($00A00000). Meine Frage ist nun, wie bekomm ich diese Strings in Hexs mit Dollorzeichen vorne drann?

Klaus01 14. Jun 2008 17:24

Re: Problem mit Listbox und Typen
 
Hallo,

geht
Delphi-Quellcode:
ptr(StrToInt('$'+HexString))
nicht?

Grüße
Klaus

wadimwadim 14. Jun 2008 17:48

Re: Problem mit Listbox und Typen
 
Danke dir, so hatte ich es noch nicht probiert, hatte davor ein memo.
Eine andere Frage... Wie bekomm ich die einzelnen Textzeilen aus der Listbox? ich möchte sie auf arrays speichern.

Klaus01 14. Jun 2008 17:56

Re: Problem mit Listbox und Typen
 
Hallo,

mit ListBox1.Items[i] kannst Du auf die Zeile i der Listbox zugreifen.
ListBox1.Items.count liefert Dir die Anzahl der Zeilen (o basierend).
ListBox1.ItemIndex liefer Dir den Index der selektierten Zeile.

Grüße
Klaus

p.s.
Hier gilt pro Frage ein neuer Thread, bitte denke demnächst daran.

wadimwadim 14. Jun 2008 17:59

Re: Problem mit Listbox und Typen
 
Hey, ich danke dir sehr für deine schnelle Antwort, hat mir viel geholfen.

wadimwadim 14. Jun 2008 18:28

Re: Problem mit Listbox und Typen
 
ptr(StrToInt('$'+HexString))
geht bei mir leider nicht..
Inkompatible Typen... was kann ich machen?

wadimwadim 14. Jun 2008 18:33

Re: Problem mit Listbox und Typen
 
sory, habe mich geirrt, bei mir in der Listbox sind keine Strings, sondern Hex:
Listbox1.Items.Add (IntToHex(StartMemHex,8));

Klaus01 14. Jun 2008 18:35

Re: Problem mit Listbox und Typen
 
hm,

bei mir funktionert es:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  a: pointer;
  hex: String;
begin
  hex := 'a123bc';
  a := ptr(StrToInt('$'+hex));
end;
Die Funktion ptr erwartet doch einen Integer und
StrToInt macht aus dem hexString einen Integerwert.

Vielleicht kannst Du auch mal StrToInt64 probieren.
Ich weiß nicht wie groß Deine HexWerte sind.

IntToHex macht aus einen Integerwert eine HexDarstellung, diese ist vom Typ aber ein String.
Die Umkehrfunktion sollte dann StrToInt('$'+..) sein.

Grüße
Klaus

wadimwadim 14. Jun 2008 21:44

Re: Problem mit Listbox und Typen
 
Wenn ich die Funktion von Delphi benutze : z.B. IntToHex(255,8) bekomm ich das zurück 00000255, aber normalerweise soll das ja FF sein, oder?

pls help me

Fussball-Robby 14. Jun 2008 21:59

Re: Problem mit Listbox und Typen
 
Zitat:

Zitat von wadimwadim
Wenn ich die Funktion von Delphi benutze : z.B. IntToHex(255,8) bekomm ich das zurück 00000255, aber normalerweise soll das ja FF sein, oder?

Bei mir ergibt das (richtigerweise) 000000FF.
Delphi-Quellcode:
Edit1.Text := IntToHex(255, 8);

wadimwadim 15. Jun 2008 10:56

Re: Problem mit Listbox und Typen
 
OK, es stimmt ja alles was Ihr sagt, wird wohl eher an mir liegen, da ich mich mit Delphi kaum auskenne und mich die Typen, die man alle konventieren muss mich verrückt machen.

Ich habe auf meinem Formular 3 edit-Felder... in 2 gebe ich ein von wo, bis wo, der Bereich durchsucht werden soll, ins dritte gebe ich ein, wonach gesucht werden soll.
Mir wird aber nicht das ausgegeben, was ich in der Listbox haben möchte. Helft mir bitte.
Code ist unschön ;( sory

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Processhandle: THandle;
  WindowHandle, i, Pidi,
  lBuf, EndMemHex, StartMemHex,
  Sets, SuchS :                Integer;
  Wert :DWORD ;

  StartMem, EndMem, SuchMem,
  SHex, EHex:                   String;
begin
  listbox1.Clear;
  StartMem:= edit2.Text;
  EndMem := edit3.Text;
  SuchMem := edit4.Text;
  SuchS:= StrToInt(SuchMem);

  SHex:= '$'+ StartMem;
  EHex:= '$'+ EndMem;

  StartMemHex:= StrToInt(SHex);
  EndMemHex:= StrToInt(EHex);

  WindowHandle :=FindWindow(nil,'Guild Wars');
  While StartMemHex <= EndMemHex Do
      begin
      GetWindowThreadProcessId(WindowHandle ,@Pidi);
      ProcessHandle :=OpenProcess(PROCESS_VM_READ ,False , pidi);
      ReadProcessMemory(Processhandle ,ptr(StartMemHex),@lBuf,4,Wert);
      StartMemHex:= StartMemHex + 1;
      If SuchS = lbuf Then
      Listbox1.Items.Add (IntToHex(StartMemHex,8));
      Sets:= Listbox1.Items.Count;
      Label5.Caption:=IntToStr(Sets) ;
      end;
  end;

So etwas sollte in der Listbox z. B. rauskommen :
00A0002F
00A00037
00A0003F
00A00047
00A0004F
00A00057

bei mir kommt aber das raus:
00A00030
00A00038
00A00040
00A00048

Klaus01 15. Jun 2008 11:16

Re: Problem mit Listbox und Typen
 
Zitat:

Zitat von wadimwadim
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
...
  While StartMemHex <= EndMemHex Do
    begin
     ...
      StartMemHex:= StartMemHex + 1;
      If SuchS = lbuf Then
        Listbox1.Items.Add (IntToHex(StartMemHex,8));
      Sets:= Listbox1.Items.Count;
      Label5.Caption:=IntToStr(Sets) ;
    end;
  end;

So etwas sollte in der Listbox z. B. rauskommen :
00A0002F
00A00037
00A0003F
00A00047
00A0004F
00A00057

bei mir kommt aber das raus:
00A00030
00A00038
00A00040
00A00048

Hallo,

die Werte die Du herausbekommst unterscheiden sich nur um 1 Byte
von den Werten die Du herausbekommen willst.
Es mag sein, das dieses an StartMemHex := StartMemHex +1 liegt.

Grüße
Klaus

wadimwadim 15. Jun 2008 11:24

Re: Problem mit Listbox und Typen
 
Danke dir schon wieder, habe ich gar nicht bemerkt, dass die wert sich nur um 1byte unterscheiden.
Listbox1.Items.Add (IntToHex(StartMemHex-1,8)); funktionierts

Klaus01 15. Jun 2008 11:30

Re: Problem mit Listbox und Typen
 
.. du könntest auch
Delphi-Quellcode:
StartMemHex := StartMemHex +1
nach der if Abfrage ausführen.

Grüße
Klaus

wadimwadim 15. Jun 2008 11:49

Re: Problem mit Listbox und Typen
 
Brauche noch einmal deine Hilfe.
Und zwar möchte ich nun die Ergebnisse, die in meiner Listbox rauskommen, nocheinmal auslesen. Dazu füll ich sie auf arrays, was auch klappt, nur wenn ich jetzt die arrays in integer typen umwandeln möchte, kommt bei mir die Fehlermeldung, dass ''kein gültiger Integerwert sei.
hier bsp.

Delphi-Quellcode:
var
  i, Anzahl : Integer;
  NextScan: array [0..100] of String;
  NextInt: array [0..100] of Integer;

begin
Anzahl:= Listbox1.Items.Count;
For i:= 0 to Anzahl -1 do
  NextScan[i]:= '$' + Listbox1.Items[i];
  NextInt[i]:= StrToInt(NextScan[i]);
  i:= i + 1;
end;
könnte es sein, das der letze Eintrag in der Listbox leer ist und deshalb kein Integerwert ist?
Wie könnte ich es dann lösen?

Klaus01 15. Jun 2008 12:22

Re: Problem mit Listbox und Typen
 
Hallo,

habe einen Kommentar eingefügt.

Grüße
Klaus

Zitat:

Zitat von wadimwadim
Delphi-Quellcode:
var
  i, Anzahl : Integer;
  NextScan: array [0..100] of String;
  NextInt: array [0..100] of Integer;

begin
Anzahl:= Listbox1.Items.Count;
For i:= 0 to Anzahl -1 do    // i wird hier erhöht
  NextScan[i]:= '$' + Listbox1.Items[i];
  NextInt[i]:= StrToInt(NextScan[i]);
  i:= i + 1; //  <--- das hier solltest Du tunlichst unterlassen
end;


wadimwadim 15. Jun 2008 12:33

Re: Problem mit Listbox und Typen
 
Sory, aber versteh ich nicht so ganz. Wenn ich bei Anzahl dieses -1 weglass, dann kommt eine Fehlermeldung, dass Listenindex überschritten wird. Und wenn ich das mit i: i+1 weglass, ist bei mir die selber Fehlermeldung, wie im vorigem Beitrag.
was kann ich tun?

Gruß
Wadim

Apollonius 15. Jun 2008 12:38

Re: Problem mit Listbox und Typen
 
begin-end ist was tolles...

MSSSSM 15. Jun 2008 12:42

Re: Problem mit Listbox und Typen
 
Delphi-Quellcode:

var
  i, Anzahl : Integer;
  NextScan: array [0..100] of String;
  NextInt: array [0..100] of Integer;

begin
Anzahl := Listbox1.Items.Count; //ok

For i:= 0 to Anzahl -1 do    
begin
  NextScan[i]:= '$' + Listbox1.Items[i];
  NextInt[i]:= StrToInt(NextScan[i]);
end;
end;
mfg
das muss so sein da nach jedem for durchgang i automatisch erhöh wird!
außerdem begin end vergessen!

mfg

wadimwadim 15. Jun 2008 12:44

Re: Problem mit Listbox und Typen
 
Danke euch beiden.

wadimwadim 15. Jun 2008 13:49

Re: Problem mit Listbox und Typen
 
Ey bei mir ist sitzt hier Problem auf Problem...
Möchte erreichen, dass ich die Listbox zuerst leere, bevor da was draufgeschrieben wird. (Listbox1.Clear;)

Delphi-Quellcode:

procedure TForm1.Button2Click(Sender: TObject);
var
  i, ii, Anzahl, Er : Integer;
  NextScan: array [0..10000] of String;
  Processhandle: THandle;
  WindowHandle, Pidi,
  EndMemHex,
  Sets :                Integer;
  Wert :DWORD ;
  NextInt: array [0..10000] of Integer;
  NextInt_: array [0..10000] of Integer;
  lbuf: array [0..10000] of Integer;

begin
WindowHandle :=FindWindow(nil,'Guild Wars');
Anzahl:= Listbox1.Items.Count;
For i:= 0 to Anzahl -1 do
  begin
  NextScan[i]:= '$' + Listbox1.Items[i];
  NextInt[i]:= StrToInt(NextScan[i]);
  GetWindowThreadProcessId(WindowHandle ,@Pidi);
  ProcessHandle :=OpenProcess(PROCESS_VM_READ ,False , pidi);
  ReadProcessMemory(Processhandle ,ptr(NextInt[i]),@lBuf[i],4,Wert);
  //Listbox1.Clear; soll mir die Listbox leeren  wo soll ich das reinschreiben?
  If lbuf[i] = SuchS Then
    Listbox1.Items.Add(IntToHex(NextInt[i],8));
  end;
end;
Listenindex wird überschritten(Fehlermeldung), falls ich es da reinschreib.

mkinzler 15. Jun 2008 13:52

Re: Problem mit Listbox und Typen
 
Am Anfang. Allerdings solltest du dann die Schleife anders deklarieren.

wadimwadim 15. Jun 2008 13:54

Re: Problem mit Listbox und Typen
 
Vor der Schleife? Oder wo? und was muss ich ändern... die ist doch richtig


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz