| Autor |
Beitrag |
TheSECONDJoker
Hält's aus hier
Beiträge: 13
|
Verfasst: Do 10.03.05 22:44
Hi,
ich möchte bzw. muss für ein programm, welches ich schreibe, die installierte office version automatisch ermitteln. ich habe ehrlich gesagt absolut kein ahnung, wie ich das machen soll.
habe eine datei gefunden, welche bei office97 und bei office2k vorkommt und bei beiden auch unterschiedlich ist. leider ich das ganze ein bisschen zu unsicher und außerdem konnte ich eine solche datei nicht unter officexp finden.
kann mir bitte mal jemand sagen, wie ich das programmieren kann (bitte mit source code)? hänge da momentan echt fest.
gruß
thesecondjoker
|
|
NeoInDerMATRIX
      
Beiträge: 245
Win95, Win98(+se), WinNT, Win2000, WinME, WinXP(+pro), VISTA, Linux(SuSe), DOS [MultiMon(3)], Vista
D6 PeE + (FP 2.0l) + D3 Pe + D2005+ D2006 Arch
|
Verfasst: Do 10.03.05 23:06
Hi,
schau dir mal den Registry Key "HKey_Local_Machine\Software\Microsoft\Office" an. Der könnte etwas für dich sein!
Cu
Neo
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Do 10.03.05 23:11
Orientier die an der Produktreihe aus der Registry.
Mein Office XP besteht beispielsweise aus Word v10.235.343, Powerpoint v10.2455.23 usw.
In der Registry gibts dann unter local_machine -> Software -> Microsoft -> Office die Pfade 10, 9, 8, 7, 6. Wenn es den Pfad 10 auf einem System gibt, kann man sich also relativ sicher sein dass er Office XP hat.
REGISTRY, falls du nicht weisst wie man mit ihr arbeitet.
Edit: Ich tipp einfach zu lange... 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 11.03.05 09:15
HKCL\Word.Application --> ''. Unter diesem Key steht ein Verweis auf Word.Application.10 (für Office2000, ansonsten dementsprechend).
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 11.03.05 09:38
Karlson hat folgendes geschrieben: | Orientier die an der Produktreihe aus der Registry.
Mein Office XP besteht beispielsweise aus Word v10.235.343, Powerpoint v10.2455.23 usw.
In der Registry gibts dann unter local_machine -> Software -> Microsoft -> Office die Pfade 10, 9, 8, 7, 6. Wenn es den Pfad 10 auf einem System gibt, kann man sich also relativ sicher sein dass er Office XP hat. |
Es soll Leute geben, die Office XP benutzen, dann aber (warum auch immer  ) wieder zu Office 2000 zurückkehren oder vllt. auf Office 2003 wechseln oder Open-office benutzen und MS-Office entfernen. Der 10er-Schlüssel bleibt dann aber in der Registry, selbst wenn die entsprechende Office-Version entfernt wird. So sicher würde ich also bei der Methode nicht sein. 
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: Fr 11.03.05 10:30
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| uses ComObj;
function GetInstalledWordVersion: Integer; var word: OLEVariant; begin word := CreateOLEObject('Word.Application'); result := word.version; word.Quit; word := UnAssigned; end; |
Das funktioniert sicherlich auch mit den anderen Office anwendungen !!
Vielleicht hilft's ja
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Fr 11.03.05 10:32
chrisw hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function GetInstalledWordVersion: Integer; var word: OLEVariant; begin word := CreateOLEObject('Word.Application'); result := word.version; word.Quit; word := UnAssigned; end; |
Das funktioniert sicherlich auch mit den anderen Office anwendungen !!
Vielleicht hilft's ja |
Dir ist aber klar, was passiert, wenn der Anwender kein Word installiert hat?
AXMD
|
|
Amiga-Fan
      
