Datei mit Standardprogramm öffnen - schreibgeschützt

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
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:

Datei mit Standardprogramm öffnen - schreibgeschützt

Beitrag von Jan »

Hallo,

bei vielen Dateiformaten setze ich diesen Aufruf ein (das habe ich aus einem Sample von Anand Gupta in der Alaska NG übernommen):

Code: Alles auswählen

lSuccess := DllCall("SHELL32.DLL", ;
                    DLL_STDCALL, ;
                    "ShellExecuteA", ;
                    AppDesktop():GetHWND(), ;
                    "open", ;
                    AllTrim(cFile), ;
                    NIL, ;
                    CurDir(), ;
                    SW_NORMAL)
Damit kann ich cFile mit dem auf diesem Rechner vorgesehenen Standardprogramm öffnen, ohne mich um irgendwelche Dateiformate, Einstellungen, etc. kümmern zu müssen.

Jetzt habe ich aber die Anforderung bekommen, Dateien schreibgeschützt zu öffnen. Und das auch so, das der Benutzer den Schreibschutz nicht aufheben kann - MS-Programme bieten das ja teilweise in der ockerfarbenen Hinweiszeile an. Das betrifft in erster Linie MS Word und Excel. Eventuell aber auch andere Formate.

Kann man das irgendwie mitgeben?

Wenn das so einfach nicht geht: Wie würde ich eine Word- oder Excel-Datei mit Office 2010 bzw. 2016 schreibgeschützt öffnen?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: Datei mit Standardprogramm öffnen - schreibgeschützt

Beitrag von Koverhage »

Hallo Jan,

hier für Word, allerdings direkt via Activex

Code: Alles auswählen

FUNCTION WordShowDocument(cFile)
  Local oWord, ;
        oDoc, ;
        lOpenReadOnly := .T., ;
        lWordFinished := .f., ;
        lFound := .f., ;
        nEvent := 0, ;
        mp1 := 0, ;
        mp2 := 0, ;
        cBriefform := rtrim(fi->briefform), ;
        mess1 := LGTrans('0051001','Microsoft Word ist nicht installiert')

#if XPPDEVVER > 01890000

  // Erzeugen einer ActiveX-Komponente
  oWord := CreateObject("Word.Application")
  IF Empty( oWord )
     oWord := CreateObject("opendocument.WriterDocument.1")
  ENDIF
  IF Empty( oWord )
    MsgBox( mess1 )
    Return .f.
  ENDIF

  lFound := Fexists(cDos2Win(cFile) )
  IF !lFound .and. cBriefform = "DOCX"
     cFile := strtran(cFile, ".DOCX", ".DOC")
     lFound := Fexists(cFile)
  ENDIF
  IF !lFound
     return .f.
  ENDIF

  oWord := oWord:dynamicCast(ActiveXObject())
  oWord:Quit := {||lWordFinished := .T.}
  oWord:DisplayAlerts := WdAlertsNone
  oWord:Visible := .T.
  lWordFinished := .F.

  // Oeffnen eines Word-Dokuments und Zugriff auf
  // eine Sammlung von Lesezeichen
  oWord:documents:open( cFile,,lOpenReadOnly )
  oDoc := oWord:ActiveDocument

  Do WHILE !lWordFinished
     // Just wait
     nEvent := AppEvent( @mp1, @mp2, , 1)
  EndDo

  oWord:destroy()
#endif
RETURN .t.
Gruß
Klaus
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: Datei mit Standardprogramm öffnen - schreibgeschützt

Beitrag von brandelh »

Das Schreibschutzattribut der Datei setzen, dann eine kleine Wartezeit z.B. sleep(10) danach öffnen, das Attribut erkennt jede Software spätestens beim Schreibversuch.
Gruß
Hubert
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: Datei mit Standardprogramm öffnen - schreibgeschützt

Beitrag von Tom »

Es muss auch mit Runshell gehen. Ich schaue gleich mal.
Herzlich,
Tom
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: Datei mit Standardprogramm öffnen - schreibgeschützt

Beitrag von Jan »

Ich behelfe mir im Moment damit, das ich die Datei in das lokale Temp-Verzeichnis kopiere, und dann dort öffne. Dann können die Ändern was die wollen - das Original bleibt unverändert.

Da ich die Dateien ohnehin vom Server hole, ist das zwischenspeichern auf der lokalen SSD dann auch keine fühlbare Verzögerung mehr.

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: Datei mit Standardprogramm öffnen - schreibgeschützt

Beitrag von Tom »

Bei Excel wäre es simpel der Aufrufparameter /R in Runshell. Geht das bei Word nicht auch?
Herzlich,
Tom
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: Datei mit Standardprogramm öffnen - schreibgeschützt

Beitrag von Koverhage »

Nein, bei Word wird mit /R die Daten neu in die Registry geschrieben.
Gruß
Klaus
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: Datei mit Standardprogramm öffnen - schreibgeschützt

Beitrag von Jan »

Mit runshell kann ich aber immer nur ein bestimmtes Programm öffnen? Das wäre doof, denn dann muß ich für alle möglichen Dateiendungen verschiedene runshells abarbeiten. Und weiß trozdem nicht, womit der Mitarbeiter z. B. eine PDF öffnen möchte (Adobe, Foxit, Edge, ...). Das ist das schöne an der von mir oben geposteten Lösung - da kann ich jede Dateiendung mit egal welchem Programm öffnen. Je nachdem, was der User bei sich eingestellt hat. Das Problem ist halt, daß das mit den Parametern schwierig wird.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: Datei mit Standardprogramm öffnen - schreibgeschützt

Beitrag von AUGE_OHR »

hi,

der 4th Parameter bei ShellExecuteA ist nicht NIL sondern NULL ... oder eben die Verbs (als String) die man haben will.
gruss by OHR
Jimmy
Antworten