Frage zu ShellExecuteA [erledigt]

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Frage zu ShellExecuteA [erledigt]

Beitrag von Herbert »

Hallo Gemeinde
Folgendes klappt:

Code: Alles auswählen

   cExe := "blabla.tif"
   cParam := ""
   cDir := "X:\blah"
   nRet := ShellExecuteA(0,"open",cExe,cParam,cDir,SW_NORMAL)
Foglendes nicht, Fehlermeldung "Kann Bild nicht öffnen"

Code: Alles auswählen

   nRet := FindExecutableA(cFn, cDir, @cExe)  // Standardprogramm holen und in cExe abspeichern
   cParam := "blabla.tif"
   cDir := "X:\blah"
   nRet := ShellExecuteA(0,"open",cExe,cParam,cDir,SW_NORMAL)
warum? Was macht denn der Doppelklick (hier auf die .Tif-Datei) im Explorer genau?
Zuletzt geändert von Herbert am Mi, 08. Sep 2010 19:42, insgesamt 1-mal geändert.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA

Beitrag von Koverhage »

Hallo Herbert,

ist cfn un d cDir zu dem Zeitpunkt gefüllt ?
Du fragst nRet nicht ab, lass Dir doch mal das Ergebnis anzeigen <= 32 Fehler, bzw. kein Programm
Gruß
Klaus
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA

Beitrag von Herbert »

Nein,nein, alles OK, jede Variable hat seinen Wert. Das nRet ist Ok.
das cExe liefert das Defaultprogramm (inkl. Pfad)

Wenn su es so sehen willst:

Code: Alles auswählen

ShellExecuteA(0,"open","C:\Windows\irgendeindefaultgrafikprogramm.exe","blabla.tif","W:\xbase",SW_NORMAL)
Ich dachte, das Auseinandernehmen von Programm, Laufwerk und zu öffnende Datei sei seriöser. Und so eben die Meldung des irgendeingrafikprogramm.exe, dass es das Bild nicht öffnen kann.
Doppelklick im Explorer oder eben die erste Variante funktionieren ja.

Dehalb meine Frage, warum dies so nicht gehen soll.
Grüsse Herbert
Immer in Bewegung...
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Frage zu ShellExecuteA

Beitrag von georg »

Hallo, Herbert -


hast Du mal versucht, anstelle nur des Dateinamens Pfad+Dateiname zu übergeben? Ich kann mir vorstellen, dass das irgendeingrafikprogramm.exe überfordert ist, nur aus dem Dateinamen alleine heraus zu schliessen, wo sich das zu öffnendes Objekt befindet.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA

Beitrag von Herbert »

Ja, habe ich auch probiert, ändert aber nichts.
Das FindExecutrableA holt ja sowieso das Defaultprogramm, welches der mitgegebenen Dateierweiterung gehört.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA

Beitrag von Koverhage »

Herbert,

ich hatte vor kurzem auch ein ähnliches Problem.
Schau doch mal in HBPRINTPDF bzw. in den Samplesnach, dort gibt es auch so eine Funktion.
Bei mir hat sich rausgestellt, das die Dateiendung fehlte.
Also Datei. anstatt Datei1.pdf
Gruß
Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Frage zu ShellExecuteA

Beitrag von georg »

Herbert hat geschrieben:Ja, habe ich auch probiert, ändert aber nichts.
Das FindExecutrableA holt ja sowieso das Defaultprogramm, welches der mitgegebenen Dateierweiterung gehört.
Hallo, Herbert -


FindExecutableA mag ja mit dem Dateinamen allein zurechtkommen, um die Dateierweiterung und darüber das zuständige Programm zu ermitteln. Aber ob das zuständige Programm seine Startparameter so erwartet, bezweifle ich. Aber vielleicht drücke ich mich ja auch nur unglücklich aus ...

Hast Du mal versucht, das Programm über die Befehlseingabe mit den Parametern wie im Programm aufzurufen?


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA

Beitrag von Herbert »

