AGB  ·  Datenschutz  ·  Impressum  







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

Interaktion zweier Programme

Ein Thema von Mongfice · begonnen am 25. Mär 2009 · letzter Beitrag vom 25. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
Mongfice

Registriert seit: 26. Feb 2009
40 Beiträge
 
Delphi 7 Professional
 
#1

Interaktion zweier Programme

  Alt 25. Mär 2009, 10:04
Moin,
ich hab da mal ne kleine Frage:

Wie stelle ich es am besten an, dass zwei Programme miteinander interagieren können?
Das Szenario dass mir vorschwebt ist folgendes:
Im Programm A gibt es z.B. einen Button, der beim Anklicken ein Fenster in Programm B öffnet (oder falls dieses noch nicht läuft es startet und dann das Fenster öffnet).

Mir ist bisher nur eingefallen entweder Startparameter an Programm B zu übergeben - was aber deshalb nicht geht, weil Programm B ggf. auch schon laufen soll und nicht jedesmal beendet werden soll, bevor man den Button in Programm A an anderer Stelle erneut betätigt - oder es über eine Datenbanktabelle zu machen, die Programm B in regelmäßigen Abständen auf Änderungen überprüft und dann ggf. darauf reagiert. Letzteres gefällt mir aber eigentlich auch nicht, weil ich schon sehr häufig (schätze mal in max. 1 Sekunden-Intervallen) diese Tabelle überprüfen müsste, was wohl den DB-Server und das Netzwerk etwas zu stark belasten dürfte, vorallem wenn ich das sagen wir mal an 20 Rechnern gleichzeitig mache..

Hat jemand evlt. nen Tipp was man sonst noch machen könnte und/oder Erfahrungen damit? Was bieten sich denn noch für Möglichkeiten? Am liebsten wäre mir eigentlich ne rein lokale Lösung, da Programm A und B beide eigentlich nur auf dem gleichen Rechner interagieren müssen, nicht über den Server oder das Netz mit anderen Instanzen des jeweiligen Programms auf anderen Rechnern.

Gruß
Mongfice
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: Interaktion zweier Programme

  Alt 25. Mär 2009, 10:07
Schau mal hier: http://www.delphipraxis.net/internal...t.php?t=143363
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Mongfice

Registriert seit: 26. Feb 2009
40 Beiträge
 
Delphi 7 Professional
 
#3

Re: Interaktion zweier Programme

  Alt 25. Mär 2009, 10:31
Mhh, als Datenaustausch hab ich das bisher nicht gesehn... hast wohl recht. Vorallem weil der "Austausch" nur einseitig wäre.. Deshalb wohl auch mit der Suche nicht gefunden *schäm*

Aber klar, ich könnte ja ggf. verschiedene Daten übergeben, wenn ich doch verschiedene Fenster öffnen will, oder nur ein festes Datum nach dem Motto, wenn du so ne Message bekommst, dann mach mal... Oder ich könnte recht einfach mehr Daten übergeben, wenn ich irgendwann nochmal "zusätzliche" Daten brauche.
Selbst wenn ich ne Leere Message dieses Typs schicke müsste ich darauf ja mit "FormXY.Create" reagieren können...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Interaktion zweier Programme

  Alt 25. Mär 2009, 11:10
Wenn es nur ein paar Parameter sind, dann geht es wohl am einfachsten mit MSDN-Library durchsuchenWM_COPYDATA. Ein Beispiel findest du auf meier Seite: http://www.michael-puff.de/Developer...COPYDATA.shtml
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Mongfice

Registriert seit: 26. Feb 2009
40 Beiträge
 
Delphi 7 Professional
 
#5

Re: Interaktion zweier Programme

  Alt 25. Mär 2009, 11:23
Ja, das ist genau das, was in dem Post den DeddyH gelinkt hat auch schon drin steht, nur nen anderes Beispiel.
Hatte aus dem Thema eben auch die Messages als beste Möglichkeit rausgesucht, trotz der dort geposteten (zugegeben berechtigten) Einwände. Muss jetzt nur nochmal rausbekommen ob ich in Programm A überhaupt das Abschicken einer Message so einfach einbauen kann, da mir das Programm z.Z. noch nicht vorliegt.. Fürchte mal ich werd da eh nen kleines Tool schreiben müssen, dass ich jedesmal aus Programm A starte um die Message an Programm B zu schicken... Mal schaun...
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#6

