AGB  ·  Datenschutz  ·  Impressum  







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

Speicher auslesen mit Delphi

Ein Thema von simjoh · begonnen am 19. Mär 2007 · letzter Beitrag vom 20. Mär 2007
Antwort Antwort
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#1

Speicher auslesen mit Delphi

  Alt 19. Mär 2007, 15:14
Hallo,

bin relativer Neuling was Delphi betrifft. Ich spiele manchmal bei PartyPoker Poker. PartyPoker erstellt in einer Textdatei eine Handhistory der gepielten Hände in einem Verzeichnis auf C:\... Nun möchte ich beim Spielen den Speicher von Partypoker auslesen, um mir ein eigenes Programm zu schreiben, welches als Handhistory-Ticker dient. Es soll also in einem TPanel der aktuelle Zug eines Spielers realtime angezeigt werden. Wie macht man sowas?? So eine Handhistory von PartyPoker sieht dann etwas so aus:

Game #5682398962 starts.

#Game No : 5682398962
***** Hand History for Game 5682398962 *****
$0.25/$0.50 Texas Hold'em - Friday, February 16, 23:59:11 ET 2007
Table Table 126428 (Real Money)
Seat 10 is the button
Total number of players : 9
Seat 1: Chipmunk75 ( $13.95 )
Seat 2: gary133 ( $20.63 )
Seat 3: MrChips__ ( $13.70 )
Seat 6: nutsplayer1 ( $25.45 )
Seat 7: ede3006 ( $13.25 )
Seat 8: johann22111 ( $2.43 )
Seat 9: javabung ( $14.40 )
Seat 10: RecluceTM ( $14.85 )
Seat 4: Jojo ( $12.50 )
Chipmunk75 posts small blind [$0.10].
gary133 posts big blind [$0.25].
** Dealing down cards **
MrChips__ folds
nutsplayer1 folds
ede3006 folds
johann22111 calls [$0.25]
RecluceTM folds
Chipmunk75 folds
gary133 checks
** Dealing Flop ** [ Ad, Kc, Ah ]
gary133 checks
johann22111 checks
** Dealing Turn ** [ 6c ]
gary133 checks
johann22111 checks
** Dealing River ** [ 7d ]
gary133 checks
johann22111 bets [$0.50]
emday111 has joined the table.
>You have options at Table 126408 Table!.
gary133 calls [$0.50]
johann22111 shows [ 7s, Qs ]two pairs, Aces and Sevens.
gary133 doesn't show [ 4c, Ts ]a pair of Aces.
johann22111 wins $1.55 from the main pot with two pairs, Aces and Sevens.

Ich kenne mich mit handle, FindWindow und ReadProcessMemory nicht genug aus, kann jemand helfen oder Tipps geben??

Schanke dön!!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Speicher auslesen mit Delphi

  Alt 19. Mär 2007, 17:11
Zitat von simjoh:
Nun möchte ich beim Spielen den Speicher von Partypoker auslesen...
Schwierig! Die kleinste Änderung in der Partypoker SW bewirkt, dass dein Programm die Informationen nicht mehr findet.
Wenn die PP SW seine Daten dynamisch im Speicher anlegt (und davon ist auszugehen), sind die Daten jedesmal an einer anderen Adresse.
Wenn du natürlich weisst, an welcher Adresse die Daten stehen und wie die Struktur der Daten ist, kann man was machen.
Es ist auf jeden Fall ein Job für einen Profi; ein Anfänger beisst sich daran die Zähne aus.
Andreas
  Mit Zitat antworten Zitat
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Speicher auslesen mit Delphi

  Alt 20. Mär 2007, 15:38
Hallo,

danke für deine Antwort. Es gibt bereits ein Programm, was das, was ich programmieren möchte kann: FreePHG (http://www.jukofyork.com/freephg.htm). Kann man kostenlos runterladen. Ist aber in C++ geschrieben und ich kann kein C++. Möglich ist das Ganze also. Wenn ich den Code einigermaßen richtig verstehe, wird auch nur das Pokerfenster gesucht (FindWindowByTitle), die ProzessID gesucht und mit ReadProcessMemory der Speicher ausgelesen. Ich weiß aber nicht, wie der weiterverarbeitet wird, dachte eigentlich, dass hier schon ein oder mehrere Strings stehen.

function FindWindowByTitle(WindowTitle: string): Hwnd;
var
NextHandle: Hwnd;
NextTitle: array[0..255] of char;
begin
// Get the first window
NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
while NextHandle > 0 do
begin
// retrieve its text
GetWindowText(NextHandle, NextTitle, 255);
if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
begin
Result := NextHandle;
Exit;
end
else
// Get the next window
NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
end;
Result := 0;
end;

procedure TForm2.Button7Click(Sender: TObject);
var
WindowName : integer;
ProcessId : integer;
ThreadId : integer;
buf : PChar;
HandleWindow : Integer;
write : cardinal;
const
v1 = $90;
begin
WindowName := FindWindowByTitle('Table');{FindWindow(nil,WindowT itle);}
If WindowName = 0 then MessageDlg('...erst spiel starten...dann programm starten =)', mbwarning,[mbOK],0);
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
GetMem(buf,1);
buf^ := Chr(v1);
FreeMem(buf);
closehandle(HandleWindow);
end;

Wie wird buf^ weiterverarbeitet??

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:32 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