Koverhage hat geschrieben:Herbert,
ich hatte vor kurzem auch ein ähnliches Problem.
Schau doch mal in HBPRINTPDF bzw. in den Samplesnach, dort gibt es auch so eine Funktion.
Bei mir hat sich rausgestellt, das die Dateiendung fehlte.
Also Datei. anstatt Datei1.pdf
Meine zwei Beispiele zu Beginn zeigen, dass die Werte alle in Ordnung sind.

Genau daher hatte ich ja die Idee, die Funktion "professioneller" zu machen.
Hubert verwendet dort den runschell-Befehl, der mit nicht so zusagt, da kein Returnwert daher kommt.

Nun gut, ich wollte eigentlich nur wissen, ob jemand dieses Verhalten kennt.
Eine Lösung habe ich ja, die mir einfach nicht so gefällt.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Frage zu ShellExecuteA

Beitrag von AUGE_OHR »

Herbert hat geschrieben:Nein,nein, alles OK, jede Variable hat seinen Wert. Das nRet ist Ok.
was kommt den bei dir raus ?
Herbert hat geschrieben:

Code: Alles auswählen

ShellExecuteA(0,"open","C:\Windows\irgendeindefaultgrafikprogramm.exe","blabla.tif","W:\xbase",SW_NORMAL)
hm ... die 0 am Anfang sollte doch das Handle sein und das kann nicht 0 sein bei AppDesktop():GetHWND()

ich nutze es so:

Code: Alles auswählen

FUNCTION SHELLOPENFILE(cPath, 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", cPath+cFile,;
            NIL, CurDir(), SW_NORMAL ) 

   DO CASE

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

   // modification by Auge & Ohr
   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, cPath+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
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von AUGE_OHR »

Herbert hat geschrieben:

Code: Alles auswählen

   nRet := FindExecutableA(cFn, cDir, @cExe) 
...  
   nRet := ShellExecuteA(0,"open",cExe,cParam,cDir,SW_NORMAL)
man müsste mal Günter frage, aber "zeigen" nicht beide DLL Call´s auf die selbe "Stelle" ?
muss man in solchen Fällen nicht vorher "aufräumen" bevor man den 2nd Dll Call macht ?
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von Tom »

Völlig off topic:

@Jimmy:
aber "zeigen" nicht beide DLL Call´s auf die selbe "Stelle" ?
Es gibt keinen Plural-Apostroph! Nicht einmal im Englischen! Du machst das ständig, und ich find's (<- hier ist er richtig, weil: Auslassungszeichen) schrecklich! Der Genitiv-Apostroph im Deutschen wird bei Eigennamen (Uschi's Nagelstudio, Helmut's Currybude) geduldet (allerdings nicht von mir) und ist ansonsten nur bei Substantiven, die auf "s", "ss", "ß", "tz", "z" oder "x" enden, korrekt - allerdings dann ohne nachfolgendes "S" (also Fritz' Tankstelle oder Alex' Bistro).

:angry4:

Sorry, ich musste das jetzt mal loswerden. :wink:
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von Martin Altmann »

Ach Tom,
nun lass un's doch unsere Unarten durchgehen - und sieh's un's nach, wenn wir mit den Sprachen schöpferisch umgehen.
Schließlich leben Sprachen durch den Gebrauch - und was heute falsch ist, kann schon morgen richtig sein.
Auch wenn Dein Haar sich sträubt - sein's tut es vielleicht nicht.

In diesem Sinne,
Martin's Meinung zu dem Thema 8)
: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.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von Tom »

und was heute falsch ist, kann schon morgen richtig sein
Dann schreib's auch morgen. :badgrin:

Spaß beiseite und wieder zurück. War ja mit einem dicken Augenzwinkern gesagt. Ich wollt's nur einfach mal gesagt haben. 8)
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von AUGE_OHR »

Tom hat geschrieben:Genitiv ... Substantiven :wink:
Genitiv, Dativ, Akkusativ ... das habe ich nie richtig "verstanden" ...

Apostroph ... hm wenn´s nicht vom FF "Wörterbuch" an-gemeckert wird (weil es es nicht kennt ? Dll Call´s ) ...
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von Jan »

