![]() |
Re: Externes Programm starten
Also ich habe es noch weiter probiert, steige da aber nicht durch und habe es leider abbrechen müssen. Kann mir von euch Profis vielleicht jemand helfen...
|
Re: Externes Programm starten
Wirklich keiner der sich damit auskennt und mir helfen könnte? Schade, mein Programm ist im Kopf schon fertig und es fehlt nur noch die Umsetzung...
|
Re: Externes Programm starten
servus,
lass mal bei openkeyreadonly den ersten backslash weg, der ist da fehl am platze. ausserdem müsste da noch ein if not hin.
Delphi-Quellcode:
if not reg.OpenKeyReadOnly('Software\Microsoft\Office') then
begin key:=''; reg.CloseKey; end mfg Jonny |
Re: Externes Programm starten
Ich habe die Funktion so umgeschrieben, wie es in meiner Registry aussieht.
Delphi-Quellcode:
function LookUpRegistry:string;
{Suchen, wo MS Office Word liegt} var reg :TRegistry; s :TStrings; p,i :integer; key,value:string; wordpfad : string; begin reg := TRegistry.Create(KEY_READ); s := TStringlist.Create; reg.rootkey := HKEY_LOCAL_MACHINE; key := '\Software\Microsoft\Office'; wordpfad := ''; if reg.OpenKeyReadOnly(key) then begin reg.GetKeyNames(s); if s.count>0 then key:=key +'\'+ s.Strings[0]+'\Word\InstallRoot'; // Ich habe zur Probe s.strings[0] genommen // Du müsstest vorher die Stringlist durchsuchen, an welcher Stelle die höchste Versionsnummer steht reg.CloseKey; if reg.OpenKeyReadOnly(key) then begin value:=reg.ReadString('Path'); reg.CloseKey; value:=value+'\winword.exe'; if fileexists(value) then wordpfad:=value; end; result:=wordpfad; end; s.free; reg.free; end; |
Re: Externes Programm starten
Delphi-Quellcode:
ist falsch, es muss
key := '\Software\Microsoft\Office';
Delphi-Quellcode:
heissen.
key := 'Software\Microsoft\Office';
mfg Jonny |
Re: Externes Programm starten
Zitat:
|
Re: Externes Programm starten
Super. Schon einmal vielen Dank. Das klappt schon ganz gut. Nun habe ich aber noch einige Fragen...
(1) Wie laufe ich denn die Schlüssel durch und suche nach der höchsten Versionsnummer? Das sind doch Strings, wie kann ich die denn zerlegen? (2) Muss ich für jedes Office Programm so eine Funktion schreiben, oder kann ich einfach einen Parameter mit geben. Und dann sucht die Funktion nach '\Software\Microsoft\Office\xxx\11.0\....'? Vielen Dank schonmal für die Antworten... |
Re: Externes Programm starten
zu (1) Na du kannst mit TryStrToFloat die Strings in Zahlen umwandeln und dann die Größte nehmen.
zu (2) Du meinst wohl eher '\Software\Microsoft\Office\11.0\xxx....'? Natürlich geht auch. Ganz normale Parameterübergabe an Funktionen und an entsprechender Stelle dem String anfügen (z.B. statt Word) |
Re: Externes Programm starten
Hallo.
Irgendwie bekomme ich das nicht so hingebastelt, dass es läuft. Könntest du mir da vielleicht nochmal unter die Arme greifen? |
Re: Externes Programm starten
Delphi-Quellcode:
Leider funktioniert das so nicht. Ich erhalte eine Exception, dass 10.0 keine gültige Gleitkommazahl ist... wieso?
function LookUpRegistryForWord : string;
var reg : TRegistry; s : TStrings; p,i : integer; help : integer; v1, v2 : real; key,value : string; wordpfad : string; begin reg := TRegistry.Create(KEY_READ); s := TStringlist.Create; reg.rootkey := HKEY_LOCAL_MACHINE; key := '\Software\Microsoft\Office'; wordpfad := ''; help := 0; if reg.OpenKeyReadOnly(key) then begin reg.GetKeyNames(s); for i := 0 to s.Count-2 do begin TRY v1 := StrToFloat(s.Strings[i]); v2 := StrToFloat(s.Strings[i+1]); if (v1 < v2) then help := i+1; if (v1 > v2) then help := i; EXCEPT showMessage('Es ist leider ein Fehler aufgetreten'); end; end; key := key +'\'+ s.Strings[help]+'\Word\InstallRoot'; reg.CloseKey; if reg.OpenKeyReadOnly(key) then begin value:=reg.ReadString('Path'); reg.CloseKey; value := value + 'winword.exe'; if fileexists(value) then wordpfad := value; end; result:=wordpfad; end; s.free; reg.free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz