Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Version von Outlook feststellen - etwas knifflig



  • Please log in to reply
18 replies to this topic
roady1969
  • Members
  • 88 posts
  • Last active: Jul 16 2019 10:21 AM
  • Joined: 19 Dec 2012

Hallo,

 

ich suche eine Moeglichkeit die beim User installierte Programmversion von MS Outlook (z.B. 2003, 2010 etc.) festzustellen.

 

An sich geht das ja mittels FileGetVersion, Ausgabevariable [, Dateiname].

 

ALLERDINGS habe ich damit das Problem einen PFAD angeben zu muessen.

Leider habe ich keine Ahnung, wo MS Outlook beim User installiert ist, da der Standard-Installations-Pfad ja auch vom User geaendert werden kann (ist bei mir z.B. der Fall).

 

Habt Ihr eine gangbare Idee das automatisch ohne Usereingriff auszulesen?

 

Vielen Dank fuer Eure Ratschlaege,

Roady

 

PS: Bin noch ein ziemlicher AHK "DAU"... (Anfaenger)



Pulover
  • Members
  • 1596 posts
  • Last active: Apr 06 2016 04:00 AM
  • Joined: 20 Apr 2012
:Arrow: _Application.Version Property
OlVer := ComObjCreate("Outlook.Application").Version
MsgBox, % OlVer

Rodolfo U. Batista
Pulover's Macro Creator - Automation Tool (Recorder & Script Writer) | Class_LV_Rows - Copy, Cut, Paste and Drag ListViews | Class_Toolbar - Create and modify | Class_Rebar - Adjustable GUI controls

Join the New AutoHotkey Forum!


IsNull
  • Moderators
  • 990 posts
  • Last active: May 15 2014 11:56 AM
  • Joined: 10 May 2007
Um dann den Produktnamen zu erhalten, kannst du eine Map definieren;
static outlookVersionMap := { 10 : "2000" , 11 : "2002", 12 : "2007", 14 : "2010" }

Dann schaut das ganze, etwas schön in Funktionen verpackt so aus:
Code entfernt - siehe weiter unten für aktualisierten Code


roady1969
  • Members
  • 88 posts
  • Last active: Jul 16 2019 10:21 AM
  • Joined: 19 Dec 2012

Wow, das ging schnell.

Und interessante Ansaetze. Vielen Dank dafuer!

 

Allerdings liefern mir (bei mir) beide Vorschlaege ueber die MsgBox die selbe (!) Versionsnummer.

Ich habe MS Outlook 2003 und die Version die ausgegeben wird ist dann 11.0.0.8330. Das ist fuer den Post von Pilover verstaendlich. Aber bei dem Post von IsNull haette ich jetzt "2002" erwartet (so die MAP korrekt ausgewertet wird).

 

Was ich auch noch nicht verstehe ich, das Pulover ein anderes ComObj anspricht, als IsNull

Pulover: ComObjCreate("Outlook.Application").Version

IsNul:     ComObjCreate("Outlook.Application")

 

Wenn ich im Script von IsNull den Aufruf um ".Version" ergaenze, liefert mir das IsNull Script "Outlook nicht vorhanden"?

 

Woher kommt das?

 

Kann das sein, dass das Script hier garnicht reingeht?

 

     majorVersion := match[1]
     productName := outlookVersionMap[majorVersion]
    

ich habe mir an bzw. nach dieser Stelle eine MsgBox %productName% eingefuegt - beim scriptlauf wird da aber keine msgbox generiert?!?

 

Gruss & Danke!

Roady



Pulover
  • Members
  • 1596 posts
  • Last active: Apr 06 2016 04:00 AM
  • Joined: 20 Apr 2012
IsNull, Sie haben einen kleinen Fehler im Code vorgenommen.
; match := RegExMatch(version,"O)(\d\d)\.")
RegExMatch(version,"O)(\d\d)\.", match)

Rodolfo U. Batista
Pulover's Macro Creator - Automation Tool (Recorder & Script Writer) | Class_LV_Rows - Copy, Cut, Paste and Drag ListViews | Class_Toolbar - Create and modify | Class_Rebar - Adjustable GUI controls