Mal abgesehen, das die ganzen Verdrehungen von Jimmy seine Beiträge oftmals schwer lesbar machen (und Tom zitiert ja nur einen kleinen Teil davon): Selbst WENN manche Sachen morgen erlaubt sein werden, ich würde das nicht mitmachen. Ich kann mich ja schon an mind. die Hälfte der Änderungen der letzten Rechtschreibreform nicht gewöhnen. Doppel s am Ende eines Wortes, die ganzen Änderungen von ph->f, usw. *schüttel*. Ohne mich! Vielleicht mal irgendwann in 50 Jahren, aber jetzt nicht. Nein!

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von Tom »

Hallo, Jimmy.

Ich wollte Dich nicht anmeiern. :)

"Calls" ist Plural, also Mehrzahl. Da benutzen nicht einmal die Amis Auslassungszeichen (Aber leider viele Deutsche - ich habe in Supermärkten schon Schilder gesehen, mit denen für "CD's" geworben wurde oder "Info's" verbreitet werden sollten. Mein bisheriges Highlight war der Aufsteller vor einer Bar, auf dem "Abend's Cocktail's" stand). Richtig ist das nur (im Englischen) beim Genitiv, also im sog. "Wesfall" oder "Wessenfall". Etwas gehört jemandem oder zu etwas anderem. "John's suit" oder "My brother's house". Das ist im Deutschen - auch bei Spracheinbürgerungen, also Anglizismen wie "Download" - allerdings falsch, mit einer Ausnahme, nämlich Wörtern, die auf "s", "z" usw. enden. Geduldet wird es (jedenfalls laut Duden) bei Eigennamen, also eben "Uschi's Nagelstudio" oder so. Müssen muss man das an dieser Stelle glücklicherweise nicht. :wink: Falsch ist es bei "meines Bruder's Haus". Und nur weil man englische Wörter benutzt, gehört da trotzdem kein Apostroph hinein. "Calls" ist die Mehrzahl von "Call" und "CDs" ist die Mehrzahl von "CDs" und "DLLs" ist die Mehrzahl von "DLL" und "Downloads" ist die Mehrzahl von "Download". Selbst im Wesfall (die Außenspuren der CDs) ist es niemals richtig. Nur im Englischen. Und bei Uschi.

Aber ich halte jetzt die Fresse. Versprochen.
Herzlich,
Tom
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von Herbert »

Da schliesst der Schweizer den Thread und nun folgen die Einträge :banghead:

Jimmy: Ich krieg ne 42.
Wenn du keinen Handle übergibst, dann "gehört" das geöffnete Programm nicht mehr zu meiner App. Ist zu betrachten, wei ich einen Doppelklick im Explorer mache. Das Ding gehört dem Windows-Desktop.
Aus der Doku:
hwnd Identifies the parent window. This window receives any
message boxes an application produces (for example, for error
reporting).
lpszParams Points to a null-terminated string specifying parameters
passed to the application when the lpszFile parameter
specifies an executable file. If lpszFile points to a string
specifying a document file, this parameter is NULL.
LpszDir Points to a null-terminated string specifying the default
directory.
Heisst, dass eigentlich alles richtig gefüllt ist, aber eben das Bild im Parameter mitgegeben nicht geöffnet werden kann (die Fehlermeldung erscheint auch ohne hwnd-Angabe)
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von brandelh »

Hallo,

zu dem Thema hat Jimmy in der Wissensbasis was veröffentlicht:

:arrow: http://www.xbaseforum.de/viewtopic.php? ... llexecutea
pszParams Points to a null-terminated string specifying parameters
passed to the application when the lpszFile parameter
specifies an executable file. If lpszFile points to a string
specifying a document file, this parameter is NULL.
LpszDir Points to a null-terminated string specifying the default
directory.
Ist das eine Fehlermeldung ?

wenn ja, dann meint er dass "lpszFile" leer ist. Könnte es sein dass die Anzahl der Parameter nicht stimmt (verrutscht ...) ?
Wichtig bei allen Aufrufen auf fremde Programme ist, dass man immer komplette Pfade ab dem Laufwerk nutzt,
weder auf das aktuell eingestellte Verzeichnis noch auf automatische Verzeichnisse ist verlass.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von brandelh »

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:

