pdf datei per Runshell öffnen [erledigt]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

pdf datei per Runshell öffnen [erledigt]

Beitrag von Benz »

Auch auf die Gefahr hin, das dieses Thema schon x-mal durchgekaut wurde, würde ich jetzt doch noch einmal gerne fragen.
Und zwar würde ich gerne eine pdf-datei, die im gleichen Pfad wie das Programm liegt, per Standard-pdf-Reader öffnen.
Das Problem ist meiner Meinung nach das Öffnen mit dem Standard pdf-Reader, da z.B. der Adobe Reader als Ordnernamen die Versionsnummer mit drin hat und dadurch die
exe nicht direkt angesteuert werden kann.

Code: Alles auswählen

RunShell( "Handbuch.pdf","C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe")
Zuletzt geändert von Benz am Mi, 21. Aug 2013 8:54, insgesamt 1-mal geändert.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: pdf datei per Runshell öffnen

Beitrag von Jan »

Code: Alles auswählen

FUNCTION ShellOpenFile(cFile)

LOCAL lSuccess
LOCAL Retvar := .F.
/*----------------------------------------------------------
  Created from ContactUs.PRG
  Posted to Alaska Generic NG 3/15/01
  By Anand K Gupta  Sun, 24 Dec 2000
----------------------------------------------------------- */
#define SW_HIDE             0
#define SW_NORMAL           1
#define SW_SHOWMINIMIZED    2
#define SW_SHOWMAXIMIZED    3
#define SW_MAXIMIZE         3
#define SW_SHOWNOACTIVATE   4
#define SW_SHOW             5
#define SW_MINIMIZE         6
#define SW_SHOWMINNOACTIVE  7
#define SW_SHOWNA           8
#define SW_RESTORE          9
#define SW_SHOWDEFAULT      10
#define SE_ERR_NOASSOC 31

lSuccess := DllCall("SHELL32.DLL", ;
                    DLL_STDCALL, ;
                    "ShellExecuteA", ;
                    AppDesktop():GetHWND(), ;
                    "open", ;
                    cFile,;
                    NIL, ;
                    CurDir(), ;
                    SW_NORMAL)  // SW_MAXIMIZE

DO CASE
   CASE lSuccess > 32                  // Aufruf erfolgreich
        Retvar := .T.

   CASE lSuccess = SE_ERR_NOASSOC      // Keine verknüpfte Anwendung

        // Falls ShowOpenWithDialog = True, wird der Dialog
        // "Öffnen mit" für diese Datei angezeigt:
        // Shell "RunDLL32 shell32.dll,OpenAs_RunDLL " & Filename

        DllCall("SHELL32.DLL", ;
                DLL_STDCALL, ;
                "OpenAs_RunDLL", ;
                AppDesktop():GetHWND(), ;
                NIL, ;
                cFile, ;
                NIL, ;
                CurDir(), ;
                SW_NORMAL)

        //  Die Auswahlmöglichkeit wird als Erfolg gewertet:
        Retvar := .T.
   OTHERWISE
        // ShellExecute war erfolglos.
        // Boolean-Standardwert False zurückgeben
        Retvar := .F.
ENDCASE

RETURN Retvar
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: pdf datei per Runshell öffnen

Beitrag von brandelh »

Wenn man es mit RunShell() machen möchte, dann muss man sowohl die EXE als auch die PDF Datei mit kompletten Pfadangaben angeben.
Es gibt unzählige Beispiele inkl. einer Funktion, die zu jedem Programm das Standardprogramm (nicht jeder hat den Acrobat ;-) ) aufruft.

Code: Alles auswählen

   cPfad := "x:\My Pfad\" // genauer Pfad zur PDF Datei
   cPDF := "Beispiel.PDF" 
...
   if file(cPfad+cPDF)
      if ! file(cAcrobat)
         cAcrobat := GetStandardProgramm(cPDF, cPfad)
      endif
      runshell(cPfad+cPDF,cAcrobat,.t.)
   endif


return

*--------------------------------------------------------------------------
function GetStandardProgramm(cFile, cPath)
   local cExe := ChrR(0,260) // MAX_PATH is 260
   if @shell32:FindExecutableA(cFile, cPath, @cExe) < 32
      cExe := ""
   else
      cExe := TrimZ(cExe)
   end
return cExe
Gruß
Hubert
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: pdf datei per Runshell öffnen

Beitrag von Benz »

schonmal danke :) Wenn ich die Funktion SELLOPENFILE benutze kommt immer die Fehlermeldung, die ich im Anhang beigefügt habe.
An was könnte das liegen? Bzw. muss ich die aufgerufene DLL mit ins Programmverzeichnis kopieren?

(Zeile 137 ist das hier:

Code: Alles auswählen

   lSuccess := DllCall( "SHELL32.DLL"  , DLL_STDCALL, ;
            "ShellExecuteA", AppDesktop():GetHWND(), "open", cPath+cFile,;
            NIL, CurDir(), SW_NORMAL )  // SW_MAXIMIZE
)
Dateianhänge
x.png
x.png (23.75 KiB) 3209 mal betrachtet
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: pdf datei per Runshell öffnen

Beitrag von Martin Altmann »

Moin,
Du musst natürlich die entsprechenden .ch-Datei(en) mit einbinden.
Im Fall der DLL-Aufrufe brauchst Du:

Code: Alles auswählen

#include "DLL.CH"
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: pdf datei per Runshell öffnen

Beitrag von Benz »

Morgen ;)
Martin du bist ein Genie! :D Danke.
Mal wieder das wichtigste vergessen. :angry5:
Antworten