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 Memo Text von anderem Fenster in das Memo meines programms (https://www.delphipraxis.net/11741-memo-text-von-anderem-fenster-das-memo-meines-programms.html)

Pseudemys Nelsoni 13. Nov 2003 04:54


Memo Text von anderem Fenster in das Memo meines programms
 
Moin,

ich such jetzt schon ca 1std in der Suche danach, hab aber nichts passendes gefunden(btw Luckie, dein Tutorial mit den Handles hat mir gefallen). Ich möchte mit meinem Programm darauf reagieren, wenn in dem fremdem Programm eine Zeile in ein Memo eingefügt wird, aber wie fange ich das ab?

Pseudemys Nelsoni 18. Nov 2003 14:13

Re: Memo Text von anderem Fenster in das Memo meines program
 
*hochschieb*

Minz 18. Nov 2003 14:18

Re: Memo Text von anderem Fenster in das Memo meines program
 
Wie hängen die beiden Fenster zusammen?

Wird das eine vom anderen erstellt? Oder haben sie
überhaupt nichts gemeinsam?

Pseudemys Nelsoni 18. Nov 2003 15:32

Re: Memo Text von anderem Fenster in das Memo meines program
 
sie haben nichts gemeinsam, das eine ist ein spiel mit einem memo, das andere ist mein programm, das auf einträge in dem memo des spiels reagieren soll

Minz 18. Nov 2003 15:54

Re: Memo Text von anderem Fenster in das Memo meines program
 
Uff, nun da denke ich wirst du mit Botschaften arbeiten müssen und vermutlich pointern.

Die Botschaften vom Typ TMSG übermitteln nur Integer-Werte also keinen Text, daher
brauchst du dann wohl einen Pointer, der auf den Memo-Speicher zeigt.

Dieser wird bei der Botschafts-Übertragung von Windows berücksichtigt und der
Speicherinhalt wird in den Bereich deiner Überwachungsanwendung kopiert. Weil beide
Anwendungen ihren eigenen Speicherbereich haben, können sie nicht auf den gleichen
Speicherbereich zeigen. (frag mich net wie das mit Pointern funzt :mrgreen: )

Eine andere Möglichkeit wäre sie per Netzwerk kommunizieren zu lassen. Da kannst du dann auch ganz bequem Text übermitteln.

Pseudemys Nelsoni 18. Nov 2003 16:02

Re: Memo Text von anderem Fenster in das Memo meines program
 
ich hab nur 1 pc *g*

Pseudemys Nelsoni 7. Jan 2004 05:16

Re: Memo Text von anderem Fenster in das Memo meines program
 
*hochschieb²*

hoi, also ich möchte alle neuen lines die in das richedit (ist das überhaupt eins?) hinzukommen, in MEINEM eigenen programm ebenfalls in mein richedit kommen.
Das ist das Spiel:

http://www.angelfire.com/bug/delphi/ss1.jpg



^^^^die lines möchte ich in meinem programm reinkriegen :\

Jens Schumann 7. Jan 2004 07:16

Re: Memo Text von anderem Fenster in das Memo meines program
 
Hallo,
handelt es sich bei dem Spiel um ein Programm vor Dir oder von fremden Dritten ?
Ist das Programm auch ein Windows-Programm ? Oder ist es ein DOS basierendes Programm ?

Behauptung: Bei einem DOS-Spiel kannst Du es vergessen.

Wenn es sich um ein Windows-Programm handelt, kannst Du versuchen an das Handle
heran zu kommen. Dann kannst Du mit WM_GETTEXT den Inhalt pollen.

Um an Info's über fremde Fenster zu gelangen verwende ich folgendes Programm Windowse

Pseudemys Nelsoni 7. Jan 2004 09:15

Re: Memo Text von anderem Fenster in das Memo meines program
 
hoi, das spiel ist nicht von mir ;) es ist C&C Tiberian Sun,
es ist 100% ein windowsprogramm, da ich einige leute kenne die selber schon patches (z.b für mehr als 8 farben) gebastelt haben, die dann in der listbox hinzukamen(im spiel).

zu dem handle hab ich 2 fragen,

1: ändert sich das handle nicht nach jedem neuen start?
2: ich habe mir das tool mal gezogen, aber das spiel geht immer über "WinDowse" d.h ich kann die infos nie sehen weil ich das windowse fenster nicht sehe :\

Jens Schumann 7. Jan 2004 09:27

Re: Memo Text von anderem Fenster in das Memo meines program
 
Hallo,

zu 1) Ja

