![]() |
Re: Externes Programm starten
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Grüße Klaus |
Re: Externes Programm starten
Nun ist aber die Frage, was passiert, wenn ich eine ältere Version habe?
Die soll dann ja auch erkannt werden? ALso ich meine quasi jetzt liegt der Schlüssel ja unter Office11, wenn ich jetzt noch rechner mit win 2000 habe, dann liegt der Schlüssel ja vielleicht unter Office8, oder so? Das ist dann ja sogesehen auch wieder statisch... |
Re: Externes Programm starten
Zitat:
|
Re: Externes Programm starten
Magst du mir vielleicht einen Ansatz geben, wie ich das zu machen habe?
Ich habe noch nie mit der Registry und Delphi gearbeitet und möchte da natürlich nichts gleich kaputt machen... |
Re: Externes Programm starten
Aus einem Programm von mir. Wie du siehst hatte ich Ghostscript und Acrobat Distiller gesucht.
Tut mir leid, dass es nicht gut kommentiert ist und die Variablennamen ne Katastrophe sind. Ich hab jetzt keine Zeit für längere Ausführungen. Vielleicht schaffst du es ja, dich da durchzufitzen.
Delphi-Quellcode:
procedure LookUpRegistry;
{Suchen, wo evtl. Programme zum Erstellen von PDFs liegen} var reg:TRegistry; s:TStrings; p,i:integer; key,value:string; begin reg:=TRegistry.Create(KEY_READ); s:=TStringlist.Create; reg.rootkey:=HKEY_Local_Machine; key:=''; //Ghostscript if (gspfad='')or(not fileexists(gspfad)) then begin if reg.OpenKeyReadOnly('\Software\AFPL Ghostscript') then begin key:='\Software\AFPL Ghostscript'; reg.CloseKey; end else if reg.OpenKeyReadOnly('\Software') then begin reg.GetKeyNames(s); p:=-1; for i:=0 to s.Count-1 do if pos('Ghostscript',s.Strings[i])>0 then p:=i; if p>=0 then key:='\Software\'+s.Strings[p]; reg.CloseKey; end; if (length(key)>0) and (reg.OpenKeyReadOnly(key)) then begin reg.GetKeyNames(s); if s.count>0 then key:='\Software\AFPL Ghostscript\'+s.Strings[s.count-1]; reg.CloseKey; if reg.OpenKeyReadOnly(key) then begin value:=reg.ReadString('GS_DLL'); reg.CloseKey; if pos(';',value)>0 then value:=copy(value,1,pos(';',value)-1); value:=extractfiledir(value)+'\gswin32c.exe'; if fileexists(value) then gspfad:=value; end; end; end; //Distiller if (distpfad='')or(not fileexists(distpfad)) then begin key:='\Software\Adobe\Acrobat Distiller'; if reg.OpenKeyReadOnly(key) then begin reg.GetKeyNames(s); if s.count>0 then begin key:=key+'\'+s.strings[s.count-1]; reg.CloseKey; reg.OpenKeyReadOnly(key); value:=reg.ReadString('InstallPath'); if value='' then begin reg.CloseKey; key:=key+'\InstallPath'; reg.OpenKeyReadOnly(key); value:=reg.ReadString(''); end; if value<>'' then begin value:=value+'\acrodist.exe'; if fileexists(value) then distpfad:=value; end; end; reg.CloseKey; end; end; |
Re: Externes Programm starten
|
Re: Externes Programm starten
|
Re: Externes Programm starten
Hallo, ich habe versucht den Code von sirius umzuschreiben, doch leider gelingt mir das nicht. Also ich muss ja zunächst in den Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\OFFICE. Doch da komme ich ja schon gar nicht hin, weil er immer sagt "\ ist nicht erlaubt".
Dann muss ich ja nun schauen, welcher Schlüssel darunter liegt. Dieser kann sich ja nun ändern. Bei mir ist es 11.0 für Office 2003. Doch hier soll mein Programm nun selbst den Schlüssel suchen dann geht es weiter mit WORD\INSTALLROOT dort steht nun der Path. Wie kann ich denn den nun extrahieren und in einer Variable speichern? Das Aufrufen bekomme ich dann wieder hin, aber so ganz komme ich damit nicht klar und würde mich freuen, wenn mir jemand einige Codeschnipsel zur Verfügung stellen könnte. Viele Grüße, sebjensen |
Re: Externes Programm starten
Zitat:
|
Re: Externes Programm starten
Okay.
Hier ist mal der bisherige Quellcode der Leider überhaupt nicht läuft. Müsste ich auch für jedes Office-Programm (Word, Excel, Outlook, ...) eine neue Prozedur schreiben oder kann man das auch in einer lösen.
Delphi-Quellcode:
procedure LookUpRegistry;
{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 := ''; if reg.OpenKeyReadOnly('\Software\Microsoft\Office') then begin key:=''; reg.CloseKey; end else if reg.OpenKeyReadOnly('\Software') then begin reg.GetKeyNames(s); p:=-1; for i:=0 to s.Count-1 do if pos('Microsoft',s.Strings[i])>0 then p:=i; if p>=0 then key:='\Software\'+ s.Strings[p]; reg.CloseKey; end; if (length(key) > 0) and (reg.OpenKeyReadOnly(key)) then begin reg.GetKeyNames(s); if s.count>0 then key:='\Software\Microsoft\' + s.Strings[s.count-1]; reg.CloseKey; if reg.OpenKeyReadOnly(key) then begin value:=reg.ReadString(''); reg.CloseKey; if pos(';',value)>0 then value:=copy(value,1,pos(';',value)-1); value:=extractfiledir(value)+'\winword.exe'; if fileexists(value) then wordpfad:=value; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 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