Beiträge: 534
|
Verfasst: Fr 11.03.05 11:22
Eine Exception? Try.. Except drum...
|
|
TheSECONDJoker 
Hält's aus hier
Beiträge: 13
|
Verfasst: Fr 11.03.05 13:31
vielen dank erstmal für die bisherigen bemühungen.
mir ist noch etwas eingefallen. vielleicht wäre es möglich die office version aus der winword.exe auszulesen. ich müsste halt nur für den Office Ordner (wegen Office10, Office11 etc.) so was wie ne wildcard setzen, wobei ich mal vermute, dass ein pfad auf jeden fall absolut sein muss, oder?
wenn das vielleicht doch möglich wäre, dann müsstet ihr mir bitte nur noch sagen, wie ich eine versionsnr. aus einer exe auslesen kann (möglichst auch hier wieder mit so was wie wildcards, da sich durch service packs oder service releases die absolute versionsnr. wieder ändern kann).
anderenfalls, würde ich die idee von chrisw aufschnappen und lediglich überprüfen ob der root ordner vom office (c:\programme\microsoft office\) existiert.
|
|
TheSECONDJoker 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 14.03.05 10:02
Hallo? Kann mir bitte nochmal jemand helfen?
Ich habe schon mal für das Abfragen der Dateiversion etwas rausgefunden:
GetFileVersion()
Allerdings bekomme ich immer den Maximalwert der Integer- bzw. genau gesagt Cardinalzahl. Woran kann das liegen? Ich hätte gerne die Versionsnummer, so wie sie in der Datei auch steht!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 14.03.05 13:02
Frag mal den Wert der Funktion GEtLastError ab und poste diesen. Möglichst nach jedem API-Aufruf.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Shaky
      
Beiträge: 72
WinXP
D5, Delphi 2005 Prof.
|
Verfasst: Fr 01.04.05 13:12
ich musste da Programm auch schreiben.
falls du es noch brauchst. Hier bitteschön.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, registry, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private procedure RegEintraege; { Private-Deklarationen } public { Public-Deklarationen } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.RegEintraege; var r_haupt,r_office,r_progs: TRegIniFile; Haupt,Office,Progs: TStringList; m,n,ka,i,j,g: Integer; Datei,Name,Ordner,Ordner2,hilf: String; drin : Boolean; version, filename, prog, v_name : Array [0..3] of string; begin version[0]:='8'; version[1]:='9'; version[2]:='10'; version[3]:='11'; v_name[0]:='Office 97'; v_name[1]:='Office 2000'; v_name[2]:='Office XP'; v_name[3]:='Office 2003'; filename[0]:='winword.exe'; filename[1]:='excel.exe'; filename[2]:='Access.exe'; filename[3]:='Powerpoint.exe'; prog[0]:='Word'; prog[1]:='Excel'; prog[2]:='Access'; prog[3]:='Powerpoint'; Haupt := TStringList.Create; Office := TStringList.Create; Progs := TStringList.Create; try begin for n:=0 to 3 do begin r_haupt := TRegIniFile.Create; r_haupt.RootKey := HKEY_LOCAL_MACHINE; if r_haupt.OpenKey('Software\Microsoft\Office', FALSE) then r_haupt.ReadSections(Haupt); for i := 0 to Haupt.Count - 1 do begin r_office:=r_haupt; ordner := Haupt.Strings[i]; ka:=pos('.',ordner); hilf:=copy(ordner,0,ka-1); if hilf = version[n] then begin r_office.OpenKey(ordner, FALSE); r_progs:=r_office; r_office.ReadSections(Office); for j := 0 to Office.Count - 1 do begin ordner2 := Office.Strings[j]; for m:=0 to 3 do begin if ordner2 = prog[m] then begin r_progs.OpenKey(prog[m], FALSE); r_progs.ReadSections(Progs); for g := 0 to Progs.Count - 1 do begin Name := r_progs.ReadString(Progs[g], 'Path', ''); datei:=name+filename[m]; drin:=FileExists(datei); if drin=true then listbox1.items.add(v_name[n] + ' : ' + datei); end; end; end; end; end; end; end; Haupt.Free; end; finally r_haupt.Free; Progs.Free; Office.Free; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin RegEintraege; end;
end. |
|
|
|