Announcement

Collapse
No announcement yet.

Programmstart mit Parameter

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

  • Programmstart mit Parameter

    Hallo

    Umgebung: Delphi 5

    Ich starte ein Programm mit einer Datei als Parameter. In der Datei stehen best. Informationen über einen Datensatz einer Tabelle. Das Programm wird gestartet und dieser Datensatz wird in einem Eigenschaftsfenster angezeigt.
    Soweit kein Problem.

    Problem:
    Bei jedem Start wird eine Exe gestartet: Jeder Programmstart dauert (in meinem Fall sehr lang) und verbraucht natürlich immer wieder Speicher.

    Frage:
    Wie kann ich prüfen ob diese Anwendung bereits läuft, und wenn ja die Informationen der Datei (Parameter) an diese übergeben?

    Ich habe bereits mit DDE experimentiert, aber keine sinnvollen Ergäbnisse erzielen können.

    Ciao Herbert

  • #2
    Es geht bei der fraglichen EXE doch wohl um eine Eigenentwicklung?

    Dann gibt es eine zweigeteilte Lösung:<br>
    (1) Verhindere beim Programmstart ein erneutes Starten der EXE.<br>
    (2) Wenn es sich um einen erneuten Start handelt, dann sorge dafür, dass die ursprüngliche Instanz aktiviert wird und die Arbeit gemäß Parameter ausführt.

    Für (1) gibt es auf dem Freeware-Markt Komponenten wie OnlyOnce; ich habe es direkt im Quelltext der DPR realisiert:

    var Handle1 : LongInt; Handle2 : LongInt;

    begin<br>
    Application.Initialize;<br>
    { unterscheide:<br>
    ** Programmentwicklung: nicht prüfen, ob EXE bereits aktiv ist<br>
    ** beim Anwender: EXE darf nur einmal gestartet werden }<br>
    if FindWindow('TAppBuilder',nil) = 0 // Hauptfenster von Delphi nicht gefunden<br>
    then Handle1 := FindWindow('T_vsHaupt',nil) // Hauptformular der eigenen EXE<br>
    else Handle1 := 0;<br>
    if handle1 = 0<br>
    then begin<br>
    // normalen Programmstart durchführen mit automatisch erzeugten Formularen und Datenmodulen<br>
    // ggf. auch mit einem SplashForm<br>
    Application.Title := 'VS';<br>
    Application.CreateForm(T_dSys, _dSys);<br>
    Application.CreateForm(T_vsHaupt, _vsHaupt);<br>
    Application.Run;<br>
    end<br>
    else begin<br>
    {Obtain handle to owner of Main Form. This is the application window}<br>
    Handle2 := GetWindow(Handle1,GW_OWNER);<br>
    {Hide application window to avoid zoom effect}<br>
    ShowWindow(Handle2,SW_HIDE);<br>
    {Restore application window}<br>
    ShowWindow(Handle2,SW_RESTORE);<br>
    { hier müsste wohl (2) die Bearbeitung des Parameters der ersten Instanz eingefügt werden }<br>
    if Application.Params[1] = '/hm'<br>
    then ...<br>
    {Set Main Form as foreground window}<br>
    SetForegroundWindow(Handle1);<br>
    end;<br>
    end.<br>

    Für (2) habe ich noch keine Erfahrung oder Lösungsvorschläge. Es müsste wohl darum gehen, dass die zweite Instanz an die erste Instanz eine Botschaft schickt, dass erneut der Parameter ausgewertet werden soll. Nach dem Inhaltsverzeichnis gibt es ausführliche Erläuterungen vermutlich bei: Andreas Kosch, Delphi Win32-Lösungen.

    Viel Erfolg! Jürge

    Comment

    Working...
    X