Join the New AutoHotkey Forum!


IsNull
  • Moderators
  • 990 posts
  • Last active: May 15 2014 11:56 AM
  • Joined: 10 May 2007
@Pullover: Its the new AHK_L syntax, where the O) switch causes the return of a match object, instead of the byref out variable. Therefore, my code is correct.



@roady1969: Update auf die aktuellste AHK_L version.

Wir nutzen beide das selbe COM Objekt, nämlich das Outlook.Application Objekt. "Version" ist ein Property dieses Objektes - Führ mehr Informationen siehe Objekt Orientierte Programmierung.

roady1969
  • Members
  • 88 posts
  • Last active: Jul 16 2019 10:21 AM
  • Joined: 19 Dec 2012

Hallo ich habe Autohotkey 1.1.09.01 ist doch garnicht so alt... icon_wink.gif

 

Werde ich versuchen.

 

ABER eine Frage:

Bei mir wird mit der Pruefung Version "2002" ausgegeben. Ich habe aber ansich "2003" (genaue Version 11.0.0.803). Laut http://support.micro...om/kb/870929/de ist dies in der Tat eine "2003" Version und "2002" waere "v10.x"

 

Was laeuft da falsch? Wobei ich noch die Anpassung von Pulover "drin" habe...

 

Gruss & Danke!

R.

 

EDIT: Habe auf .02 aktualisiert. Mit der Code Aenderung von Pulover erhalte ich "2002" mit der IsNull-Empfehlung erhalte ich "". Schreibe ueber SciTE und teste ueber den "RunScript"-Knopf von SciTE. Macht das was aus?



Pulover
  • Members
  • 1596 posts
  • Last active: Apr 06 2016 04:00 AM
  • Joined: 20 Apr 2012
Would you mind pointing me to where this is documented? I'm using v1.1.09.00 and the return value with O) is still FoundPos. Couldn't find any info about this on the online docs or the annoucements page either.

Rodolfo U. Batista
Pulover's Macro Creator - Automation Tool (Recorder & Script Writer) | Class_LV_Rows - Copy, Cut, Paste and Drag ListViews | Class_Toolbar - Create and modify | Class_Rebar - Adjustable GUI controls

Join the New AutoHotkey Forum!


IsNull
  • Moderators
  • 990 posts
  • Last active: May 15 2014 11:56 AM
  • Joined: 10 May 2007
@roady1969:

Passe einfach das Versionsmapping an wink.png
 
static outlookVersionMap := { 10 : "2000" , 11 : "2002", 12 : "2007", 14 : "2010" }
 
Die Syntax ist  Key : Value

 
Ich weis die Major Version - Produktname auch nicht aus dem Stegreif.

roady1969
  • Members
  • 88 posts
  • Last active: Jul 16 2019 10:21 AM
  • Joined: 19 Dec 2012

man, bin ich bloed... ;-)

 

Mittlerweile habe ich auf .02 aktualisiert. Aber auch da geht Dein Code nicht. Es wird dann "" als Version geliefert.



IsNull
  • Moderators
  • 990 posts
  • Last active: May 15 2014 11:56 AM
  • Joined: 10 May 2007

Tja, jetzt muss ich mich selber an der Nase nehmen. Die neuste AHK_L Version hat das mit dem Objekt return tatsächlich wieder entfernt. Dann eben doch so, wie Pulover meinte:

version := GetOutlookVersion()
if(version)
{
  productName := GetOutlookProductName(version)
  MsgBox,64,Outlook found, % "Outlook " productName "(" version ")"
}else{
  MsgBox,16, Error, % "Outlook could no be found!"
}
ExitApp


GetOutlookProductName(version){
 static outlookVersionMap := { 10 : "2002" , 11 : "2003", 12 : "2007", 14 : "2010" }
 
 productName := ""
 if(version){

   if(RegExMatch(version,"O)(\d\d)\.", match))
   {
     majorVersion := match[1]
     productName := outlookVersionMap[majorVersion]
   }
 }
 return productName
}

GetOutlookVersion(){
   outlook := ComObjCreate("Outlook.Application")
   if(IsObject(outlook)){
     return outlook.Version
   }
   return false
}

