Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr (https://www.delphipraxis.net/157808-programm-fuer-schliessung-eines-programes-der-taskleiste-rechts-neben-der-uhr.html)

marco1204 25. Jan 2011 19:22

Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Ich würde gern ein Delphiprogramm erstellen, mit dem ich ein Programm schließe. Das Problem: es soll ein Programm untern rechts in der Spalte sein, also keins was offen ist, sondern halt dort neben der Uhr (kp wie man das nennt)
Ich habe es soweit geschafft:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellApi, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Application.Handle,'open','TripoX Keybinder 0.1a.exe',''{Parameter},'Keybinder\',SW_SHOW);
  Panel1.Visible:=true
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SendMessage(FindWindow(nil,'TripoX Keybinder 0.1a.exe'),WM_CLOSE,0,0);
  Panel1.Visible:=false;
end;

end.
Zur Erklärung:
Bei Button1Click wird das Programm gestartet, welches sich in einem Unterordner befindet. Funktioniert Einwandfrei
Bei Button2Click will ich, dass es das Programm wieder schließt, doch es ist ja nicht offen sondern nur in der Leiste als Symbol unten Rechts.
Wie lautet der Befehl, das er von dort ein Programm schließt?
Danke im Vorraus

Sir Rufo 25. Jan 2011 19:29

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Das ist der Tray somit such mal nach TrayIcon

marco1204 25. Jan 2011 19:34

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
und wie gehts das??
Mit:SendMessage(TrayIcon(nil,'TripoX Keybinder 0.1a.exe'),WM_CLOSE,0,0); gehts irgendwie nicht.
und Google hilft irgendwie auch ni.

Sir Rufo 25. Jan 2011 19:38

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Zitat:

Zitat von marco1204 (Beitrag 1077294)
und wie gehts das??
Mit:SendMessage(TrayIcon(nil,'TripoX Keybinder 0.1a.exe'),WM_CLOSE,0,0); gehts irgendwie nicht.
und Google hilft irgendwie auch ni.

Ja das doofe google, nie steht da was, da bimmelt auch keine Glocke und vorgekaut wird da auch nix :roll:
Bei Google suchenDelphi TrayIcon
und hier im Forum auch nix
Hier im Forum suchenTrayIcon

cookie22 25. Jan 2011 19:53

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Zitat:

Zitat von marco1204 (Beitrag 1077291)
Ich würde gern ein Delphiprogramm erstellen, mit dem ich ein Programm schließe. Das Problem: es soll ein Programm untern rechts in der Spalte sein, also keins was offen ist, sondern halt dort neben der Uhr (kp wie man das nennt)
Ich habe es soweit geschafft:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellApi, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Application.Handle,'open','TripoX Keybinder 0.1a.exe',''{Parameter},'Keybinder\',SW_SHOW);
  Panel1.Visible:=true
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SendMessage(FindWindow(nil,'TripoX Keybinder 0.1a.exe'),WM_CLOSE,0,0);
  Panel1.Visible:=false;
end;

end.
Zur Erklärung:
Bei Button1Click wird das Programm gestartet, welches sich in einem Unterordner befindet. Funktioniert Einwandfrei
Bei Button2Click will ich, dass es das Programm wieder schließt, doch es ist ja nicht offen sondern nur in der Leiste als Symbol unten Rechts.
Wie lautet der Befehl, das er von dort ein Programm schließt?
Danke im Vorraus

Nur weil du das Fenster nicht siehst, heißt es ja nicht, dass es nicht da ist. Das Fenster ist unsichtbar solange die Anwendung im Tray ist.

marco1204 25. Jan 2011 20:02

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
ja das ich das fenster nis ehe ist ja klar. Problem ist bloß, das es trotzdem mit dem befehl den ich momentan hbe nicht funktioniert

Aphton 26. Jan 2011 00:18

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Liefert ShellExecute kein Handle zum Fenster? :idea:

Edit: Oder schlimmstenfalls per CreateProcess & TerminateProcess arbeiten

vergessen 26. Jan 2011 03:29

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Ist "TripoX Keybinder 0.1a.exe" von Dir?

Falls JA, kannst Du mit FindWindow nicht nur nach der Titelzeile des (unsichtbaren) Fensters suchen lassen!

Schau' Dir mal die Hilfe zu FindWindow GENAUER an ;-)

Und "SendMessage" lieber nicht benutzen, besser "PostMessage"!

Statt "WM_CLOSE" würde ich eher "SC_CLOSE" verschicken ;-)

So ungefähr in der Art: PostMessage(AnDasGefundeneHandle, wm_syscommand, sc_close, 0);

MfG

