Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi aufrufen einer Funktion eines schon laufenden Programmes (https://www.delphipraxis.net/27987-aufrufen-einer-funktion-eines-schon-laufenden-programmes.html)

Susanne 18. Aug 2004 10:22


aufrufen einer Funktion eines schon laufenden Programmes
 
Hallo,

ich habe eine Datei daten.xxx und wenn ich diese Anklicke soll ein bestimmtes Programm 'DatenRecherchieren.exe' aufgerufen werden und eine bestimmte Funktion aufgerufen werden.

Das Programm läuft zu dem Zeitpunkt des Anklickens der Datei schon. Bisher wird dieses Programm noch einmal gestartet.

Wie kann ich eine bestimmte Funktion aus einem Programm aufrufen, das schon läuft? Ich hoffe, ihr könnt mir weiterhelfen

Gruss
Susanne


P.S.: Nützt mir dieser Teil in meinem Programm vielleicht?
Delphi-Quellcode:
Initialization
  mHandle:=CreateMutex(nil,True,'Programmname');
  if GetLastError=ERROR_ALREADY_EXISTS then
    Halt;

finalization
  if mHandle<>0 then
    CloseHandle(mHandle)

Phoenix 18. Aug 2004 10:27

Re: aufrufen einer Funktion eines schon laufenden Programmes
 
Meinst Du so ähnlich wie z.B. bei Word?

Ein Word-Dokument öffnen startet Word, wenn Word schon gestartet ist, öffnet Word das Dokument.

Das ist relativ einfach: Erstens muss Dein programm den Dateinamen als Parameter annehmen. Dann kannst Du eine Verknüpfung zwischen Deinem Dateityp und Deinem programm machen. Somit wird Dein programm schon geladen, wenn Du so eine Datei öffnest.

Dann schau mal, wie man verhindern kann, das mehrere Instanzen eines Programmes laufen. An der Stelle wirds etwas tricky: Anstelle das Programm sofort zu schliessen wenn es schon läuft, musst Du dem anderen Programm eine Nachricht schicken (guck mal unter Sendmessage), und den Dateinamen an das bereits laufende Programm senden (dessen handle hast Du ja bereits vom gucken ob es schon läuft).

Dann musst Du nur noch auf so eine Nachricht reagieren und dann die Datei öffnen.

Shaman 18. Aug 2004 10:33

Re: aufrufen einer Funktion eines schon laufenden Programmes
 
Ich hab mal eine Komponente gemacht, die mehrere Instanzen verhindert und die Parameter an die erste Instanz übergibt. Ich kann sie dir schicken, wenn Du willst.

Gruss
Shaman

Luckie 18. Aug 2004 10:40

Re: aufrufen einer Funktion eines schon laufenden Programmes
 
Schick sie nicht, sondern poste sie besser hier.

Shaman 18. Aug 2004 10:44

Re: aufrufen einer Funktion eines schon laufenden Programmes
 
Stimmt, noch besser :wink: . Hab sie nur nicht bei mir. Werde sie wahrscheinlich am Abend reinstellen.

Gruss
Shaman

Phoenix 18. Aug 2004 10:46

Re: aufrufen einer Funktion eines schon laufenden Programmes
 
Und wenn schon, dann bitte gleich in die CodeLib und hier einen Verweis reinsetzen :zwinker:

Susanne 18. Aug 2004 10:58

Re: aufrufen einer Funktion eines schon laufenden Programmes
 
das wäre ganz toll wenn du mir die Komponente geben würdest, egal ob gepostet oder gemailt, danke schon mal

Susanne



und noch mal anders gefragt: wenn ich jetzt z.B. eine Fremde Anwendung habe, die läuft und diese soll für einen bestimmten Dateityp registriert sein.

In meiner Dokumentation, dass die Endung zzz für die fremde Anwendung als dde-Server registriert wäre.

Wenn ich nun die Datei per Doppelklick starte will, soll eine Recherche mit den in der Datei enthaltenen Daten durchgeführt werden. Mit rechtem Mausklick habe ich der Datei gesagt, sie soll mit der fremden Anwendung geöffnet werden.

Eingeloggt habe ich mich schon als User und bekomme dann die Meldung, dass die Login-Komponente nicht reagieren würde, habe ich dann was falsch gemacht, oder liegt es am fremden Programm?

Shaman 18. Aug 2004 20:03

Re: aufrufen einer Funktion eines schon laufenden Programmes
 
OK, hier die Komponente

Gruss
Shaman


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