Anwendung wird zum 2ten mal gestartet -> 1. Anwendung soll reagieren



  • Hallo,

    ich kann meine Anwendung mit Argumenten starten z.B.:

    myproject.exe -abcdef

    Angenommen meine Anwendung läuft schon (s.o.) und ich öffne nochmal die selbe Anwendung z.B. durch einen Link folgender Maßen:

    myproject.exe -ghijkl

    dann soll die Anwendung nicht nocheinmal gestartet werden, sondern die "neuen" Argumente der ersten Anwendung übergeben werden.

    Wie kann ich dies realisieren? Muss ich nach dem Prozessnamen suchen oder dem Fenstertitel und dann einen Message schicken und die neue Anwendung schließen?

    Danke im Voraus
    teaseme



  • http://www.marquardtnet.info/cecke/quickies.1/1_quicky_19.html

    in dem Beispiel wird das Fenster in den Vordergrund gebracht. Mit diesem Code sendest du dann die Daten an das Fenster

    if(strlen(cmdLine)!=0)
    			{
    			COPYDATASTRUCT cds;
             cds.dwData=NULL;
    			cds.cbData=strlen(cmdLine)+1;
    			cds.lpData=cmdLine;
    			SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cds);
    			}
    

    Das Programm muss dann auf WM_COPYDATA reagieren. Dazu in der Headerdatei des Formulars unter public folgendes aufnehmen:

    public: // Anwenderdeklarationen
    __fastcall TMain(TComponent* Owner);

    // Messagehandling deklarieren:
    BEGIN_MESSAGE_MAP
    	MESSAGE_HANDLER(WM_COPYDATA, TWMCopyData, WmCopyData)
    END_MESSAGE_MAP(TForm)
    

    und dazu die WMCOPY Routine in der CPP Datei des Formulars

    void __fastcall TMain::WmCopyData(TWMCopyData& Message)
    {
    String slCmdLine=(char*)Message.CopyDataStruct->lpData;
    //mach was damit
    }
    //---------------------------------------------------------------------------
    

Anmelden zum Antworten