sx2008 26. Jan 2011 09:31

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Und dann gäbe es auch noch PsKill.exe von Microsoft (ehemals SysInternals).
Damit kann man recht bequem alle möglichen Programme abschiesen.
Es würde ausreichen PsKill über eine simple Batchdatei zu starten ohne Delphi zu bemühen.

Sowieso kann man mit Delphi vieeeeel interessantere (und produktivere) Dinge machen, als nur einen Prozess zu killen.
Das Destruktive kann man ruhig einer Batchdatei überlassen.

SirThornberry 26. Jan 2011 11:59

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Zitat:

Zitat von vergessen (Beitrag 1077358)
Und "SendMessage" lieber nicht benutzen, besser "PostMessage"!

Noch besser ist PostThreadMessage. PostMessage und SendMessage funktionieren nicht zwischen Desktops. Und dann hat man das Problem wie bei Acrobat Reader wo sich nichts tut wenn meine eine PDF per Doppelklick öffnen will nur weil auf einem anderen Desktop bereits der Acrobat Reader geöffnet ist. Nichtmal in dem bereits geöffnetem Reader wird die Datei geöffnet.

marco1204 26. Jan 2011 14:12

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
alles klar danke, werd mein glück mal versuchen
erstatte dann bericht

Sir Rufo 26. Jan 2011 15:16

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Oder mal mit dem WinSpy versuchen
http://www.delphipraxis.net/15388-wi...6-09-08-a.html

marco1204 26. Jan 2011 17:49

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
das funkt leider alles nicht,
weder: PostMessage(AnDasGefundeneHandle, wm_syscommand, sc_close, 0);
noch irgendwas anderes. diese KliiTask undWinSpy sind ja alles andere Programme, ich will ja ein Programm selber machen, (bzw. eher mit eurer Hilfe) und das layout auch selber gestalten können.
Hat nicht jemand nen konkreten Code, den ich dort einfüge um ein Programm zu schliesen welches unten rechts in der Taskleiste iegt (genauer: einen Keybinder) was ich einfach per Onclick schließe?
wäre mir seeehr hilfreich
danke

DeddyH 26. Jan 2011 18:34

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Nichts gegen Herumprobieren, aber man sollte schon in Grundzügen wissen, was man tut. "Funkt nicht" hilft uns allen nicht weiter. Bist Du sicher, dass Du auch das richtige Handle hast? Hast Du Dir WinSpy einmal angeschaut? Dann solltest Du bemerkt haben, dass das Programm Dir sogar entsprechenden Code generieren kann.

marco1204 26. Jan 2011 20:46

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
mein programm sieht so aus:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellApi, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Application.Handle,'open','TripoX Keybinder 0.1a.exe',''{Parameter},'Keybinder\',SW_SHOW);
  Panel1.Visible:=true
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SendMessage(FindWindow(nil,'TripoX Keybinder 0.1a.exe'),SC_CLOSE,0,0);
  Panel1.Visible:=false;
end;

end.
starten funktioniert ja... aber das beenden das programmes, da tut sich nichts.
ich weiß ja aucf welchem pfad das programm liegt, also hier zumbeispiel unter dem unterordner /Keybinder/
aber hiflt das was? also geht das auch iwie das er die datei auf dem pfad beendet?
habe bissher keinen weg gefunden

Luckie 26. Jan 2011 21:06

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
SC_CLOSE ist keine Nachricht, sondern der WParam vom WM_SYSCOMMAND. Aber der Beispielcode wurde hier schon gepostet.

Sir Rufo 26. Jan 2011 21:34

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Zitat:

Zitat von marco1204 (Beitrag 1077505)
das funkt leider alles nicht,
weder: PostMessage(AnDasGefundeneHandle, wm_syscommand, sc_close, 0);
noch irgendwas anderes. diese KliiTask undWinSpy sind ja alles andere Programme, ich will ja ein Programm selber machen, (bzw. eher mit eurer Hilfe) und das layout auch selber gestalten können.
Hat nicht jemand nen konkreten Code, den ich dort einfüge um ein Programm zu schliesen welches unten rechts in der Taskleiste iegt (genauer: einen Keybinder) was ich einfach per Onclick schließe?
wäre mir seeehr hilfreich
danke

Da du dir nicht die Mühe machst und den WinSpy ausprobierst, kommst du halt auch nicht in den Genuss der Erkenntnis,
dass WinSpy dir
a) zeigt was für Fenster so auf deinem System sichtbar und unsichtbar rumschwirren mit allen von Dir benötigeten Informationen
b) du damit ausprobieren kannst, ob das besagte Fenster zu schließen geht
c) du von WinSpy direkt den Delphi-Code präsentiert bekommst, den du dann in deine Anwendung übernehmen kannst
(da ist ein Script-Modul dabei, wo du so lange mit rumexperimentierst, bis alles so ist wie gewünscht und dann schwupps in die Anwendung)

