Forum: PC-Programmierung Externes Programm/Datei aus MFC aufrufen


von Benedikt K. (benedikt)


Lesenswert?

Kann man eine Datei aus einem MFC Programm heraus aufrufen ? Konkret 
geht es um eine PDF Datei die ich öffnen möchte, sobald man auf einen 
Button/Link klickt.

von Karl H. (kbuchegg)


Lesenswert?

Wenns C-standardkonform sein soll, dann benutzt
du die Funktion system()
Da du mit der MFC sowieso an Windows gebunden bist, kannst
du auch WinExec() oder ShellExecute() benutzen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ja. Eine Möglichkeit wäre es, die Shell den Dokumentenhandler bestimmen 
zu lassen und den kompletten Pfad des Dokuments (hier: Deine PDF-Datei) 
an die Win32-API-Funktion ShellExecute zu übergeben.

Alternativ könntest Du auch mit der Win32-API-Funktion FindExecutable 
selbst bestimmen, welches Programm für die Datei zustädnig ist und das 
dann mit der Win32-API-Funktion CreateProcess und dem Dateinamen/Pfad 
als Parameter aufrufen, der Unterschied zur ersten Variante ist aber 
recht klein.

Ansonsten lässt sich prinzipiell der Adobe Reader auch als 
ActiveX-Control in Dein Programm einbetten, aber das funktioniert eher 
schlecht als recht; das PDF-Control ist ziemlich grützig.


von Benedikt K. (benedikt)


Lesenswert?

Danke, es funktioniert !
Ist es OK, wenn ich als HWND einfach NULL angebe ?

ShellExecute(NULL, "open","help.pdf",NULL, NULL, SW_NORMAL);

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Laut Dokumentation ist

hwnd
  [in] Handle to a parent window. This window receives
  any message boxes that an application produces,
  such as error reporting.

Gibst Du dafür NULL an, kann es passieren, daß die angedeuteten 
Messageboxen ohne Bezug auf Dein Applikationsfenster dargestellt werden. 
Kein staatstragendes Problem, würde ich sagen.

von Matthias (Gast)


Lesenswert?

Schau Dir mal das TeXnicCenter (Latex Editor für Windows) an.
Die haben den Scroreader über DDE eingebunden. Glaub die sourcen für
das Teil sind GPL. Das dürfte eine weitere Lösung sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.