Autor Thema: Registry auslesen  (Gelesen 3809 mal)

Glombi

  • Gast
Registry auslesen
« am: 12.06.04 - 20:39:28 »
Gibt es eine Möglichkeit, aus der Registry den Wert für
HKEY_CLASSES_ROOT\Applications\AcroRd32.exe\shell\Open\command
auszulesen.
Ich habe es mit @RegQueryValue versucht, aber es wird nichts zurückgegeben. Laut Hilfe kann man auch nur HKEY_CURRENT_USER oder HKEY_LOCAL_MACHINE auslesen.

Mein Ziel: Ich möchte das den Pfad für die AcroRd32.exe ermitteln (Adobe Acrobat Reader) - unabhängig von der Version des Adobe Readers.

Andreas

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Registry auslesen
« Antwort #1 am: 12.06.04 - 21:21:00 »
Mein Ziel: Ich möchte das den Pfad für die AcroRd32.exe ermitteln (Adobe Acrobat Reader) - unabhängig von der Version des Adobe Readers.

Kannst Du das Ziel mal bitte näher erklären?  ;)

Ich hatte mal folgende Konstellation mit Adobe Acrobat:

Einige User haben diverse Versionen auf deren Kiste installiert. Da lungert Reader 4.0, Reader 5.0, Reader 6.0 und vielleicht auch noch die Vollversion x.0 rum.
Im Endeffekt ging es mir darum, den Pfad zu bekommen, den Windows verwendet, wenn User eine Adobe Acrobat - Datei vom Explorer aus startet.

Lösung - kannst das mal in einem Buhtong testen:

a) Ab in die Declarations:
Code
Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (Byval lpFile As String, Byval lpDirectory As String, Byval sResult As String)  As Long

b) Für die Buhtong-Sub
Code
Sub Click(Source As Button)
   
   Dim success As Long
   Dim pos As Long
   Dim sResult As String
   Dim szEndergebnis As String
   
'********** Filerequester
   Dim workspace As New NotesUIWorkspace
   Dim vFiles As Variant
   vFiles = workspace.OpenFileDialog(False, "Bitte Datei auswählen.....", "", "c:\")
   If Isempty(vFiles) Then Exit Sub      ' Script verlassen falls User keine Datei auswählt
   
   Dim szFilepfadName As String
   szFilepfadName = vFiles(0)
   
'*********** File auswerten
   'Filename
   Dim szFilename As String
   szFilename = Rightback (szFilepfadName, "\")
   'Filepfad holen
   Dim iName As Integer
   Dim iGesamt As Integer
   Dim iPfad As Integer
   iName = Len(szFilename)
   iGesamt = Len(szFilepfadName)
   iPfad = iGesamt - iName
   
   Dim szFilepfad As String
   szFilepfad = Left$(szFilepfadName, iPfad)
   
   'Start Errorhandling
   Dim ERROR_FILE_NO_ASSOCIATION As Long
   Dim ERROR_FILE_NOT_FOUND As Long
   Dim ERROR_PATH_NOT_FOUND As Long
   Dim ERROR_FILE_SUCCESS As Long
   Dim ERROR_BAD_FORMAT As Long
   ERROR_FILE_NO_ASSOCIATION = 31
   ERROR_FILE_NOT_FOUND = 2
   ERROR_PATH_NOT_FOUND = 3
   ERROR_FILE_SUCCESS  = 32
   ERROR_BAD_FORMAT = 11
   'Ende Errorhandling
   
   Dim MAX_PATH As Long
   MAX_PATH = 260
   sResult = Space$(MAX_PATH)
   
   success = FindExecutable(szFilename, szFilepfad, sResult)
   
   Select Case success
   Case ERROR_FILE_NO_ASSOCIATION: msg = "no association"
   Case ERROR_FILE_NOT_FOUND: msg = "file not found"
   Case ERROR_PATH_NOT_FOUND: msg = "path not found"
   Case ERROR_BAD_FORMAT: msg = "bad format"
      
   Case Is >= ERROR_FILE_SUCCESS:
      pos = Instr(sResult, Chr$(0))
      
      If pos Then
         szEndergebnis  = Left$(sResult, pos - 1)
      End If
      
   End Select
   
   Msgbox "Hier das Testergebnis:" & Chr(10) & Chr(10) & szEndergebnis, 64, "Ergebnis"
   
End Sub

c) Noch eine RightBack - Function die der Code verwendet, also kopier das noch rein:
Code
Function RightBack (sourceString As String, searchString As String) As String
   
   For i% = Len(sourceString) To 1 Step -1
      sourceStringBack$=sourceStringBack$ & Mid(sourceString, i%, 1)
   Next
   
   For i% = Len(searchString) To 1 Step -1
      searchStringBack$=searchStringBack$ & Mid(searchString, i%, 1)
   Next
   
   pos% = Instr ( sourceStringBack$, searchStringBack$)
   
   If pos% > 0 Then pos% = pos% - 1
   result$ = Left ( sourceStringBack$, pos%)
   
   For i% = Len(result$) To 1 Step -1
      turn$=turn$ & Mid(result$, i%, 1)
   Next
   
   RightBack=turn$
   
End Function


Damit wird Dir in der Msgbox der komplette Pfad+Dateiname angezeigt, mit dem die ausgewählte Anwendung ausgeführt wird von Windows.


Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re:Registry auslesen
« Antwort #2 am: 12.06.04 - 21:24:28 »
Vielen Dank!  :D
Das werde ich auch noch testen, in der Zwischenzeit habe ich mir auch was gesaugt und in das Script von eknori aus dem Thread
http://www.atnotes.de/index.php?board=3;action=display;threadid=16298
eingebaut. Damit kann man beliebige Registry Einträge lesen.
Der Aufruf erfolgt für meinen Fall mit
Path_AcrobatReader = RegGetValue(HKEY_CLASSES_ROOT, "Applications\AcroRd32.exe\shell\Open\command", "")


Für meinen Fall ist Dein Script auf jeden Fall besser denke ich.


Mein erstes Ziel ist es, das Verzeichnis zu finden, in dem die Datei AcroRd32.exe liegt. Das brauche ich für
ret = Shell(Path_AcrobatReader & " /p /h " & filePath, 6)      
zum Drucken von PDFs im Hintergrund.

Andreas
« Letzte Änderung: 12.06.04 - 21:39:18 von Glombi »

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Registry auslesen
« Antwort #3 am: 12.06.04 - 21:34:41 »
Gern geschehen :-)

