Dateipfad mit Drag&Drop oder "Datei öffnen" und WinExecute aber mit Parametern



  • Hallo beisammen,

    ich steh hier vor nem kleinem Problem bei dem mir mein "schlaues" Bauch "In 21 Tagen MFC programmieren" nicht weiter hilft! 🙄

    Ich will nur ein einfaches Dialog erstellen in dem man zwei Dateien eingibt, diese z.B. entweder mit Drag&Drop in zwei Felder reinzieht oder mit ner Eingabe "Datei öffnen" mit der man dann browsen kann um die Datei anzugeben (wie bei standard Windows Anwendungen halt).

    Danach soll ein Programm (was ich selber in C++ geschrieben hab), welches 2 Argumente erwartet mit der Pfadangabe dieser zwei Dateien (als Argumente) aufgerufen werden, z.B.: ich klicke auf Button "LOS" daraufhin ruft mein Dialog das Programm: c:\hallo\programm.exe mit den zwei Argumenten "C:\hallo\hier\datei1.txt" und "C:\woanders\datei2.txt" auf, wie in einer Kommandozeile halt.

    Wie lässt sich denn sowas am einfachsten realisieren??? Ich hätt das Programm einfach mit WinExec ausgeführt, aber wie übergeb ich da die zwei Dateipfade als Argumente an die Funktion. Meine Lösungsideen führen mich irgendwie nicht zum Ziel und ich konnte durch die Suche und die FAQ auch nicht schlauer werden... 😞

    Vielen Dank für euere Hilfe, Tips und Tricks!!! 🤡



  • Du brauchst CFileDialog zum "browsen".
    Und CreateProcess um Dein 2. Programm zu starten. Entsprechend die ausgewählten Dateien als Parameter übergeben.


  • Mod

    Wenn Du Drag&Drop für die Edit Controls möchtest musst Du DragAcceptFiles verwenden und eine eigene CEdit Klasse ableiten die WM_DROPFILES versteht.



  • Ah, super vielen Dank. Die Funktion CreateProcess kannte ich nicht, auf CFileDialog hätt ich selber kommen können! 🙄 😃

    Auf in die MFC! 😋



  • So hab das jetzt so bissl probiert, aber ich komm mit den Variablen die ich zur Argumentübergabe benötige nicht zurecht... Mein Code sieht bis jetzt so aus:

    void CBauteillisternvergleichDlg::OnOK() 
    {
    	// TODO: Zusätzliche Prüfung hier einfügen
    	CreateProcess("C:\\Programme\\WinZip\\WINZIP32.EXE", "m_oldFile m_newFile");
    	CDialog::OnOK();
    }
    
    void CBauteillisternvergleichDlg::OnAltedatei() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	CFileDialog m_ldFile(TRUE);
    	if(m_ldFile.DoModal() == IDOK)
    	{
    		//Dateinamen ermitteln 
    		m_oldFile = m_ldFile.GetFileName();
    		//Dialog aktualisieren
    		UpdateData(FALSE);
    	}
    }
    
    void CBauteillisternvergleichDlg::OnNeuedatei() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	CFileDialog m_ldFile(TRUE);
    	if(m_ldFile.DoModal() == IDOK)
    	{
    		//Dateinamen ermitteln
    		m_newFile = m_ldFile.GetFileName();
    		//Dialog aktualisieren
    		UpdateData(FALSE);
    	}
    
    }
    

    Natürlich will WinZip keine zwei Argumente, war auch nur zu testzwecken, aber wo muss ich die zwei Variablem m_oldFile und m_newFile deklarieren, sind ja Strings bzw. müssen Strings sein. Oh je... 😞



  • So jetzt hab ich noch zwei Eingabefelder eingebunden, in denen jeweils der Pfad der ersten bzw. zweiten Datei erscheint, so hab ich über nen Umweg die zwei Variablen deklarieren können. Aber ob es da auch einen direkten Weg gibt würd mich schon interessieren...


Anmelden zum Antworten