Dateien mit Standardprogramm öffnen

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Dateien mit Standardprogramm öffnen

Beitrag von Wolfgang Ciriack »

Irgendwo hat schon jemand einmal gepostet, wie man beliebige Dateien mit dem in Windows hinterlegtem Standardprogramm aus Programm heraus starten kann, ich finde es aber nicht mehr. Kann mir da jemand helfen ?
Viele Grüße
Wolfgang
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:

Beitrag von Martin Altmann »

Hallo Wolfgang,
z.B. so:

Code: Alles auswählen

ort := "url.dll,FileProtocolHandler " + textpfad + "\" +katalog + "\" + katalog + ".rtf"
RunShell( ort, 'Rundll32.exe' )
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.
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Auf die Schnelle habe ich folgende Lösung mittels des Windows-API:

Code: Alles auswählen


DLLFUNCTION FindExecutableA( cFileExtention, cPath, @cExe ) USING STDCALL FROM SHELL32.DLL
DLLFUNCTION ShellEcuteA( nWinHandle,  cMode, cExe, cFile, cDir, nShow) USING STDCALL FROM SHELL32.DLL


#define SHELL_OPEN      "open"
#define SHELL_PRINT     "print"
#define SHELL_EXPLORE   "explore"

// ShowWindow Modes
#define SW_HIDE             0
#define SW_SHOWNORMAL       1
#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


FUNC RunDefaultShellProg(cFile, cMode, nShow)
LOCAL cPath :=""
Local  cExe := space(256)
LOCAL nPos, nRet

   nPos := rat("\", cFile)
   if nPos > 0
      cPath := substr(cFile, 1, nPos)
      cFile := substr(cFile, nPos+1)
   endif

   nRet := FindExecutableA(cFile, cPath, @cExe)
   if nRet <= 32
      RETURN nRet
   endif

   nRet := ShellExecuteA(GetApp():getHWnd(), cMode, cExe, cFile, cPath, nShow)
RETURN nRet

Rückgabewert:
Scheitert die Funktion z.B. wegen ungenügender freier Systemresourcen, so ist der Rückgabewert "0".
Existiert für die angegebene Datei keine verknüpfte Anwendung, gibt die Funktion den Wert "31" zurück.
Konnte die angegebene Datei nicht gefunden werden, so wird "2" zurückgegeben.
Wird das übergebende Standard Arbeitsverzeichniss nicht gefunden so ist die Rückgabe "3".
Wenn die gefundene Anwendung ungültig oder keine Win32 Anwendung ist, gibt die Funktion "11" zurück.


Bye the way: von Jimmy kommt in der Verbindung mit der Registry folgende Lösung:

Code: Alles auswählen

Reg := XbpReg():NEW(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Extensions) 

   IF ! oReg:Status() 
       RETURN .F. 
   ENDIF 

   oReg:ReadBinType("C") 

   // Beispiel suche "doc" 
   uVal := oReg:getValue('doc') 
   uVal := STRTRAN(uVal,'^.doc','') 

   // ruft zuletzt bearbeitetes Document auf und plaziert den Cursor 
   RunShell( "/mfile1 /mZurückEinfügemarke", uVal, .T. ) 
...

Zu den Windows Modes:
versteckt das Fenster
SW_HIDE = 0

maximiert das Fenster
SW_MAXIMIZE = 3

minmiert das Fenster
SW_MINIMIZE = 6

aktiviert das Fenster
SW_NORMAL = 1

zeigt das Fenster
SW_SHOW = 5

stellt die Fenstergröße wieder her
SW_RESTORE = 9

zeigt das Fenster an und maximiert es
SW_SHOWMAXIMIZED = 3

zeigt das Fenster an und minimiert es
SW_SHOWMINIMIZED = 2

minimiert das Fenster und aktiviert es nicht
SW_SHOWMINNOACTIVE = 7

zeigt das Fenster an, aber aktiviert es nicht
SW_SHOWNA = 8

zeigt das Fenster an ohne es zu aktivieren
SW_SHOWNOACTIVATE = 4

zeigt das Fenster und aktiviert dies
SW_SHOWNORMAL = 1
Zuletzt geändert von Lewi am Do, 15. Feb 2007 9:46, insgesamt 3-mal geändert.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Vielen Dank für eure Hilfe, da ich eXPress++ Benutzer bin, habe ich dort die Funktion DC_SpanURL(file) gefunden, die genau das macht. :)
Viele Grüße
Wolfgang
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Wolfgang, so geht es natürlich auch! ;-)
Antworten