Dateiverknüpfung

Hallo,
mit der Routine

Private Sub mnuFEbearbeiten_Click()
On Error GoTo Errorhandler3
Meldung = App.Path & „\Fehlerliste.err“
Set FS = CreateObject(„Scripting.FileSystemObject“)
Call ShellExecute(GetDesktopWindow(), „Open“, FS.GetAbsolutePathName(Meldung), „“, „“, 1)
'Shell "Notepad.exe " & Meldung, vbNormalFocus
Exit Sub

Errorhandler3:
MsgBox „Datei Fehlerliste.err bitte manuell öffnen“, 48, „Fehlermeldung“
Exit Sub

soll die Datei Fehlerliste.err geöffnet werden, welche ich vorher im Explorer mit einer Textverarbeitung verknüpft habe.

Nun die Frage, wenn keine Verknüpfung zu der Endung ERR vorliegt, passiert einfach nichts. Nichts bedeutet, es wird auch kein Fehler erzeugt.

Kann mir jmd sagen, wie man das abfangen kann, das dann wenn man auf den Knopf drückt, eine Meldung erscheint „Bitte Datei vorher im Explorer verknüpfen“.
Ich weiss nicht, wo man das abfängt.

Mfg Werner

Hallo,

Hi,
warum so kompliziert und nicht einfach so:

Shell "notepad.exe " & app.path & "\Fehlerliste.err"

Gruß.Timo

mit der Routine

Private Sub mnuFEbearbeiten_Click()
On Error GoTo Errorhandler3
Meldung = App.Path & „\Fehlerliste.err“
Set FS = CreateObject(„Scripting.FileSystemObject“)
Call ShellExecute(GetDesktopWindow(), „Open“,
FS.GetAbsolutePathName(Meldung), „“, „“, 1)
'Shell "Notepad.exe " & Meldung, vbNormalFocus
Exit Sub

Errorhandler3:
MsgBox „Datei Fehlerliste.err bitte manuell öffnen“, 48,
„Fehlermeldung“
Exit Sub

soll die Datei Fehlerliste.err geöffnet werden, welche ich
vorher im Explorer mit einer Textverarbeitung verknüpft habe.

Nun die Frage, wenn keine Verknüpfung zu der Endung ERR
vorliegt, passiert einfach nichts. Nichts bedeutet, es wird
auch kein Fehler erzeugt.

Kann mir jmd sagen, wie man das abfangen kann, das dann wenn
man auf den Knopf drückt, eine Meldung erscheint „Bitte Datei
vorher im Explorer verknüpfen“.
Ich weiss nicht, wo man das abfängt.

Mfg Werner

Hi
weil wir im Büro einen besseren Texteditor als Notepad verwenden.
Dieser lässt sich aber über diese Routine von dir nicht ansteuern.

Weil das ganze felxibel sein soll, daher meine Routine.

Irgendwie muß man das soch abfangen können.

Mfg Werner

Du könntest in der Registrierung gucken, ob der Datei-Typ verknüpft ist (siehe mein Posting genau oben drüber, das passt zufällig genau). Wenn der angegebene Schlüssel nicht existiert, ist keine Verknüpfung vorhanden. Wenn er existiert, kann man unter dem unter „Standard“ ausgelesenen Namen nachgucken, welche Anwendung dranhängt.

Kristian

Tja wenn ich müsste wie man das prsogrammiert…
dann ja dann müsste ich hier ja nicht fragen oder?

Mfg Werner

Was man nicht weiß, kann man ja fragen … :wink:
Hier mal zugeschnitten auf Dein Problem eine Lösung, wie Du
einen bestimmten Registrierungsschlüssel auslesen kannst:

'####################################################################################
 
Const REG\_SZ = 1
Const HKEY\_CLASSES\_ROOT = &H80000000
 
'####################################################################################
 
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
 
'####################################################################################
 
Sub Test()
 MsgBox ReadKeyValue(HKEY\_CLASSES\_ROOT, "htmlfile\shell\open\command", "")
End Sub 'Test
 
'####################################################################################
 
Private Function ReadKeyValue(lMainKey\_ As Long, sKeyName\_ As String, Optional sValueName\_ As String) As String
Dim hKey As Long
Dim lResult As Long
Dim lValueType As Long
Dim sBuffer As String
Dim lDataBufferSize As Long
 If RegOpenKey(lMainKey\_, sKeyName\_, hKey) = 0 Then
 If RegQueryValueEx(hKey, sValueName\_, 0, lValueType, ByVal 0, lDataBufferSize) = 0 Then
 Select Case lValueType
 Case REG\_SZ
 sBuffer = String(lDataBufferSize, Chr$(0))
 If RegQueryValueEx(hKey, sValueName\_, 0, 0, ByVal sBuffer, lDataBufferSize) = 0 Then
 ReadKeyValue = Left$(sBuffer, InStr(1, sBuffer, Chr$(0)) - 1) 'Remove the unnecessary chr$(0)'s
 End If
 Case Else
 ReadKeyValue = "Error: Value Type is not REG\_SZ (" & REG\_SZ & ") but " & lValueType & "!"
 End Select 'lValueType
 End If 'lResult = 0
 RegCloseKey hKey
 End If 'RegOpenKey
End Function 'ReadKeyValue
 
'####################################################################################

Zugeschnitten deshalb, weil es wirklich nichts weiter macht
als das Auslesen eines Schlüssels, wobei der Wert auch noch
das Format REG_SZ haben, also eine Zeichenkette sein muss.

Als Beispiel habe ich mal das HTML-File genommen.
Du müsstest jetzt mal im Registry-Editor nachgucken,
in welcher Weise dein ERR-File dort abgelegt ist.

Vorgehen:

regedit starten

HKEY_CLASSES_ROOT aufklappen (+)

  • nach dem Schlüssel .err suchen

  • diesen Schlüssel auswählen

  • gucken, was im Wert (Standard) steht

  • weiter unten im Baum den Schlüssel mit diesem Namen suchen (z.B. errfile)

  • dort bis shell\open\command aufklappen und gucken, ob was unter (Standard) eingetragen ist

Wenn da nun der Pfad zu einem Programm steht, ist alles okay
(im Sinne von so, wie ich es erwarte). Auf dem Zielrechner
muss genau da auch was drinstehen, wobei natürlich der Inhalt
anders sein kann, wenn die Applikation anders heißt oder die
Pfade anders sind.

Probier´s mal aus.

Kristian

Hi
buh is das wieder viel Code und so kompliziert.

Naja ich werds mal ausprobieren und sehen was passiert.
Danke also erstmal.

Mfg Werner