zu 2) Keine Ahnung

Pseudemys Nelsoni 9. Jan 2004 06:37

Re: Memo Text von anderem Fenster in das Memo meines program
 
hat noch nie jemand sowas gemacht? also ausserhalb seines progs irgendwi daten geholt?
weiss zmindest jemand wie das heisst was ich vorhabe? dann werd ich mal googlen, wenn ich in der suche "memo text von einem anderen programm ins eigene memo" eingeben würde würds natürlich keine ergebnisse geben.

Also wie heisst das :)?

Luckie 9. Jan 2004 07:06

Re: Memo Text von anderem Fenster in das Memo meines program
 
Finde mit FindWindow / EnumWindows das Parent-Fenster. Finde mit FindWindowEx / EnumChildWindows das RichEdit oder Memo. Sende eine WM_GETTEXTLENGTH Nachricht mit SendMessage an das RichEdit / Memo, Rückgabewert der Funktion SendMessage ist in diesem Fall die anzahl der Zeichen. Reserviere entsprechend Speicher für eine PChar Variable. Hol dir den Inhalt, in dem du WM_GETTEXT an das RichEdit / Memo schickst. Den Inahlt findest du jetzt im lParam welcher ein Zeiger auf deinen zuvor reservierten Speicher vom Typ PChar ist.

Im PseudoCode:
Code:
var
  len: Integer;
  Buffer: PChar;
begin
  len := SendMessage(hRichEdit, WM_GETTEXTLENGTH, 0, 0);
  GetMem(Buffer, len+1);
  try
    SendMessage(hRichEdit, WM_GETTEXT, len+1, Integer(@Buffer));
    Memo1.Text := String(Buffer);
  finally
    FreeMem(Buffer, len+1);
  end;
hRichEdit ist das Handle von dem RichEdit im anderen Programm, Memo1 das memo in deinem Programm.

Pseudemys Nelsoni 9. Jan 2004 08:38

Re: Memo Text von anderem Fenster in das Memo meines program
 
hoi,

das ist doch mal was, danke :)

gleich mal probieren

Pseudemys Nelsoni 9. Jan 2004 13:24

Re: Memo Text von anderem Fenster in das Memo meines program
 
hoi,

also das "teil" das den text im spiel hat ist eine ListBox (laut resourcen hacker).
Ich habe dein beispiel mal angepasst gehabt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hList, WND: HWND;
  len: integer;
  Buffer: PChar;
begin
  WND := FindWindow(nil, 'Tiberian Sun');
  hList := FindWindowEx(WND, 0, 'LISTBOX', nil);
  len := SendMessage(hList, WM_GETTEXTLENGTH, 0, 0);
  GetMem(Buffer, len+1);
  try
    SendMessage(hList, LB_GETTEXT, len+1, Integer(@Buffer));
    Memo1.Text := String(Buffer);
  finally
    FreeMem(Buffer, len+1);
  end;
end;

ich weiss nicht ob "LB_GETTEXT" richtig war, aber wenn ich den button drücke bekomme ich im memo nichts weiter ausser "&E" angezeigt, woher kommt das?

Luckie 9. Jan 2004 14:46

Re: Memo Text von anderem Fenster in das Memo meines program
 
Weil du in einer Schleife den Text von jedem Item einzeln holen musst:

http://msdn.microsoft.com/library/de...lb_gettext.asp

Du solltest dir mal das Listbox Tutorial aus meinen "Win32API Tutorials für Delphi" ankucken.

Pseudemys Nelsoni 10. Jan 2004 08:08

Re: Memo Text von anderem Fenster in das Memo meines program
 
hoi luckie, wo genau find ich die? ich finde nur die win32api tuts.

btw: ich habe mal folgendes zum test benutzt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hlist, wnd: HWND;
begin
  wnd := FindWindow('Tiberian Sun', 'Tiberian Sun');
  hlist := FindWindowEx(wnd, 0, 'LISTBOX', nil);
  ShowMessage(IntToStr(wnd));
  ShowMessage(IntToStr(hlist));
end;

das 2te showmessage zeigt mir "0" an, aber das das ne Listbox ist stimmt 100%, wieso bekomm ich die dann?

SirThornberry 10. Jan 2004 10:21

Re: Memo Text von anderem Fenster in das Memo meines program
 
versuchst mal mit childwindows

Pseudemys Nelsoni 10. Jan 2004 11:21

Re: Memo Text von anderem Fenster in das Memo meines program
 
wie meinst du das, bzw wie, ist das eine funktion? (sehen tu ich keine)

