Domino 9 und frühere Versionen > ND6: Entwicklung
Registry auslesen
Glombi:
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
TMC:
--- Zitat von: Glombi am 12.06.04 - 20:39:28 ---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.
--- Ende Zitat ---
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
--- Ende Code ---
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
--- Ende Code ---
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
--- Ende Code ---
Damit wird Dir in der Msgbox der komplette Pfad+Dateiname angezeigt, mit dem die ausgewählte Anwendung ausgeführt wird von Windows.
Glombi:
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
TMC:
Gern geschehen :-)
--- Zitat von: Glombi am 12.06.04 - 21:24:28 ---Mein erstes Ziel ist es, das Verzeichnis zu finden, in dem die Datei AcroRd32.exe liegt.
--- Ende Zitat ---
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 :-)
Glombi:
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
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln