Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Window Handle (https://www.delphipraxis.net/71908-window-handle.html)

delphiUser88 22. Jun 2006 13:13


Window Handle
 
Hallo ich möchte gerne ein Javafenster auslesen stoße aber leider dabei auf große Probleme

zur Zeit versuche ich es so

Code:

// Fenster suchen.
  iWindow := FindWindow(nil, PChar('entsprechende Fensterbezeichnung');

// damit schreibe ich in das Editfeld des Fensters und sende es anschließend
EnumChildWindows(iWindow, @EnumWindowsProc, LongWord(Edit1));
SendMessage(iWindow,WM_KEYDOWN,VK_RETURN, 0);
SendMessage(iWindow,WM_KEYUP,VK_RETURN, 0)
Aber wie lese ich dieses Fenster nun aus und schreibe den Inhalt in ein Memo ?

MFG: DelphiUser88

Luckie 22. Jun 2006 13:44

Re: Window Handle
 
Java kennt keine Fenster, wie man sie unter Windows üblicherweise kennen würde. Java zeichnet alles komplett selber. Vergleichbar mit einm TLabel aus der VCL. Dem zu folge haben sie auch keine Handles und der Zugriff mit Hilfe der Windows API-Funktionen ist nicht möglich.

delphiUser88 22. Jun 2006 13:55

Re: Window Handle
 
Hallo Michael

Das Senden funktioniert aber der Text wird in das Editfeld des Applet Fenster (Chat) geschrieben und anschließend gesendet Wenn dieser nun im Fenster zusehen ist möchte ich ihn wieder auslesen und in ein Memo schreiben geht das ?

toms 22. Jun 2006 14:18

Re: Window Handle
 
Welche URL betrifft es denn?

delphiUser88 22. Jun 2006 15:06

Re: Window Handle
 
URL tut nichts zur Sache hier noach einmal der gesamte Code

Delphi-Quellcode:

// globale Variablen
searchNr              : Integer;
gewuenschteNr         : Integer;
iWindow               : THandle;

function EnumWindowsProc(Handle: THandle; Edit: TEdit): Boolean; stdcall;
begin

  if Assigned(Edit) and (searchNr = gewuenschteNr) then
  begin
    SendMessage(Handle, WM_SETTEXT, 0, integer(PChar(Edit.Text)));
    Result := false;
  end
  else
  begin

    Result := true;
    Inc(searchNr);
  end;
end;

//---------------------------------------------------------------------------------

procedure TForm1.SendBtnClick(Sender: TObject);
begin


  // Fenster suchen.
  iWindow := FindWindow(nil, PChar('entsprechende Fensterbezeichnung');

  searchNr := 0;
  gewuenschteNr := 5;


// damit schreibe ich in das Editfeld des Fensters und sende es anschließend
EnumChildWindows(iWindow, @EnumWindowsProc, LongWord(Edit1));
SendMessage(iWindow,WM_KEYDOWN,VK_RETURN, 0);
SendMessage(iWindow,WM_KEYUP,VK_RETURN, 0);


end;
Wie schon erwähnt das senden funktioniert nur wie Auslesen ?

toms 22. Jun 2006 15:11

Re: Window Handle
 
setzen: WM_SETTEXT
Text auslesen... WM_GETTEXT

delphiUser88 22. Jun 2006 16:06

Re: Window Handle
 
Danke Toms für die schnelle Antwort bekomme ich aber leider nicht hin :(

Luckie 22. Jun 2006 19:20

Re: Window Handle
 
Zitat:

Zitat von delphiUser88
Danke Toms für die schnelle Antwort bekomme ich aber leider nicht hin :(

Das hilft uns leider auch nicht weiter. Sollen wir jetzt raten womit du Probleme hast?

delphiUser88 22. Jun 2006 19:44

Re: Window Handle
 
Wie gesagt möchte ja das Fenster auslesen und in ein Memo übertragen also hab ich die Funktion verändert

Delphi-Quellcode:
/----------------------
function GETTXT(Handle: THandle; Memo: TMemo): Boolean; stdcall;
begin

  if Assigned(Memo) and (searchNr = gewuenschteNr) then
  begin
    SendMessage(Handle, WM_GETTEXT, 0, Integer(PChar(Memo.Text)));
    Result := false;
  end
  else
  begin

    Result := true;
    Inc(searchNr);
  end;
end;
//-----------------------

procedure TForm1.GetTextBtnClick(Sender: TObject);
begin


  // Fenster suchen.
  iWindow := FindWindow(nil, PChar('entsprechende Fensterbezeichnung');

  searchNr := 0;
  gewuenschteNr := 5;


// jetzt möchte ich aber Auslesen und in Memo1 schreiben
EnumChildWindows(iWindow, @EnumWindowsProc, LongWord(Memo1.Text));
SendMessage(iWindow,WM_KEYDOWN,VK_RETURN, 0);
SendMessage(iWindow,WM_KEYUP,VK_RETURN, 0);


end;
Bin ich den jetzt überhaupt auf dem richtigen Wege :-D

delphiUser88 23. Jun 2006 11:31

Re: Window Handle
 
keiner eine Idee ?

Luckie 23. Jun 2006 11:37

Re: Window Handle
 
Du hast es doch schon da steheN.
Delphi-Quellcode:
if Assigned(Memo) and (searchNr = gewuenschteNr) then
  begin
    SendMessage(Handle, WM_GETTEXT, 0, Integer(PChar(Memo.Text)));
    Result := false;
  end
Was willst du denn noch?

delphiUser88 23. Jun 2006 11:43

Re: Window Handle
 
Delphi-Quellcode:

procedure TForm1.GetTextBtnClick(Sender: TObject);
begin


  // Fenster suchen.
  iWindow := FindWindow(nil, PChar('entsprechende Fensterbezeichnung');

  searchNr := 0;
  gewuenschteNr := 5;


// ab hier möchte ich den Inhalt des Javafensters in ein Memo auf der Form schreiben also Memo.Lines.add wie setz ich das jetzt um ?

Luckie 23. Jun 2006 12:10

Re: Window Handle
 
Ja, was meinst du, was der Quellcode macht?

delphiUser88 23. Jun 2006 12:32

Re: Window Handle
 
eben nicht ins memo schreiben warum auch immer

Delphi-Quellcode:

// globale Variablen
searchNr              : Integer;
gewuenschteNr         : Integer;
iWindow               : THandle;

function EnumWindowsProc(Handle: THandle; Edit: TEdit): Boolean; stdcall;
begin

  if Assigned(Edit) and (searchNr = gewuenschteNr) then
  begin
    SendMessage(Handle, WM_SETTEXT, 0, integer(PChar(Edit.Text)));
    Result := false;
  end
  else
  begin

    Result := true;
    Inc(searchNr);
  end;
end;

//---------------------------------------------------------------------------------

procedure TForm1.SendBtnClick(Sender: TObject);
begin


  // Fenster suchen.
  iWindow := FindWindow(nil, PChar('entsprechende Fensterbezeichnung');

  searchNr := 0;
  gewuenschteNr := 5; //Editfeld vom Chatfenster (Handle)


// damit sende ich den Text der bei mir im Edit1 steht an das Editfeld des Chatfensters und betätige dann die Entertaste
// das funktioniert ja auch und der text wird gesendet

EnumChildWindows(iWindow, @EnumWindowsProc, LongWord(Edit1));
SendMessage(iWindow,WM_KEYDOWN,VK_RETURN, 0);
SendMessage(iWindow,WM_KEYUP,VK_RETURN, 0);


end;
jetzt möchte ich aber das der Chatfensterinhalt (Text) diesmal (gewuenschteNr := 3) mit der Funktion GETTXT ausgelesen wird und in mein Memo1 auf meiner Form übergeben wird und das versuche ich die ganze zeit so

Delphi-Quellcode:


function GETTXT(Handle: THandle; Memo: TMemo): Boolean; stdcall;
begin

  if Assigned(Memo) and (searchNr = gewuenschteNr) then
  begin
    SendMessage(Handle, WM_GETTEXT, 0, integer(PChar(Memo.Text)));
    Result := false;
  end
  else
  begin

    Result := true;
    Inc(searchNr);
  end;
end;

//---------------------------------------------------------------------------------

procedure TForm1.GetTXTBtnClick(Sender: TObject);
begin


  // Fenster suchen.
  iWindow := FindWindow(nil, PChar('entsprechende Fensterbezeichnung');

  searchNr := 0;
  gewuenschteNr := 3; //Memo (Chattext) vom Chatfenster (Handle)


//so und ab hier gibt es Probleme ich weiß nicht genau wie ich die Funktion GETTXT aufrufen muss damit der Chatinhalt in mein Memo
//geschrieben wird

end;

DP-Maintenance 23. Jun 2006 13:08

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "Windows API / MS.NET Framework API" verschoben.

SirThornberry 23. Jun 2006 13:14

Re: Window Handle
 
Es gruselt mich. Habt ihr mal im MSDN geschaut wie die Parameter für wm_gettext lauten? Anstelle des Pointers auf den Buffer übergebt Ihr 0, und anstelle der maximal möglichen Länge des Buffers übergebt ihr die Adresse von Memo1.text.
Da "Text" ein Property ist geht derdirekte zugriff gar nicht sondern es muss auf eine zwischenvariable
MSDN-Library durchsuchenwm_gettext
Ihr könnt aber auch gleich die Funktion GetWindowText nehmen, da haben die Parameter schon die richtigen Namen so das es dort einleuchtender sein sollte was ihr bisher falsch gemacht habt.

[Edit]
Delphi-Quellcode:
var lBuffer: String;
    lSize : Integer;
begin
  SetLength(lBuffer, 255);
  lSize := GetWindowText(Handle, @lBuffer[1], Length(lBuffer));
  Memo1.Text := copy(lBuffer, 1, lSize);
wenn du unbedingt SendMessage verwenden willst dann so:
Delphi-Quellcode:
var lBuffer: String;
    lSize : Integer;
begin
  SetLength(lBuffer, 255);
  lSize := SendMessage(Handle, WM_GETTEXT, Length(lBuffer), Integer(@lBuffer[1]));
  Memo1.Text := copy(lBuffer, 1, lSize);
[/Edit]

Luckie 23. Jun 2006 13:29

Re: Window Handle
 
GetWindowText geht aber nur im eigenen Prozess:
Zitat:

GetWindowText cannot retrieve the text of a control in another application.

SirThornberry 23. Jun 2006 13:32

Re: Window Handle
 
Ich hab die Erfahrung gemacht das GetWindowText auch für andere Prozesse funktioniert. War aber vermutlich früher mal anders und daher dieser Hinweis. Ansonsten hab ichs grad nochmal mit SendMessage ergänzt.

Luckie 23. Jun 2006 13:48

Re: Window Handle
 
Dazu noch in der Remarkssection:
Zitat:

If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to be sent to the specified window or control. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string. This behavior is by design.
Es mag sein, dass es funktioniert, aber man sollte sich nicht darauf verlassen.

SirThornberry 23. Jun 2006 13:57

Re: Window Handle
 
ok, dann würde man aber gar nicht ran kommen, auch nicht mit SendMessage außer man pflanzt sich in den anderen Prozess ein.

Luckie 23. Jun 2006 14:01

Re: Window Handle
 
Dazu ist doch WM_GETTEXT da.

delphiUser88 23. Jun 2006 14:04

Re: Window Handle
 
Funktioniert nicht er schreibt mir die Bezeichnung des Programmes selber (Caption) ins Memo aber nicht den Inhalt des Chatfensters Ich brauch ja dazu das richtige Handle in dem Falle gewuenschteNr := 3; //Memo (Chattext)

Beim Text senden habe ich es ja ins Handle gewuenschteNr := 5; //Editfeld vom Chatfenster geschrieben mit EnumChildWindows(iWindow, @EnumWindowsProc, LongWord(Edit1));

Jetzt aber muss der Text aus der Funktion GETTXT in dem Handle gewuenschteNr := 3; //Memo (Chattext) empfangen werden und ins Memo1 rein geht das vielleicht in der Variante die du wählst umzusetzen ?

SirThornberry 23. Jun 2006 14:04

Re: Window Handle
 
ok, jetzt beim erneuten Lesen hab ichs begriffen. WM_GETTEXT liefert immer den Text. GetWindowText liefert nur den Text wenn es im eigenen Prozess ist das Handle, ansonsten wird die Caption zurück geliefert.

delphiUser88 23. Jun 2006 14:10

Re: Window Handle
 
vielleicht wäre ja in dem entsprechenden Fenster (gewuenschteNr := 3) alles markieren und kopieren eine Lösung zumindest wäre der Text dann ersteinmal im Zwischenspeicher würde das gehen ? ich weis ist keine saubere Lösung

delphiUser88 23. Jun 2006 14:40

Re: Window Handle
 
Wenn euch noch interessieren sollte wie ich das entsprechne handle rausbekomme dann schaut euch diese Funktion an

Delphi-Quellcode:

function HandlePrint(Handle: THandle; dat: LongWord): Boolean;
stdcall;
begin

  // zeigt die Handles direkt im Chatfensters an
  SendMessage(Handle, WM_SETTEXT, 0, Integer(PChar('Gewuenschte Handle ist: ' + IntToStr(searchNr))));

  Inc(searchNr);

  // weiter um alles Handles rauszufinden
  Result := true;
end;

//----------------------------------

procedure TForm1.ButtonClick(Sender: TObject);
begin

  iWindow := FindWindow(nil, PChar('Raum plauderecke')); //Name des Chatfensters
  searchNr := 0;

  // zeigt die handles des Chatfensters an
  if iWindow <> 0 then EnumChildWindows(iWindow, @HandlePrint, 0);


end;
testen könnt ihr das auf www.spinchat.de im Raum plauderecke ihr könnt aber auch ein andren javachat dazu benutzen muss dann nur diese zeile iWindow := FindWindow(nil, PChar('Raum plauderecke')); angepasst werden

toms 23. Jun 2006 15:53

Re: Window Handle
 
WM_GETTEXT wird von dem Chat-Memo Fenster (SunAwtCanvas Klasse) nicht unterstuetzt.

delphiUser88 23. Jun 2006 16:48

Re: Window Handle
 
Also ich habe jetzt das entsprechende Chatfenster (Nicht spinchat) mit WinSpy analysiert folgende Fenster gibt es


Klasse: RichEdit20W
Klasse: Edit
Klasse: ListBox

das RichEdit denk ich wird wohl das Chatfenster sein Edit das Eingabefeld und ListBox die Userliste also muss ich mit WM_GETTEXT
über meine Funktion GETTXT wohl das Richedit auslesen vielleicht könnt ihr damit was anfangen und mir doch noch helfen :-D

delphiUser88 24. Jun 2006 11:43

Re: Window Handle
 
Hat denn keiner weitere Lösungsvorsachläge ?

Christian Seehase 24. Jun 2006 13:16

Re: Window Handle
 
Moin Delphiuser,

Du könntest das so machen:
In der EnumChildWindows-Routine prüfst Du zu jedem Handle mit MSDN-Library durchsuchenGetClassName/Hier im Forum suchenGetClassName welche Klasse es hat. Handelt es sich um RichEdit20W, dann liest Du es mit WM_GETTEXT aus.

delphiUser88 25. Jun 2006 00:46

Re: Window Handle
 
Hallo Christian danke für die schnelle Hilfe. Leider weis ich nicht genau wie ich das mit GetClassName umsetzen soll. Eigentlich befinde ich mich ja in der Funktion GETTXT schon im richtigen Fenster

Delphi-Quellcode:
// globale Variablen
searchNr              : Integer;
gewuenschteNr         : Integer;
iWindow               : THandle;

function GETTXT(Handle: THandle; RichEdit: TRichEdit): Boolean; stdcall;
begin

  if Assigned(RichEdit) and (searchNr = gewuenschteNr) then
  begin
    SendMessage(Handle, WM_GETTEXT, 0, integer(PChar(RichEdit.Text)));
    Result := false;
  end
  else
  begin

    Result := true;
    Inc(searchNr);
  end;
end;

ich muss denk ich mal nur mit

Delphi-Quellcode:
EnumChildWindows(iWindow, @GETTXT,//hier weis ich nicht weiter den Inhalt in ein Memo oder Richedit schreiben
MFG: DelphiUser

Christian Seehase 25. Jun 2006 01:32

Re: Window Handle
 
Moin DelphiUser,

die Routine, die von EnumChildWindows aufgerufen wird (in Deinem Falle HandlePrint) wird für alle ChildWindows von iWindow aufgerufen, und erhält im Parameter Handle das Handle des jeweiligen Controls.
Dies geschieht solange, bis entweder alle ChildWindows durchgegangen wurden, oder bis die Funktion False zurückliefert.

Mit dem übergebenen Handle, kannst Du nun prüfen, ob es die richtige Klasse hat.

Delphi-Quellcode:
// Das müsste in Dein HandlePrint eingebaut werden.
const
  _sClass = 'RichEdit20W';

var
  pcClass : PChar;
  iLen   : integer;

begin
  iLen   := length(_sClass)+1;
  pcClass := AllocMem(iLen);
  try
    if GetClassName(Handle,pcClass,iLen) > 0 then begin
      if trim(pcClass) = _sClass then begin
        // Der Text kann ausgelesen werden, da die Klasse stimmt.
        Result := false;
      end;
    end;
  finally
    FreeMem(pcClass,iLen);
  end;
end;
(ich hoffe das stimmt so, ich habe es hier direkt reingetippt).

Das Auslesen des Textes müsste allerdings auch etwas anders vonstatten gehen, als Du es geschrieben hast:
Du weisst ja gar nicht, wieviel in dem Richedit steht.
Hierzu müsstest Du erst einmal ermitteln wie lang der Inhalt ist (WM_GETTEXTLENTH), bevor Du den Inhalt auslesen kannst

Delphi-Quellcode:
var
  iTextLen : integer;
  pcBuf   : PChar;

begin
  iTextLen := SendMessage(Handle,WM_GETTEXTLENGTH,0,0) + 1; // +1 für die abschliessende #00
  pcBuf   := AllocMem(iTextLen);
  try
    SendMessage(Handle,WM_GETTEXT,iTextLen,lParam(pcBuf));
    RichEdit.Text := trim(pcBuf);
  finally
    FreeMem(pcBuf,iTextLen);
  end;
end;

delphiUser88 25. Jun 2006 12:45

Re: Window Handle
 
Hallo Christian es funktioniert vielen vielen DANK für deine Hilfe


MFG: DelphiUser

delphiUser88 25. Jun 2006 19:41

Re: Window Handle
 
Hallo Christian mit der Klasse RichEdit20W funktioniert das auslesen.


Wenn ich aber die Klasse ListBox
Delphi-Quellcode:
const
  _sClass = 'ListBox';

auslesen möchte geht es nicht mehr. Woran kann es liegen ?

toms 25. Jun 2006 20:51

Re: Window Handle
 
Auf die Listbox musst du mit LB_GETTEXT zugreifen.

Siehe z.B hier fuer Beispiele.

delphiUser88 25. Jun 2006 22:05

Re: Window Handle
 
DANKE

delphiUser88 26. Jun 2006 02:54

Re: Window Handle
 
Hallo funktioniert doch nicht so recht das auslesen von Klasse ListBox

Delphi-Quellcode:
function HListBox(Handle: THandle; dat: LongWord): Boolean;
stdcall;

const
sKlasse = 'ListBox'; //Klasse ListBox
var
cKlasse,cBuffer: PChar;
iLaenge,iTextlaenge: Integer;


begin


iLaenge := length(sKlasse)+1;
cKlasse := AllocMem(iLaenge);

  try
    if GetClassName(Handle,cKlasse,iLaenge) > 0 then begin
      if trim(cKlasse) = sKlasse then begin

         
          iTextlaenge := SendMessage(Handle,LB_GETTEXTLEN,0,0) + 1;
          cBuffer   := AllocMem(iTextlaenge);

                   try

                   SendMessage(Handle,LB_GETTEXT,iTextlaenge,lParam(cBuffer));
                   Form1.ListBox1.Items.Text := trim(cBuffer);

 

                                        finally
                                        FreeMem(cBuffer,iTextlaenge);
                                        end;

                   Result := false;
                   end;
    end;

        finally
        FreeMem(cKlasse,iLaenge);
        end;

end;

Ich möchte den gesamten Inhalt der Klasse Listbox auslesen über die Klasse "RichEdit20W" und WM_GETEXT geht es. Ich könnte natürlich auch die Items über eine Schleife auslesen und dann in meiner per ListBox1.Items.add schreiben wie es hier beschrieben ist dies ist aber ebenfalls missglückt

Wo liegt der Fehler ?

Christian Seehase 26. Jun 2006 04:27

Re: Window Handle
 
Moin DelphiUser,

Zitat:

Zitat von delphiUser88
Ich könnte natürlich auch die Items über eine Schleife auslesen und dann in meiner per ListBox1.Items.add schreiben...

richtig.
Dazu ermittelst Du mit MSDN-Library durchsuchenLB_GETCOUNT die Anzahl der Einträge, und kannst sie dann in einer Schleife der Reihe nach auslesen.

Der Fehler den Du gemacht hast:
wParam bei MSDN-Library durchsuchenLB_GETTEXT gibt nicht die Grösse des Buffers an, sondern den, nullbasierten, Index des Eintrages, den Du auslesen willst.

delphiUser88 26. Jun 2006 13:10

Re: Window Handle
 
Hallo Christian ersteinmal wieder ein DANKE für die schnelle Hilfe und das du mit mir nicht die Geduld verlierst :-D Ich habe es jetzt so umgebaut das per Schleife die Items ausgelesen werden und anschließend in ListzBox1.Items.Add übertragen werden.Es werden auch Einträge in der ListBox1 geschrieben nur scheinbar sind diese Kryptisch dargestellt oder was auch immer hier noch mal die Funktion vielleicht siehst du den Fehler

Delphi-Quellcode:

function HListBox(Handle: THandle; dat: LongWord): Boolean;
stdcall;

const
sKlasse = 'ListBox'; //Klasse ListBox
var
sTXT: String;
cKlasse,cBuffer: PChar;
iLaenge,iTextlaenge,iCount,i: Integer;


begin


iLaenge := length(sKlasse)+1;
cKlasse := AllocMem(iLaenge);

  try
    if GetClassName(Handle,cKlasse,iLaenge) > 0 then begin
      if trim(cKlasse) = sKlasse then begin


           iCount := SendMessage(Handle, LB_GETCOUNT, 0, 0);

                   try

                   for i := 0 to iCount -1 do
                   begin

                   iLaenge := SendMessage(Handle, LB_GETTEXTLEN, i, 0);
                   GetMem(cBuffer, iLaenge + 1);
                   SendMessage(Handle, LB_GETTEXT, i, Integer(cBuffer));
                   sTXT := StrPas(cBuffer);

                   Form1.ListBox1.Items.Add(sTXT);

                   end;



                                        finally
                                        FreeMem(cBuffer,iTextlaenge);
                                        end;

                   Result := false;
                   end;
    end;

        finally
        FreeMem(cKlasse,iLaenge);
        end;

end;
MFG: DelphiUser

Christian Seehase 26. Jun 2006 14:34

Re: Window Handle
 
Moin DelphiUser,

Was mir auffällt:
Der Typ des Rückgabewertes der Funktion sollte Longbool sein, da das BOOL der Windows-API dem Longbool in Delphi entspricht.
(auch wenn das keine Auswirkungen auf das Füllen der ListBox hat)

Du produzierst aber ein Speicherleck, da Du in der Schleife immer wieder neu Speicher reservierst, ihn aber erst nach der Schleife wieder freigibst.
Der Resourcenschutzblock sollte immer so verwendet werden:

Delphi-Quellcode:
//Resource belegen (hier GetMem).
try
  // Mach was mit der Resource
finally
  // Gib die Resource wieder frei (hier FreeMem)
end;
In der Schleife verwendest Du iLaenge für die einzelnen Items (ausser bei der Freigabe des Speichers), dies sollte wohl aber iTextLaenge sein.
Ausserdem kannst Du Dir das StrPas sparen, und direkt cBuffer hinzufügen.

delphiUser88 26. Jun 2006 15:30

Re: Window Handle
 
Funktioniert auch damit nicht er füllt zwar die ListBox1 also 12 Einträge sind in dem Fremdfenster drin und auch 12 Einträge macht er dann in ListBox1 aber er stellt diese so da


8¥'\
HK&\
8+\
8¥'\%
HK&\%
8¥'\%
HK&\%
HK&\$
8+\$
HK&\$
8+\$
HK&\$


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 2  1 2      

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