In (1.1.08.x) hatte ich meinen Code getestet. So funktioniert es jetzt in der aktuellen Version 1.1.09.02
Dass der out Parameter als return Wert zurückgegeben wird scheint nun ein einzigartiges Feature von AHK 2.0 zu sein.



roady1969
  • Members
  • 88 posts
  • Last active: Jul 16 2019 10:21 AM
  • Joined: 19 Dec 2012

Hallo,

 

erstmal "Danke" fuer die Unterstuetzung. Das Ganze klappt nun auch - grundsaetzlich. Und doch auch irgendwie nicht.

 

Wenn ich mein zu EXE kompiliertes Script direkt aufrufe, wird die Outlook Version korrekt festgestellt.

ABER wenn ich die EXE aus einer anderen Applikation als eigenen Prozess aufrufe, kann die Outlook-Version nicht festgestellt werden. Ich erhalte dann stets (!) eine Fehlermeldung, dass der "Server" nicht gestartet werden kann.

 

Da ich das Bild / Screenshot nicht posten kann hier der Fehlertext:

 

Error 0x800800005 - Starten des Servers fehlgeschlagen

                 Line#

->>>          092: outlook:= ComObjCreate("Outlook.Application")

 

Continue Running the script?

 

Woran liegt das?

Das System wo's nicht klappt, ist ein Win7, 64 Bit. Der User ist admin, hat aber alle Benutzerkontensteuerungs-Merkmale ausgeschaltet.

 

Starte ich das Script als compiliertes EXE klappts. Starte ich das aus meiner anderen Anwendung gibt's obigen Fehler...

Warum?

 

Auf einem anderen System erhalte ich dagegen schon beim direkten Aufruf der EXE folgende Fehlermeldung:

 

Error 0x80004023 - Es ist ein Fehler im Microsoft-Softwareinstallationsprogramm aufgetreten.

 

Selbe Line, etc.

 

Gruss,

Roady


Edited by roady1969, 21 January 2013 - 12:29 PM.


nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
outlook:= ComObjCreate("Outlook.Application") ;du hast ein e vergessen.

Visit the new forum ahkscript.org.

http://ahkscript.org


roady1969
  • Members
  • 88 posts
  • Last active: Jul 16 2019 10:21 AM
  • Joined: 19 Dec 2012

Hallo,

 

vielen Dank fuer den Hinweis.

 

outlook:= ComObjCreate("Outlook.Application") ;du hast ein e vergessen.

 

Aber, da ich keine Grafik einfuegen konnte, habe ich das abgeschrieben. Dabei ist mir leider ein Fehler unterlaufen.

Der Aufruf ist an sich korrekt (also mit "e"). Ich korrigier mal meinen entsprechenden Thread-Beitrag.

 

Wie gesagt:

Und es laeuft ja auch, wenn ich es das kompilierte Script direkt aufrufe (z.B. per Doppelklick).

Starte ich das dagegen z.B. aus einer anderen Anwendung (Prozessaufruf) gibt's den Fehler.

 

Woran liegt's?

Da an diesem Thread jetzt nicht mehr so grosses Interesse zu sein scheint, ueberlege ich, diese Meldung als separaten Beitrag zu setzen. Wenn Ihr nichts dagegen habt...

 

Gruss,

R



IsNull
  • Moderators
  • 990 posts
  • Last active: May 15 2014 11:56 AM
  • Joined: 10 May 2007
Woran liegt's?

 

Ein Prozess "erbt" die Rechte und Einstellungen seines Erstellers. Wenn du ein Programm per Doppelklick startest, ist die "Explorer.exe" die ... ähm Mutter.

Startet ein anderer Prozess dein Programm ist dieses der Ersteller.

 

Die Frage ist also, was für ein Prozess startet dein kompiliertes Skript und was könnte an dem speziell sein? 

 

 

Btw:

 

 

Da an diesem Thread jetzt nicht mehr so grosses Interesse zu sein scheint,

Gewisse Dinge lassen sich nicht aus dem Stegreif beantworten - die Informatik ist durchaus ein komplexes Gebiet :-P