Mein erstes Ziel ist es, das Verzeichnis zu finden, in dem die Datei AcroRd32.exe liegt.

Wie oben schon geschrieben: Ich hatte mit Usern zu tun die multible Adobe-Versionen geniesen. Einer war dabei, der hatte Reader 3-6, und Vollversion 4-6 auf seinem Rechner. Da gab es dann 7 exe-Dateien  :P
Daher das obige Beispiel - denn für mich war nur relevant: was nimmt Windows.

Das obige Script hab ich aus ner ersten Test-DB rauskopiert - hab das dann natürlich noch sauberer gecoded (Pfui z.B.: normale Variablen in GROSSBUCHSTABEN).
Egal, zum testen reicht es :-)
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re:Registry auslesen
« Antwort #4 am: 12.06.04 - 21:38:44 »
Ich habe noch zwei Änderungen vorgenommen

Wegen Option Declare  ;D
Dim msg As String      
und
szFilename = Strrightback(szFilepfadName, "\")
damit man die extra Funktionen, die man vor Notes 5 hatte, nicht braucht.

Es funktioniert genauso wie gewünscht.

Andreas

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Registry auslesen
« Antwort #5 am: 12.06.04 - 21:42:29 »
Wie gesagt: War damals ein reiner Test-Buhtong. Ist - soweit ich noch weiss - aus dubiosen Internetquellen entstanden....  ;)
Der Code ist fürchterlich so.
Aber schön dass es hilft.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re:Registry auslesen
« Antwort #6 am: 12.06.04 - 21:43:07 »
Das mit den "normalen" Variablen in Großbuchstaben mache ich auch: Und zwar nenne ich die mal Pseudo-Konstanten.

Anstatt
Const ERROR_FILE_NO_ASSOCIATION = 31

schreibe ich (und der unbekannte Autor auch) in Script Libraries

Dim ERROR_FILE_NO_ASSOCIATION As Long
ERROR_FILE_NO_ASSOCIATION = 31

Das hat den Vorteil, dass man diese Pseudo-Konstanten ändern kann, ohne das mann alle Scripts neu kompilieren - sprich öffnen und speichern - muss, in denen diese Library verwendet wird.
Ab R6 gibt es jetzt ja endlich das rekompilieren.

Aber das nur am Rande...

Andreas

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Registry auslesen
« Antwort #7 am: 12.06.04 - 21:50:51 »
Gut, da bin ich bei Dir, Andreas, manchmal macht es Sinn "Pseudo-konstante" Variablen zu definieren.
Trotzdem hätte ich die hier als Integer deklariert :-)

Egal.

Matthias

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re:Registry auslesen
« Antwort #8 am: 13.06.04 - 09:03:24 »
Stimmt, 31 ist ja noch gerade im Bereich der Integerzahlen.  ;)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz