Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zwei Instanzen, die voneinander wissen... (https://www.delphipraxis.net/142775-zwei-instanzen-die-voneinander-wissen.html)

Marco Steinebach 3. Nov 2009 15:42


zwei Instanzen, die voneinander wissen...
 
Hallo zusammen,
nein, keine Angst, wie man das doppelte Aufrufen eines Programmes verhindert, weiß ich. ;-)
Aber, ich habe folgendes Problem:
Aufruf 1, wird gestartet, und läuft.
Aufruf 2 wird gestartet, und soll folgendes tun:
Wenn Aufruf 1, also die erste instanz, nix kritisches macht, übergibt er, per Message, eine evtl. beim Aufruf übergebene Datei an die Erste Instanz, und schließt sich wieder.
Macht Aufruf 1 gerade was Kritisches, in meinem Falle Dateien konvertieren, soll Aufruf 2 das mitkriegen und sich mit einer Fehlermeldung schließen.
Und genau am "mitkriegen" scheitere ich.
Ich dachte, beim start des konvertierens eine Umgebungsvariable via
Delphi-Quellcode:
SetEnvironmentVariable
zu setzen, aber davon kriegt Aufruf 2 nix mit.
Wie löst man soetwas???
Für Hilfe wäre ich sehr dankbar.
Einen freundlichen Gruß
Marco
p.s.: es müßte was sein, was auf jedenfall verschwindet, wenn der Aufruf 1-Prozess stirbt, nicht, daß man das Programm nie wieder starten kann. ;-)

himitsu 3. Nov 2009 15:54

Re: zwei Instanzen, die voneinander wissen...
 
Jedes Programm bekommt von seinem Paps (Owner) den EnvironmentBlock vererbt
(es sei den der Owner, also der, welcher dieses Programm startet, gibt einen anderen Block an)

Deine Änderung machst du nur in der eigenen Kopie dieses Blocks und andere bekommen es nicht mit.

Marco Steinebach 3. Nov 2009 16:30

Re: zwei Instanzen, die voneinander wissen...
 
Hallo,
okay, verstanden. Aber wie macht man's dann?
Ich kann ja schlecht eine Datei anlegen. Das ginge zwar, weil der 2 prozess prüfen kann, ob's die gibt, aber wenn der erste abstürzt, bleibt die Datei da und dann ist schluß mit starten. ;-)
Viele Grüße
Marco

himitsu 3. Nov 2009 16:37

Re: zwei Instanzen, die voneinander wissen...
 
Du sendest per SendMessage einfach deine Meldung

Im anderen Programm wird diese IMMER entgegengenommen und wenn das Programm grad was "kritisches" macht, dann gibt es z.B. 0 zurück, ansonsten 1.

Nun kann das 2. Programm reagieren
- 1: der Erste hat es angenommen
- 0: neee, der will grad nicht


Eventuell auch SendMessageTimeOut, falls das Erste grad nicht antworten kann.
Kommt da 'ne 0 oder der Timeout schlägt zu, dann kommt halt deine Fehlermeldung an den User.

Delphianer 3. Nov 2009 20:15

Re: zwei Instanzen, die voneinander wissen...
 
Hallo,

Messages zwischen zwei Instanzen zu verschicken ist nicht das Problem, aber Daten.

Da ich das auch benötigt habe, bin ich auf WM_COPYDATA gestoßen, das genau das macht.

Delphi-Quellcode:
 
var
  FileName: string;
  CopyDataStruct: TCopyDataStruct;
  ReceiverHandle: THandle;
begin
  ...
  CopyDataStruct.dwData := 0;
  CopyDataStruct.cbData := 1 + Length(FileName) * SizeOf(Char);
  CopyDataStruct.lpData := PChar(FileName);

  ReceiverHandle := FindWindow(PChar('TReceiverForm'), PChar('ReceiverForm'));
  if ReceiverHandle > 0 then
  begin
    SendMessage(ReceiverHandle, WM_COPYDATA, 0, Integer(@CopyDataStruct));
  end;
  ...
end;
Bei ReceiverForm musst Du natürlich Dein Zielfenster eintragen.

Ich hoffe, das hilft Dir.

Lutz


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