![]() |
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:
zu setzen, aber davon kriegt Aufruf 2 nix mit.
SetEnvironmentVariable
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. ;-) |
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. |
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 |
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. |
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:
Bei ReceiverForm musst Du natürlich Dein Zielfenster eintragen.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; Ich hoffe, das hilft Dir. Lutz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr. |
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