Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Externes Programm starten (https://www.delphipraxis.net/85395-externes-programm-starten.html)

Klaus01 30. Jan 2007 10:37

Re: Externes Programm starten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von sebjensen
Super.

Nur wie bekomme ich jetzt den Pfad zu zum Beispiel Word?

Aus der Registry, siehe Bild.

Grüße
Klaus

sebjensen 30. Jan 2007 10:40

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...

sirius 30. Jan 2007 10:48

Re: Externes Programm starten
 
Zitat:

Zitat von sebjensen
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...

Es gibt ja die Möglichkeit zu suchen, bzw, die alle Versionen in eine TStringList zu laden (getkeynames). Und dann kannst du dir eine aussuchen.

sebjensen 30. Jan 2007 13:57

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...

sirius 30. Jan 2007 14:05

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;

inherited 30. Jan 2007 14:06

Re: Externes Programm starten
 
Hier im Forum suchenRegistry, RegistryRegistry :mrgreen:
Da müsstest du genug Beispiele finden.

Thorben_K 30. Jan 2007 14:06

Re: Externes Programm starten
 
Tut

damit hab ich es gelernt, bin damit gut zu recht gekommen :D

sebjensen 30. Jan 2007 15:53

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

inherited 30. Jan 2007 16:51

Re: Externes Programm starten
 
Zitat:

Zitat von sebjensen
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".[...]

Du musst schon ein wenig Code zeigen, sonst kann dir keiner sagen, wo der Fehler liegt ;)

sebjensen 30. Jan 2007 19:57

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.
Seite 2 von 4     12 34      

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