scp 10. Jan 2004 12:20

Re: Memo Text von anderem Fenster in das Memo meines program
 
Zitat:

Zitat von Pseudemys Nelsoni
das 2te showmessage zeigt mir "0" an, aber das das ne Listbox ist stimmt 100%, wieso bekomm ich die dann?

Das es ne Listbox ist, is ja OK, aber bei FindWindowEx(), wo du 'LISTBOX' stehen hast muss der Klassenname der Listbox stehen, und der muss nicht unbedingt so heissen. Bei Delphi-Progs heisst er z.B. 'TListBox', wie es bei C&C heisst, kann ich dir nicht sagen.

Luckie 10. Jan 2004 12:59

Re: Memo Text von anderem Fenster in das Memo meines program
 
Zitat:

Zitat von Pseudemys Nelsoni
hoi luckie, wo genau find ich die? ich finde nur die win32api tuts.

Davon rede ich ja auch die ganze Zeit: http://www.luckie-online.de/tutorials/win32apituts/ :roll:

Pseudemys Nelsoni 10. Jan 2004 14:43

Re: Memo Text von anderem Fenster in das Memo meines program
 
ah, wusst nicht das die dabei sind, danke, mal runterladen.


Zitat:

wie es bei C&C heisst, kann ich dir nicht sagen.
wie kann man soetwas herausfinden?

Pseudemys Nelsoni 11. Jan 2004 06:44

Re: Memo Text von anderem Fenster in das Memo meines program
 
Liste der Anhänge anzeigen (Anzahl: 1)
also ich hab nochmal im Resourcen hacker das Dialog geöffnet und die Komponente markiert, dort word mir bei "class name" "LISTBOX" angezeigt, dann muss es doch auch so heissen oder?

Ich hab mal ein Screenshoot im Anhang. Gibt es irgendwelche programme die mir die klasse anzeigen? und wenn es sie gibt, gibt es denn auch welche die ÜBER einem maximierten fenster noch da sind? Hab das mit Assarbad's tool versucht EDA hiess das, aber sobald ich das Spiel in den Vordergrund hole verschwindet das tool :(

Luckie 11. Jan 2004 06:57

Re: Memo Text von anderem Fenster in das Memo meines program
 
Kann ich nur bestätigne, sieht ganz nach einer Listbox aus. Wo ist jetzt das Problem?

Pseudemys Nelsoni 11. Jan 2004 08:02

Re: Memo Text von anderem Fenster in das Memo meines program
 
weil scp:

Zitat:

Das es ne Listbox ist, is ja OK, aber bei FindWindowEx(), wo du 'LISTBOX' stehen hast muss der Klassenname der Listbox stehen, und der muss nicht unbedingt so heissen. Bei Delphi-Progs heisst er z.B. 'TListBox', wie es bei C&C heisst, kann ich dir nicht sagen.
geschrieben hatte. Also ist die Klasse doch "LISTBOX" oder?

dann müsste:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hlist, wnd: HWND;
begin
  wnd := FindWindow('Tiberian Sun', 'Tiberian Sun');
  hlist := FindWindowEx(wnd, 0, 'LISTBOX', nil);
  ShowMessage(IntToStr(wnd));
  ShowMessage(IntToStr(hlist));
end;

ja richtig sein, trotzdem gibt letztere showmessage mir "0" aus

ritzy 11. Jan 2004 13:27

Re: Memo Text von anderem Fenster in das Memo meines program
 
Hi,

ich kann mir auch nicht vorstellen das das so einfach über handles funzt.
Denn bei online-games sind diese Messages bereits im Speicher des eigenen Fensters enthalten.
Eine andere Idee Währe die Speicheradressen zu Filtern und die Nachrichten Packete des Servers zu entschlüsseln,
die Speicheradresen liessen sich wie folgt logisch entschlüsseln:

- den kompletten Speicher des Fensters auslesen.
- in Ihm einen bestimmten Wert suchen ("Beispielsweise einem String")
- sollte es sic allerdings nur um eine zahl handeln so werden tausende möglichkeiten übrigbleiben
- also wert verändern und nach veränderten wert unter den suchergebnissen der letzten suche lesen

- sowi du weisst welche aufgaben die speicheradressen haben, kannst du die informationen beispielsweise in ein eigenes Programm mit einem richedit et. übertragen


p.s. der genaue code macht mir zur zeit selber kopfschmerzen ich habe ein ähnliches thread auch schon eröffnet nur leider noch keine antwort

:wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 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