Code: Alles auswählen

RunShell( cPDF, cAcrobat, .t. )
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:

Code: Alles auswählen

xReturn := RunShell( cPDF, cAcrobat, .f. )
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.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA

Beitrag von brandelh »

Herbert hat geschrieben:Ja, habe ich auch probiert, ändert aber nichts.
Das FindExecutrableA holt ja sowieso das Defaultprogramm, welches der mitgegebenen Dateierweiterung gehört.
bist du dir da sicher, dass die ENDUNG reicht ?

Nach meiner Erfahrung muss die Datei die man zur Ermittlung der EXE übergibt tatsächlich existieren und man muss diesen Namen mit komplettem Pfad übergeben.
Gruß
Hubert
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von Herbert »

Parameter ist die Datei inkl. Erweiterung. Wie sollte sonst das aufrufende Programm die Datei holen können?
Der Pfad ist ein eigener Parameter.
Mit Erweiterung meinte ich den vorgang von Windows, welches in der Registry die Erweiterung sucht und das zugeordnete Defaultprogramm holt. Dieser String enthält das auszuführende Programm inkl. Pfadangabe (in meinem Beispiel in die Varialbe cExe abgespeichert). Das funktioniert tadellos.

Hubert, Das Zitat war wie dort von mir betitelt ein Auszug aus der Doku zu ShellexecuteA (ab MSDN)

Nochmals für alle:
Ich habe keine Fehlermeldung in Form eines Absturzes.
Nochmals: Das Defaultprogramm zur gegebenen Datei (inkl. deren Erweiterung) wird korrekt gefunden und auch ausgeführt.
Einzig der Parameter (in meinem Fall die Grafikdatei) wird vom Defaultprogramm nicht gefunden. Ich habs mit mehreren Defaultprogrammen versucht, mit demselben Ergebnis. Daher die Meldung "Kann Grafikdatei nicht öffnen" (oder ähnlich).
Variationen in den Parametern brachte nichts (z.B. Datei inkl. Pfad, mit oder ohne Pfad im passendem Parameterfeld).

Runshell scheint zu funktionieren, warum denn das Shellexecute nicht?

Und nochmals meine zu Beginn gestellte Anfrage zum Nachlesen:
Das hier funktioniert (und verwende ich momentan)

Code: Alles auswählen

       cExe := "blabla.tif"
       cParam := ""
       cDir := "X:\blah"
       nRet := ShellExecuteA(0,"open",cExe,cParam,cDir,SW_NORMAL)
Und dies hier nicht, was mir sachlich korrekter erscheint aber mit der Meldung, dass die Datei nicht gefunden wird.

Code: Alles auswählen

       nRet := FindExecutableA(cFn, cDir, @cExe)  // Standardprogramm holen und in cExe abspeichern
       cParam := "blabla.tif"
       cDir := "X:\blah"
       nRet := ShellExecuteA(0,"open",cExe,cParam,cDir,SW_NORMAL)
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von azzo »

Hallo Herbert,

hatte selbst Problem mit shellececute. Vielleicht hilft das auch mit tif-Dateien:
http://msdn.microsoft.com/en-us/library ... S.85).aspx

lpParameters
[in] If lpFile specifies an executable file, this parameter is a pointer to a null-terminated string that specifies the parameters to be passed to the application. The format of this string is determined by the verb that is to be invoked. If lpFile specifies a document file, lpParameters should be NULL.

So, you can't pass parameter if you open a .doc.

But, if you open a exe you can, try this
shellexecute(,"open","winword.exe","LETTER.DOC /MMACRO")
Gruß
Otto
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Frage zu ShellExecuteA [erledigt]

Beitrag von Herbert »

Hallo Otto
Ja, das erklärt das Problem.
Also Shellexecute oder den Ansatz 1 nehmen, indem im executable die Bilddatei angegeben wird.
Grüsse Herbert
Immer in Bewegung...
Antworten