MS OFICE installiert?

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

MS OFICE installiert?

Beitrag von Muecke »

Hallo zusammen,

Weis jemand wie ich in die Registrie abfragen kann, ob MSOFFICE installiert ist?

Gruss Thomas
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: MS OFICE installiert?

Beitrag von AUGE_OHR »

hi,
Muecke hat geschrieben: Weis jemand wie ich in die Registrie abfragen kann, ob MSOFFICE installiert ist?
man könnte ja abfragen ob EXCEL installiert ist, reicht das ?

Code: Alles auswählen

   oReg := XbpReg() :NEW( 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\EXCEL.EXE' )

   IF !oReg:Status()
      MSGBOX( "Kein EXCEL installiert" )
      RETURN uVal
   ENDIF
gruss by OHR
Jimmy
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Jimmy,

das suchte ich.
Ist schon eine feine Sache für einen Anfänger mit solch einem Forum arbeiten zu können.

PS: Was ist das für eine Funktion AtNum?

Gruss Thomas :D
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Thomas,

ATNUM() kommt aus den Tools III und ermittelt die Anfangsposition einer Sequenz innerhalb eines Strings.

ATNUM(<cSuchfolge>,<cZeichenfolge>)

Suche des letzten Auftretens

? ATNUM("bc", "abcdeabc") // REsultat 7

Suche des ersten Auftretens

? ATNUM("bc", "abcdeabc",1) // Resultat 2

War das gemeint?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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

Beitrag von AUGE_OHR »

hi,
Muecke hat geschrieben: das suchte ich.
Ist schon eine feine Sache für einen Anfänger mit solch einem Forum arbeiten zu können.
ja und dann auch noch in der Muttersprache :)
du kennst doch sicherlich ausch das Alaska Forum ?
Muecke hat geschrieben: PS: Was ist das für eine Funktion AtNum?
wie Martin schon sagte, es ist ohne Parameter, wie ein RAT().

Frage : Was willst du damit anfangen ? willst du "zählen" wie oft ein
Zeichen in einem String vorkommt ? und dann ab der Position was
machen ?

Code: Alles auswählen

FUNCTION Countat( cFile ,cExt)
LOCAL nRet  := 0
LOCAL nPosi := 1
LOCAL nMax  := LEN(cFile)

   DO WHILE nPosi > 0
      nPosi := AT(cExt,cFile,nPosi+1)
      IF nPosi > 0
         nRet++
      ELSE
         EXIT
      ENDIF
   ENDDO
RETURN nRet
...
    // wie oft kommt es vor
    nCount := Countat(UPPER(cFile),".MPG")

    // starte ab Position nCount
    cOutAVS := STRTRAN( UPPER(cFile),".MPG",".AVS", nCount )
gruss by OHR
Jimmy
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Dies kommt in der regclass vor

Code: Alles auswählen

DO WHILE "%" $ ::xValue
               *nPos1 := AtNum( "%", ::xValue, 1 )
               *nPos2 := AtNum( "%", ::xValue, 2 )
                IF nPos2 = 0
                     EXIT
                ENDIF
                 cTemp := SubStr( ::xValue, nPos1+1, nPos2-nPos1-1 )
                 IF nPos1 == 1
                     ::xValue := GetEnv( cTemp ) + SubStr( ::xValue, nPos2+1 )
                 ELSE
                     ::xValue := Substr( ::xValue, 1, nPos1-1) +  ;
                        GetEnv( cTemp ) + SubStr( ::xValue, nPos2+1 )
                ENDIF
ENDDO
Darum meine Frage.
Ist es so , dass zuerst nach der 1 Posi und dan nach der 2 posi gesucht wird.Gibt es da auch eine andere Function die das kann, oder muss ich dies einzeln ausklabuschtern mit RAt()?

Gruss Thomas
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Thomas,
Gibt es da auch eine andere Function die das kann, oder muss ich dies einzeln ausklabuschtern mit RAt()?
gibt es -- im Windows-API. Welche Machart allerdings effizienter ist, habe ich bisher nicht ausprobiert.

Viele Grüße,
Günter

Code: Alles auswählen

#include "dll.ch"

FUNCTION ExpandEnvironmentStrings( cIn )

STATIC tpl

LOCAL cTemp
LOCAL nSize
LOCAL nLen

if tpl = NIL 
   tpl := DllPrepareCall( "kernel32.dll", DLL_STDCALL, "ExpandEnvironmentStringsA" )
endif

// benötigte Puffergröße ermitteln
cTemp := ""
nSize := 1
nLen  := DllExecuteCall( tpl, cIn, @cTemp, nSize ) + 2

// Puffer von ausreichender Größe bereitstellen
cTemp := space( nLen )
nSize := nLen

nLen  := DllExecuteCall( tpl, cIn, @cTemp, nSize )

// erfolgreich?
IF nLen = 0
   // MsgBox( "Fehler bei " + procname(), appname() )
   RETURN ""
ENDIF  

// Nullterminierung beseitigen
RETURN left( cTemp, nLen-1 )
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:

Beitrag von Koverhage »

und was steht darin wenn "nur" Open Office installiert ist ?

Wenn nur MS Word installiert ist (ohne Excel, soll es ja auch geben) dann prüfen auf Winword.exe
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:

Beitrag von Tom »

Da MS-Office immer seine Active-X-Komponenten mitinstalliert, kann man auch einfach ein entsprechendes Objekt zu erzeugen versuchen und entsprechend reagieren. Aus den Alaska-Samples:

Code: Alles auswählen

oWord := CreateObject("Word.Application")
  IF Empty( oWord )
    MsgBox( "Microsoft Word ist nicht installiert" )
  ENDIF
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

Beitrag von AUGE_OHR »

Muecke hat geschrieben:Dies kommt in der regclass vor

Code: Alles auswählen

DO WHILE "%" $ ::xValue
               *nPos1 := AtNum( "%", ::xValue, 1 )
               *nPos2 := AtNum( "%", ::xValue, 2 )
grundsätzlich solltest du die RegClass NICHT verändern !

Das ganze steht ja in der RegClass unter METHOD XbpReg:GetValue()
im Abschnitt CASE nType == REG_EXPAND_SZ.
Es wird dort mit environment variablen gearbeitet die mehrer "%" haben,
wie z.b. %TEMP% und so.

Ich frage mich was du da lesen willst den GETENV() kannst du auch ohne
Registry benutzen ?

gruss by OHR
Jimmy
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Tom,

ist vermutlich die beste Methode. Nur sollte man nicht vergessen Word zu schliessen, nach dem Programmstart, da sonst Word bereits Ativ ist.

Deshalb hab ich die andere Funktion oReg() genommen, mit der ich eigentlich alle instll.Programme abfragen kann.

Gruss Thomas :wink:
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Jimmy,

Ich hab dies in der Class mit sternen ausklabustert, da ich sonst im compil.immer Fehler bekam.
Es nahm mich nur wunder für was das sein sollte.

Danke aber für Antwort

Gruss Thomas
Antworten