Zeit bis Datei geöffnet wird...



  • Guten Tag,

    Ich versuche mit dem Befehl ShellExecute() eine Datei im Netzwerk zu öffnen. Bis die Datei geöffnet ist, kann man in meinem Programm nichts machen. Das macht den anschein, als ob das Programm abgestürzt ist...

    Nun wollte ich fragen, ob es irgendwie möglich ist, beim Aufruf der Funktion ShellExecute() einen Dialog aufpoppen zu lassen auf dem steht: "Datei XXX wird geöffnet...". Und wenn ShellExecute() die Datei geöffnet hat oder registriert hat, dass es die Datei nicht gibt, soll der Dialog wieder geschlossen werden...

    Geht das, und wenn ja wie?

    Ich hoffe ihr könnt mir dabei helfen. 🙂



  • @Ellek
    poste mal etwas Code... damit man sich ein besseres Bild machen kann 😉



  • Wenn Du bloß einen Dialog zeigen willst (aber es OK ist wenn die Anwendung währenddessen nicht auf Nutzereingaben reagiert), kannst du einen eigenen Dialog erstellen (wie im MFC tutorial gelernt 😉 ) und den mit Create anzeigen:

    {cpp]
    CMyDialog dlg;
    dlg.Create(this); // zeiger auf parent-CWnd
    dlg.ShowWindow(SW_SHOW); // dialog anzeigen falls das nicht schon intern geschieht
    dlg.UpdateWindow(); // sofortiges Zeichnen forcieren

    ShellExecute(...);

    dlg.Close();
    [/cpp]



  • Danke für die Antworten, ich habe es folgendermaßen gelöst:
    (Die Funktion LeseIniWert() holt einen Wert aus einer INI-Datei)

    void CMeinDlg::StandardDateiLaden(CString strPfadDatei, CString strDateiName, CString strAusfuehrenIn, CString strParameter, bool bServerError)
    {
    	CDialog* pDialog;
    	pDialog = new CDialog();
    	pDialog->DoModal();
    	pDialog->Create(IDD_DATEIOEFFNEN, this);
    	pDialog->ShowWindow(SW_SHOWNORMAL);
    	pDialog->UpdateWindow();
    
    	HINSTANCE hDateiValid = ShellExecute(NULL, "open", strPfadDatei, strParameter, strAusfuehrenIn, SW_SHOW);
    	if((int)hDateiValid < 32)
    	{
    		if(bServerError)
    		{
    			if(MessageBox("Die Datei \"" + strDateiName + "\" konnte nicht geöffnet werden!\n\nDie Serverliste wurde zuletzt am " + LeseIniWert("ServerVersionen.ini", "Info", "LastUpdate", "01.01.1970, 00:00:00") + " Uhr von " + LeseIniWert("ServerVersionen.ini", "Info", "UserName", "Unbekannt") + " aktualisiert.\nSoll die Serverliste neu geladen werden?",
    				strProgrammName + " - Fehler",
    				MB_ICONINFORMATION | MB_YESNO) == IDYES)
    			{
    				bServerDochNeuLaden = TRUE;
    				OnProgrammServerneuladen();
    			} // if
    		} // if
    		else
    		{
    			MessageBox("Die Datei \"" + strDateiName + "\" konnte nicht geöffnet werden!",
    				strProgrammName + " - Fehler",
    				MB_ICONERROR);
    		} // else
    	} // if
    
    	pDialog->EndDialog(0);
    } // Funktion
    


  • Ein Hinweis: EndDialog ist für modale dialoge gedacht (geht zwar auch, aber wer weiß ob morgen noch...)



  • Was soll ich denn dann nehmen?
    Ist pDialog->DestroyWindow() gut?



  • Yup, DestroyWindow ist richtig (Close qar quark 🙄 )


Anmelden zum Antworten