feststellen, ob Registry-Zweig existiert
feststellen, ob Registry-Zweig existiert
Hallo Ihr da draussen,
entschuldigt bitte, dass zum 1000. mal die Frage nach der Registry kommt, aber ich bin jetzt seit 2 Tagen auf der Suche nach einer Möglichkeit dafür und habe nichts passendes für mich gefunden (oder habe den Code vielleicht nicht richtig anpassen können -> PureBasic Anfänger). Ich möchte ein kleines Programm schreiben, das feststellt, ob in der Registry unter HKEY_CLASSES_ROOT der Zweig "Word.Application" existiert. Dabei ist es egal, welche Werte darin stehen, da ich nur Abfragen möchte, ob Word istalliert ist. Später soll das Ganze dann auf Excel ("Excel.Application") und Outlook ("Outlook.Application") erweiterbar sein. Die Ergebnisse sollen in einer Textdatei ("text.txt") , etwa im Format:
word=1
excel=1
outlook=0
gespeichert werden, wobei 1=vorhanden und 0=nicht vorhanden ist.
Kann mir da jemand weiterhelfen? Wäre auch für jede andere Möglichkeit, mit der ich abfragen kann, ob Word, Excel etc. installiert ist, dankbar.
Vorab schonmal vielen Dank für Eure Mühe
entschuldigt bitte, dass zum 1000. mal die Frage nach der Registry kommt, aber ich bin jetzt seit 2 Tagen auf der Suche nach einer Möglichkeit dafür und habe nichts passendes für mich gefunden (oder habe den Code vielleicht nicht richtig anpassen können -> PureBasic Anfänger). Ich möchte ein kleines Programm schreiben, das feststellt, ob in der Registry unter HKEY_CLASSES_ROOT der Zweig "Word.Application" existiert. Dabei ist es egal, welche Werte darin stehen, da ich nur Abfragen möchte, ob Word istalliert ist. Später soll das Ganze dann auf Excel ("Excel.Application") und Outlook ("Outlook.Application") erweiterbar sein. Die Ergebnisse sollen in einer Textdatei ("text.txt") , etwa im Format:
word=1
excel=1
outlook=0
gespeichert werden, wobei 1=vorhanden und 0=nicht vorhanden ist.
Kann mir da jemand weiterhelfen? Wäre auch für jede andere Möglichkeit, mit der ich abfragen kann, ob Word, Excel etc. installiert ist, dankbar.
Vorab schonmal vielen Dank für Eure Mühe
Nichts wissen macht nichts. Man muß nur wissen, wo es steht, oder wen man fragen kann . . .
Re: feststellen, ob Registry-Zweig existiert
das kannst Du beispielsweise mit COMate bewerkstelligen:texti hat geschrieben:Wäre auch für jede andere Möglichkeit, mit der ich abfragen kann, ob Word, Excel etc. installiert ist, dankbar.
Code: Alles auswählen
IncludePath #PB_Compiler_Home + "srod\comateplus\" ; Pfad anpassen
XIncludeFile "COMatePLUS.pbi"
Procedure TestApplication(Application.s)
Protected oApplication.COMateObject
oApplication = COMate_CreateObject(Application)
If oApplication
Debug Application + " ist installiert"
oApplication\Invoke("Quit")
oApplication\Release()
Else
Debug Application + " ist nicht installiert"
EndIf
EndProcedure
TestApplication("Outlook.Application")
TestApplication("Word.Application")
TestApplication("Excel.Application")
a²+b²=mc²
Re: feststellen, ob Registry-Zweig existiert
Vielen, vielen, vielen ... Dank kiffi,
so einfach, so genial und genau das, was ich gesucht habe! Und dann auch noch so eine schnelle Antwort! Hier mein angepaßter Code (vielleicht gibt es ja Leute, die sowas auch mal brauchen):
Danke und Gruß
so einfach, so genial und genau das, was ich gesucht habe! Und dann auch noch so eine schnelle Antwort! Hier mein angepaßter Code (vielleicht gibt es ja Leute, die sowas auch mal brauchen):
Code: Alles auswählen
IncludePath #PB_Compiler_Home + "srod\comateplus\" ; Pfad anpassen
XIncludeFile "COMatePLUS.pbi"
Procedure TestApplication(Application.s)
Protected oApplication.COMateObject
oApplication = COMate_CreateObject(Application)
If oApplication
WriteStringN(1,"1=" + Application,#PB_Ascii)
oApplication\Invoke("Quit")
oApplication\Release()
Else
WriteStringN(1,"0=" + Application,#PB_Ascii)
EndIf
EndProcedure
If CreateFile(1, "c:\kontor\programme.ini") ; wenn die Datei geöffnet werden konnte, setzen wir fort...
TestApplication("Access.Application")
TestApplication("Word.Application")
TestApplication("Excel.Application")
TestApplication("Outlook.Application")
CloseFile(1) ; schließen der zuvor geöffneten Datei
Else
MessageRequester("FEHLER","Bitte benachrichtigen Sie den Administrator!")
EndIf
Danke und Gruß
Nichts wissen macht nichts. Man muß nur wissen, wo es steht, oder wen man fragen kann . . .
Re: feststellen, ob Registry-Zweig existiert
schau Dir diesbezüglich mal das Preference-Kapitel in der PB-Hilfe an. Könnte vielleicht was für Dich sein.texti hat geschrieben:Code: Alles auswählen
If CreateFile(1, "c:\kontor\programme.ini") ; wenn die Datei geöffnet werden konnte, setzen wir fort...
Grüße ... Kiffi
P.S.: Bitte beim nächsten Code-Posting auch die entsprechenden Tags verwenden. ->
Code: Alles auswählen
...DeinCode... [/code ]
a²+b²=mc²
Re: feststellen, ob Registry-Zweig existiert
Danke für den Tip. Mache mich gleich dran und werde mich auch wegen dem code /code bessern 

Nichts wissen macht nichts. Man muß nur wissen, wo es steht, oder wen man fragen kann . . .
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Re: feststellen, ob Registry-Zweig existiert
Ich hab mal die Code-Tags hinzugefügt.texti hat geschrieben:Danke für den Tip. Mache mich gleich dran und werde mich auch wegen dem code /code bessern
Gruß Falko
Re: feststellen, ob Registry-Zweig existiert
Nach einigem Ausprobieren haben sich noch Fragen ergeben. Jedes mal, wenn Outlook abgefragt wird und Outlook geöffnet ist, wird es bei der Abfrage geschlossen. Bei Word und Excel passiert das nicht. Hat jemand eine Idee, wie das zu beheben ist? Ausprobiert habe ich es mit Windows 7 und Office 2003. Wenn ich in nem virtuellen Computer (Win XP Pro) nur die Access 2010 Runtime installiert habe, wird bei der Access-Abfrage nicht vorhanden ausgegeben. Der Registry-Zweig "Access.Application" ist aber vorhanden (was wird bei comateplus eigentlich genau ausgelesen?). Gibt es dafür vielleicht so eine schöne einfache Lösung?
Danke und Gruß
Danke und Gruß
Nichts wissen macht nichts. Man muß nur wissen, wo es steht, oder wen man fragen kann . . .
Re: feststellen, ob Registry-Zweig existiert
das liegt daran, dass sowohl von Word und Excel je eine neue Instanz gestartettexti hat geschrieben:Jedes mal, wenn Outlook abgefragt wird und Outlook geöffnet ist, wird es bei der Abfrage geschlossen. Bei Word und Excel passiert das nicht.
und danach beendet wird. Outlook lässt sich nur in einer Instanz starten.
versuch das mal:
Code: Alles auswählen
IncludePath #PB_Compiler_Home + "srod\comateplus\" ; Pfad anpassen
XIncludeFile "COMatePLUS.pbi"
Procedure TestApplication(Application.s)
Protected oApplication.COMateObject
oApplication = COMate_GetObject("", Application)
If oApplication
Debug Application + " ist installiert"
oApplication\Release()
Else
oApplication = COMate_CreateObject(Application)
If oApplication
Debug Application + " ist installiert"
oApplication\Invoke("Quit")
oApplication\Release()
Else
Debug Application + " ist nicht installiert"
EndIf
EndIf
EndProcedure
TestApplication("Outlook.Application")
TestApplication("Word.Application")
TestApplication("Excel.Application")
nur eine Runtime installiert ist (also nicht die Applikation als solche), dann wäre die
Ausgabe korrekt.
Grüße ... Kiffi
a²+b²=mc²
Re: feststellen, ob Registry-Zweig existiert
Danke Kiffi, jetzt wird Outlook nicht mehr geschlossen. Wie im Quellcode von COMatePllus zu sehen ist, bist Du an dem Projekt beteiligt. Was wird da genau abgefragt und was kann man damit noch so schönes machen? Ich soll ein kleines Installionsprogramm für eine Access-Datenbank für etwa 30 Benutzer schreiben. Diese 30 Benutzer haben ganz unterschiedliche Windows- und Programmversionen. Deshalb muß vorher abgefragt werden, welche Programme installiert sind. Wenn Access nicht vorhanden ist, muß minimal die Access Runtime 2010 (ist Lizenz- und Kostenfrei bei Microsoft runterzuladen) installiert werden. Deshalb wäre es schön, wenn die Runtime auch abgefragt werden könnte, da sie ja vielleicht doch schon installiert ist. Wie schon geschrieben, der Registry-Zweig "Access.Application" existiert auch bei der Runtime und wie es aussieht, wird sie bei der Abfrage auch kurz geöffnet und wieder geschlossen.
Danke und Gruß
Danke und Gruß
Nichts wissen macht nichts. Man muß nur wissen, wo es steht, oder wen man fragen kann . . .