Hi,
Hubert verwendet dort den runschell-Befehl, der mit nicht so zusagt, da kein Returnwert daher kommt.
RunShell() kann sehr wohl einen Rückgabewert des aufgerufenen Programmes liefern, hier ein Auszug aus der Hilfe:
Hilfe hat geschrieben:Der Rückgabewert von RunShell() ist der Rückgabewert des gestarteten Befehlsprozessors bzw. des Programms.
Wenn ein Befehlsprozessor/Programm im asynchronen Modus gestartet wird, ist der Rückgabewert immer 0.
Konnte das Programm nicht gestartet werden dann wird -1 zurückgegeben.
Ich nutze diese Funktion um das Standardprogramm zu ermitteln:
Code: Alles auswählen
*-------------------------------------------------------------
#include "Dll.ch"
DLLFUNCTION FindExecutableA( cF, cP, @cE ) USING STDCALL FROM SHELL32.DLL
function GetStandardProgramm(cFile, cPath)
local cExe , nRet, x
cExe := space(256)
nRet := FindExecutableA(cFile, cPath, @cExe)
if nRet <= 32
cExe := ""
else
x := at(chr(0),cExe)
if x > 0
cExe := left(cExe,x-1)
endif
cExe := alltrim(cExe)
endif
return cExe
Dieses speichere ich mit dem kompletten Pfad in einer Variablen, hier cAcrobat.
Genauso speichere ich das Dokument mit Pfad und eventuelle Zeilenparameter in einer Variablen, hier cPDF, so rufe ich RunShell() auf:
Beide Programme bleiben wegen des 3. Parameters voneinander unabhängig, was ich brauche !
Wenn man aber das Resultat (falls das aufgerufene Programm überhaupt eines zurückgibt) benötigt, muss man nur den Aufruf ändern:
Zu den eventuell nötigen Befehlszeilenparametern möchte ich noch das Beispiel meines PDF Dateiaufrufes zeigen.
Acrobat Reader kann über Parameter zu einem Ziel bzw. einer Zielseite springen, andere können das auch, aber die Parameter unterscheiden sich.
Das berücksichtigt meine Funktion:
Code: Alles auswählen
cPDF := chr(34)+cPfadZuPDF+cPDF+chr(34) // in der Befehlszeile müssen " den Namen umschließen, sonst gibt es Probleme mit Blanks !
// Anpassungen je nach Reader - Anzeige mit spezieller Seite: cZiel
do case
case "ACRORD32.EXE" $ upper(cAcrobat) .or. "ACROBAT.EXE" $ upper(cAcrobat)
cPDF := " /A "+chr(34)+"page="+cZiel+chr(34)+" "+cPDF
case "SUMATRAPDF.EXE" $ upper(cAcrobat)
cPDF := cPDF+" -page "+cZiel+" -lang de -title "+chr(34)+"Meine PDF"+chr(34)+" -bgcolor 80ffff -restrict"
// -restrict nur wenn Einschränkungen gewünscht sind.
case "FOXIT" $ upper(cAcrobat)
cPDF := cPDF+" -n "+cZiel+" -NoRegister"
endcase
PS: wenn im Dateinamen Blanks sind, muss dieser in " eingeschlossen werden.