Datei mit ShellExecute in neuer Programminstanz öffnen
-
Hallo Leute,
Ich lasse aus einem Programm von mir heraus eine Datei laden. Jetzt ist mir es zufällig passiert, dass die Software, die mit dieser Datei geladen wird, bereits mit einer bearbeiteten Datei geöffnet war und ich die Abfrage bekam, ob ich speichern will. Dieser Fall trat bisher nicht auf, da es sich um eine sehr spezifische Software handelt, die man nur sehr selten benötigt. Es könnte aber durchaus sein, dass man das geöffnete Projekt mit dem zu öffnenden vergleichen will, welshalb ich eine neue Programminstanz benötige.
Diese Spezialsoftware kann mehrfach parallel ausgeführt werden.Ich lade die zu öffnende Datei ganz normal mit [c]ShellExecute[/c].
Wie kann ich nun sicherstellen, dass die Datei mit einer neuen Programminstanz der Spezialsoftware geöffnet wird und nicht mehr aktuell laufenden?
Vielen Dank und Grüße,
Jonson
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Gar nicht. Das Verhalten bestimmt alleine die Anwednung durch die Einträge in der Registry.
Regeln sind:
- SDI Anwednungen starten immer eine neue Instanz
- MDI Anwednungen laden das neue Dokument immer in eine besetehenden Instanz
-
OKay, danke schonmal.
Aber ich kann ja künstlich eine neue Instanz der Software starten. Kann ich per ShellExecute bsp. oder irgendwie sonst dann der neuen Instanz der Software mitteilen, dass genau diese Instanz die Datei öffnen soll?
Mehrfache Instanzen parallel laufen zu lassen funktioniert einwandfrei.
Nur eben wenn bereits eine läuft und ich ShellExecute ausführe, wird die Datei natürlich in der laufenden Instanz verarbeitet.
Danke für Eure Hilfe
-
Vielleicht sollte ich nochmal spezifizieren:
Wenn Du das Dokoument mit dem Verb "open" angibst hast Du keinen Einfluß.Ansonsten kannst Du die Exe mit den entsprechenden Parametern starten und das wars. Dazu musst Du aber jede EXE kennen und wissen wie man mit ihr ein Dokumnet öffnet.
Es gibt keine Methode ShellExecute zu sagen: Nimm diese Instanz!
Intern wird ein DDE Server bei MDI Anwednungen verwendet. Welche Instanz der findet ist IMHO Lotto, wenn mehrere gestartet sind. Sowit ich weiß ist es meistens die erste.
-
Okay, alles klar, dann werd ich mich wohl mal an den Hersteller wenden müssen.
Vielen Dank Martin, kenne mich in dieser Materie leider weniger aus.
Viele Grüße,
Jonson
-
Ich weiß nun die Startparameter, muss bei cmd einfach direkt den Pfad zur Datei anhängen.
Kann ich das per ShellExecute irgendwie mit dranhängen, dass er selbst die Anwendung, die für diese Endung registriert ist, herausfindet und neu mit diesen Parametern startet oder muss ich den genauen Pfad zur Anwendung kennen (was in meinem Fall möglich ist) und das Ganze beispielsweise mit CreateProcess starten?
Vielen Dank,
Josnon
-
Ob Du ShelleExecute oder CreateProcess benutzt ist eigentlich egal.
Ich meide CreateProcess i.A.
-
Mit CreateProcess kann man keine Prozesse starten, welche ein UAC Prompt erwarten!
IMHO sollte man immer ShellExecute verwenden!
-
Hat funktioniert, habe es jetzt so gemacht:
ShellExecute(NULL, "open", PFAD-ZUM-PROGRAMM, PFAD-ZUR-DATEI, NULL, SW_SHOWNORMAL);
Jetzt wird immer eine neue Instanz der Software mit dem Pfad zur Datei als Startparameter geladen.
Vielen Dank für die Hilfe