Entwickler-Ecke
Dateizugriff - ist MSWord vorhanden?
D. Annies - So 15.08.10 09:18
Titel: ist MSWord vorhanden?
Hi, Delpher,
ich versuche zu prüfen, ob Word auf dem Rechner vorhanden ist, also eigentlich nur, ob es die exe gibt.
Mit dem folgenden Code wird aber Word gestartet, was aber nur den Arbeitsspeicher füllt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function tBuchMain.Word_vorhanden: boolean; begin Word_vorhanden := false; try MSWord := CreateOleObject('Word.Application'); Word_vorhanden := true; MSWord := unassigned; except ShowMessage('Word kann nicht gestartet werden!'); Word1.enabled := false; Exit; end; end; |
Wie geht es besser?
Danke, Gruß
Detlef
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am So 15.08.2010 um 12:26
Gerd Kayser - So 15.08.10 12:21
D. Annies hat folgendes geschrieben : |
ich versuche zu prüfen, ob Word auf dem Rechner vorhanden ist, also eigentlich nur, ob es die exe gibt. |
Lese doch einfach den entsprechenden Eintrag in der Registry aus.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Winword.EXE
Unter Standard findest Du dann den kompletten Pfad inklusive Namen der Exe. Wenn Du möchtest, kannst Du dann noch mit FileExists prüfen, ob die Datei auch wirklich auf der Platte ist.
D. Annies - Mo 16.08.10 19:01
Danke, Gerd,
das werde ich mal prüfen.
Gruß, Detlef
Gerd Kayser - Mo 16.08.10 22:11
Ich hab mal ein kleines Beispiel geschrieben. Die Funktion liefert den vollständigen (langen) Pfadnamen mit dem Exe-Namen zurück. Da es jede Firma anders hält mit den Registry-Einträgen (lange oder kurze Pfadnamen, teilweise beim Pfadnamen ohne "\" am Ende), sind einige Prüfungen erforderlich.
Delphi-Quelltext
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:
| procedure TMainform.Button1Click(Sender: TObject); begin Label1.Caption := IstProgrammVorhanden(Edit1.Text); if Label1.Caption <> 'Nicht gefunden.' then if FileExists(Label1.Caption) then Label2.Caption := 'Datei ist auf der Platte vorhanden.' else Label2.Caption := 'Datei fehlt auf der Platte!'; end;
function TMainform.IstProgrammVorhanden(ProgName: string): string; var Reg : TRegistry; TempStr : string; begin Result := 'Nicht gefunden.'; TempStr := '\Software\Microsoft\Windows\CurrentVersion\App Paths\' + ProgName; if Pos('.EXE', UpperCase(ProgName)) = 0 then TempStr := TempStr +'.Exe'; Reg := TRegistry.Create; try Reg.RootKey := HKey_Local_Machine; if Reg.OpenKeyReadOnly(TempStr) then begin Result := Reg.ReadString(''); if Pos('~', Result) > 0 then begin TempStr := ExtractFileName(Result); Result := Reg.ReadString('Path'); if AnsiLastChar(Result) <> '\' then Result := Result + '\' + TempStr else Result := Result + TempStr; end; end; Reg.CloseKey; finally Reg.Free; end; end; |
Getestet mit BDS2006 unter Windows 7 (32-Bit). Ob es auch unter 64 bit läuft, kann ich hier leider nicht testen.
Edit: Fehlenden Punkt in Zeile 4 nachgetragen.
D. Annies - Di 17.08.10 10:36
Hi, Gerd,
ich habe erst eben gesehen, dass du noch einmal umfänglich tätig warst - super!
Heute abend komme ich dazu, den Code anzupassen und zu prüfen, dann melde ich
mich wieder bei dir.
Gruß, Detlef
D. Annies - Di 17.08.10 18:40
Hi, Gerd,
läuft SUPER!
Vielen Dank für deine Mühe!
Detlef
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!