Aber stimmt, das müsste man ja wieder selber erarbeiten :roll:

EWeiss 27. Jan 2011 06:15

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Eigentlich wollte ich ja nicht Antworten aber man sieht doch das marco1234 keine Ahnung bzw.. über kein Grundwissen verfügt.
Ist weiter nicht schlimm dafür ist ja ein Forum da..
Aber ich glaube er sucht jemand der es für ihn macht.

Zitat:

Nichts gegen Herumprobieren, aber man sollte schon in Grundzügen wissen, was man tut.
Sehe ich genau so.. Sorry

gruss

alphaflight83 27. Jan 2011 09:08

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Etwas OT, aber:
Danke für den Link zu WinSpy, das Ding kannte ich noch gar nicht. wirklich nützliches Tool.

marco1204 27. Jan 2011 16:02

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
hm. okay anscheinend ist es doch nciht so einfach wie ich gedacht hätte.
denn ihr scheint ja irgendwie azuh nicht so richtig zu wissen was zu utn ist, bzw scheint es größere arbeit zu sein. ich will icht das ihr alles für mich macht, ich brauchte bloß hilfe für DIESE EINE ZEILE.
aber naja
ich weiß jetzt zuumindest, das ich mit fragen wohl eher nichtmehr hier her kommen werde
danke

Luckie 27. Jan 2011 16:06

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Wir wissen ganz genau, was zu tun ist. Nur du verweigerst jegliche Eigeninitiative und nimmst unsere Ratschläge und Hilfe nicht an.

marco1204 27. Jan 2011 16:17

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
hm achso... na dann
jeglich eigenaktivität ist zwar nicht war, ich probiere eure ratschläge ja aus, aber wenn sie nicht funktionieren?
zum Beispiel jetzt hab ich dieses Windows Spy
soo
geh ich bei ansicht auf anzeige>Prozesse.
da find ich das auch. aber was nun? wenn ich anklicke keine reaktion.
wenn ich das selbe mit nem normalen offenen fenster mache z.B firefox seh ich da die infos. aber der vodegenerator bleibt immer grau und ich kann ihn nicht öffnen. wie lege ich fest, das er mir nen code generiert, um diesen einen prozess zu schließen?

DeddyH 27. Jan 2011 16:56

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Geh auf "Fenster auswählen" und ziehe den Button bei gedrückter Maustaste auf das Fenster, das Du haben willst. Anschließend auf "Tools - Codegenerator" und Du bekommst den Code zum Ermitteln des Fensters. Somit kannst Du das Handle ermitteln, an das Du dann WM_SYSCOMMAND mit SC_CLOSE schicken kannst. Reicht das als Zusammenfassung?

marco1204 27. Jan 2011 17:13

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
ja danke das klingt schon seeeeeehr gut super
aber ein problem. wohin und wie schreibe ich dann diesen WM_SYSCOMMAND
also ganz unten an die datei? und wie sieht dann diese zeile aus mit dem WM_SYSCOMMAND?

DeddyH 27. Jan 2011 17:19

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Ich zitiere Dich mal:
Zitat:

Delphi-Quellcode:
SendMessage(FindWindow(nil,'TripoX Keybinder 0.1a.exe'),SC_CLOSE,0,0);

So, das Handle bekommst Du mit dem von WinSpy generierten Code. Und da schickst Du jetzt WM_SYSCOMMAND hin mit SC_CLOSE als wParam.

[edit] Wobei: wenn Du das Programm selbst startest, kannst Du auch ganz gezielt diese Message an alle Fenster des Prozesses schicken, aber das hatten wir in Deinem anderen Thread ja bereits erwähnt. [/edit]

marco1204 27. Jan 2011 18:08

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('AutoIt v3','AutoIt v3');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'Edit', nil);
    if wndChild <> 0 then
    begin
      ShowMessage('65702' + IntToStr(wndChild));
      FlashControl(wndChild); // internal function
      SendMessage('65702') SC_CLOSE,0,0):
    end;
  end;
end;
end.
so müsste das doch okay sein oder?
65702 ist das handle des programmes sagt mit WinSpy
FlashControl und SC_CLOSE,0,0; und das semikolon beim 3. end von unten wird mir rot unterstrichen ;-(
Why?

DeddyH 27. Jan 2011 18:21

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Schau Dir mal MSDN-Library durchsuchenSendMessage an, da wird nirgends ein String erwartet.

Luckie 27. Jan 2011 18:39

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
SendMessage('65702') SC_CLOSE,0,0):
Ich habe mal alle Fehler markiert.

