Announcement

Collapse
No announcement yet.

Parameterübergabe bei Abfangen eines doppelten Programmstarts

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Parameterübergabe bei Abfangen eines doppelten Programmstarts

    Hallo zusammen,

    ich habe eine Anwendung geschrieben, die im Windows-Explorer über den "Senden an" Kontextmenüpunkt mit einer Datei gestartet werden soll. Da der Programmstart wegen einiger Datenbankanbindungen sehr lang dauert, möchte ich das Programm in der Systray laufen lassen und bei erneutem "Senden an"-Befehl von dort aus schnell aufrufen.

    Nun mein Problem:
    Das Programm läuft im Hintergrund. Wenn der Anwender nun eine Datei per "Senden an" Verknüpfung an die Anwendung sendet, soll der erneute Start verhindert werden (da gibts ja ein paar Möglichkeiten) aber gleichzeitig der Dateiname an die bereits im Hintergrund laufende Anwendung übermittelt werden.

    Nun die Frage:
    Wie kann ich den zwischen zwei Application einen einfachen Pfadnamen hin und herschicken? Und wie aktiviere ich dann die laufende Anwendung?

    Würde mich freuen wenn mir jemand helfen könnte, oder einfach mal ne Idee ablässt in welcher Richtung ich da rumprobieren müsste.

    Danke schon mal im Voraus
    Heiko

  • #2
    Also ich mache das folgendermaßen: (Es geht bestimmt auch besser aber so klappts)<br>
    Finde heraus ob Dein Programm läuft.<br>
    Kopiere die Parameter in die Zwischenablage<br>
    Schicke der ersten Instanz eine Botschaft. Dies kann die dann Auswerten und sich den Inhalt der Zwischenablage kopieren.<br>
    Ich mache das ganze über Postmessage, um nicht auf die erste Instanz warten zu müssen. Dadurch hast Du natürlich den Nachteil, daß Du die Zwischenablage misbrauchst. Ich denke die JCL hat so etwas auch schon dabei ( http://delphi-jedi.org/ ) aber irgendwie verstehe ich nicht ganz den Ablauf des Senden und empfangen in deren JclAppInst.pas

    Comment


    • #3
      <b>Zweite Instanz</b><br>
      (1) per Mutex prüfen, ob bereits eine Instanz läuft (Fenstertitel sind kein gute Idee)<br>
      (2) eine systemweit eindeutige Nachricht registrieren (RegisterWindowMessage)<br>
      (3) an alle Hauptfenster die Nachtricht versenden<br>
      <b>Erste Instanz</b><br>
      (4) Hauptfenster antwortet mit seinem Fenster-Handle<br>
      <b>Zweite Instanz</b><br>
      (5) übergebene Parameter in einen Daten-Block packen<br>
      <i>(wie auch immer, empfehle durch #0 separierte Strings mit #0#0 abgeschlossen)</i><br>
      (6) Datenblock an das Fensterhandle schicken (SendMessage, WM_COPYDATA)<br>
      <b>Erste Instanz</b><br>
      (7) die empfangen Daten innerhalb der ersten Instanz kopieren und (oder sofort) verabeiten<br>
      (8 optional) die erste Instanz in den Vordergrund bringen<br>
      <i>(SetForegroundWindow führt nicht immer zum gewünschten Ergebnis, SE/ME/2K)</i><br>
      <b>Zweite Instanz</b><br>
      (9) zweite Instanz beendet sich<br>
      <b>Entwickler</b><br>
      (10 zwingend notwendig) Freuen, daß alles geklappt hat.<p>

      eine fertige Unit, die (fast) alles kapselt gibts mit Beispiel unter:<br>
      http://www.bendlins.de/nico/delphi/OneInst.zip
      <p>
      Gruß Nic

      Comment


      • #4
        Dank euch für eure Antworten. Die Zwischenablagengeschichte würde sicher funktionieren, aber da ich im Explorer rumwerke und da auch Datein Kopiert werden, würde das sicher zu Verwirrungen bei den Anwendern führen.

        Die OneInst Unit enthält das, was ich gesucht habe. Das Verpacken der ParamStr war mir nicht so klar und das handling insgesamt. Ist ja echt gut kommentiert, und bei der ein oder anderen Formulierung konnte ich mich eines Schmunzelns nicht erwehren. Danke nochmal!

        Ich hoffe nun wird bald Punkt 10 eintreten ;-)!

        Tschaui Heik

        Comment

        Working...
        X