Re: Interaktion zweier Programme

  Alt 25. Mär 2009, 16:09
Stichworte:
CreateFileMapping
MapViewOfFile

MfG
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Interaktion zweier Programme

  Alt 25. Mär 2009, 16:39
Ich nehme liebend gerne NamedPipes. Andernfalls, falls du etwas Plattformunabhängiges haben willst empfehle ich dir noch TCP/IP.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
461 Beiträge
 
Delphi XE4 Professional
 
#8

Re: Interaktion zweier Programme

  Alt 25. Mär 2009, 16:53
.. ich hätte hier ein paar Zeilen, die den "Sendmessage"-Teil betreffen...

HTH

Erich


Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    Memo1: TMemo;
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
    procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}




// How to send Data to my Software







procedure TForm1.SpeedButton1Click;
var

  aCopyData: TCopyDataStruct;
  p: PChar;

begin


  p := 'Hello World'; // die zu übertragenden Daten

  with aCopyData do begin
    dwData := 4; // kann als Senderidentifikation verwendet werden
    cbData := StrLen(p) + 1; // Sendespeicherlänge terminieren..
    lpData := p;
  end;

  SendMessage(FindWindow('TForm1', nil), WM_COPYDATA, Longint(Handle),Longint(@aCopyData));


  // http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx = FindWindow
  // http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx = Sendmessage
  // http://msdn.microsoft.com/en-us/library/ms649011(VS.85).aspx = WM_COPYDATA
  // http://msdn.microsoft.com/en-us/library/ms649010(VS.85).aspx = TCopyDataStruct

end;



procedure TForm1.WMCopyData(var Msg: TWMCopyData);

var x :integer;
    s :PChar;

begin
  StrLCopy(s, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);
  x := (Integer(Msg.CopyDataStruct.dwData));
  memo1.Lines.Append ('Nachricht:'+s+' von SenderID:'+ inttostr(x));

end;



end.
Erich Wanker - for life:=1971 to lebensende do begin ..
  Mit Zitat antworten Zitat
Mongfice

Registriert seit: 26. Feb 2009
40 Beiträge
 
Delphi 7 Professional
 
#9

Re: Interaktion zweier Programme

  Alt 25. Mär 2009, 16:59
Mhh, ja, die NamedPipes klingen auch ganz gut.
TCP/IP würd ich persönlich nur nehmen, falls wirklich der Fall eintreten sollte, dass ich ne Kommunikation mit einem Prozess auf einem anderen Rechner brauche. Aber an sich sollte das eigentlich ausgeschlossen sein.

Muss nach wie vor erstmal zusehen, dass ich genau rausbekomme welche "Eingriffe" ich in Programm A überhaupt machen kann... Das bleibt im Augenblick noch das große Rätsel - und das wohl auch für die nächsten Tage.

Bis dahin muss ich mich mit kleinen selbstgebastelten Test-Sendern zufrieden geben, aber der Test mit den Messages war schonmal zufriedenstellend. Vorteil der Messages ist natürlich, dass es wirklich extrem einfach ist. Und solange ich nicht mehr als nur ne einfache ID brauche, die ich übertrage denke ich ist das die beste Lösung, statt den Overhead des Öffnens und Schließens einer Pipe für grob geschätzte 5 Zeichen zu machen oder das ganze in nen TCP-Paket zu packen und das an sich selbst zu schicken...
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#10

Re: Interaktion zweier Programme

  Alt 25. Mär 2009, 17:10
TCP/IP ist nicht ganz plattformunabhängig. Unter Windows bzw. schlechten Terminalservern führt das schon gerne mal zu Problemen, da diese nicht die Ports vervielfachen, sondern über alle Terminalsessions die gleichen Ports verwenden. Da kommuniziert Programm A der einen session gerne mal mit Programm B der anderen Session -.-

Das ist aber mit neueren Citrix Versionen nicht mehr aktuell. Was die Windows-Terminalserver dazu sagen, weiss ich grad nicht.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06: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