Und genau einen Beitrag über deinem steht, was man mit SC_CLOSE machen soll. So was meine ich.

marco1204 27. Jan 2011 18:53

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
hm okay da reichen wohl meine fähigkeiten mal wieder nicht aus
"Und da schickst Du jetzt WM_SYSCOMMAND hin mit SC_CLOSE als wParam."
wie schicke ich etwas als wParam.?

Luckie 27. Jan 2011 18:57

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Du hast dir die Hilfe, die sogar verlinkt wurde, nie angeguckt, kann das sein?

marco1204 27. Jan 2011 19:06

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
doch habe ich aber ich werde nicht schlau daraus

DeddyH 27. Jan 2011 19:10

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Ich weiß nicht mehr, wie ich da noch helfen soll :|

Luckie 27. Jan 2011 19:18

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Ein letzter Versuch:
Code:
LRESULT WINAPI SendMessage(
  __in HWND hWnd,
  __in UINT Msg,
  __in WPARAM wParam,
  __in LPARAM lParam
);

Sir Rufo 27. Jan 2011 19:20

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
@Luckie noch mehr vorkauen bitte

SendMessage( <--- Funktionsname
__in HWND hWnd, <--- Handle vom Fenster/Form
__in UINT Msg, <--- Message (was soll getan werden)
__in WPARAM wParam, <--- ein Parameter mit Namen wParam
__in LPARAM lParam <--- ein Parameter mit Namen lParam
);

Sir Rufo 27. Jan 2011 19:31

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Liste der Anhänge anzeigen (Anzahl: 1)
Man kann alles zunächst im WinSpy ausprobieren und wenn dann alles funktioniert in den eigenen Code übernehmen.

Allerdings sollte man wissen, dass sowas wie
Delphi-Quellcode:
ShowMessage
oder
Delphi-Quellcode:
FlashControl
nichts mit dem Schließen des Fensters zu schaffen hat.
Somit kann man das auch gleich rauslassen.

Also mit dem folgenden Code kann ich ganz hervorragend das Download-Fenster von Firefox schließen.

Wenn man das geschafft hat, dann sollte das Copy/Paste in die eigene Anwendung noch zu schaffen sein.

DeddyH 28. Jan 2011 07:32

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Letzter Versuch (nicht großartig getestet):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  NameDesProgramms = 'TripoX Keybinder 0.1a.exe';
var
  StartupInfo: TStartupInfoA;
  ProcessInfo: TProcessInformation;
begin
  ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_SHOW;
  if CreateProcessA(nil, PAnsiChar(NameDesProgramms), nil, nil, false,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo,
    ProcessInfo) then
    try
      PID := ProcessInfo.dwProcessId; //PID ist eine private DWORD-Variable
    finally
      CloseHandle(ProcessInfo.hProcess);
      CloseHandle(ProcessInfo.hThread);
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);

  function EnumWindowsProc(Wnd: HWnd; aPID: DWORD): BOOL; stdcall;
  var
    hProcess: DWORD;
  begin
    GetWindowThreadProcessID(Wnd, hProcess);
    if hProcess = aPID then
      PostMessage(Wnd, WM_SYSCOMMAND, SC_CLOSE, 0);
    Result := true;
  end;

begin
  if PID <> 0 then
    EnumWindows(@EnumWindowsProc, PID);
end;

marco1204 28. Jan 2011 18:48

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
okay der letzte code von deddyH sieht ganz gut aus und auch beim einfügen wenig rot
ich füge nur den button2onclick ein, da ich ja das öffnen schon hinbekommen habe.
doch er makiert mir immer diese 'PID' Rot. woran liegt daS?

Sir Rufo 28. Jan 2011 19:00

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Zitat:

Zitat von marco1204 (Beitrag 1078026)
okay der letzte code von deddyH sieht ganz gut aus und auch beim einfügen wenig rot
ich füge nur den button2onclick ein, da ich ja das öffnen schon hinbekommen habe.
doch er makiert mir immer diese 'PID' Rot. woran liegt daS?

Ich möchte dir ja nicht zu nahe treten, aber bist du farbenblind? so auf dem grün-kanal?

marco1204 28. Jan 2011 19:32

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
dazu möchte ich mich jetzt nicht äußern xD
ja aber was ist damit gemient "//PID ist eine private DWORD-Variable"
ist damit gemaint ich kann das weglassen?

Luckie 28. Jan 2011 19:36

AW: Programm für schließung eines Programes in der Taskleiste rechts neben der Uhr
 
Meinst du die ist umsonst da? Wie wäre es, wenn du sie einfach mal deklarieren würdest?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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-2025 by Thomas Breitkreuz