Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0001: Anwendung mit Dateiendung assoziieren

 von 

Beschreibung 

Mit dem untenstehenden Listing ist es möglich Dateiendungen mit einer Anwendung in Zusammenhang zubringen. Es wird ein neuer Schlüssel in die Registry eingetragen, so dass beim Anklicken einer Datei mit der entsprechenden Endung die zugehörige Applikation gestartet wird. In diesem Falle ist es die selbstgenerierte Dateiendung 'sgte' die mit dem Text-Editor verbunden wird. Um so etwas mit Ihren eigenen Anwendung zu realisieren, sollten Sie sich zusätzlich Tipp 62 anschauen.

Erweiterung von Florian Rittmeier:
Nun können der selbstgebastelten Dateiendung auch Icons zugewiesen werden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

RegCloseKey, RegCreateKeyA (RegCreateKey), RegSetValueA (RegSetValue)

Download:

Download des Beispielprojektes [6,15 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Textfeld "Text6"
' Steuerelement: Textfeld "Text5"
' Steuerelement: Textfeld "Text4"
' Steuerelement: Textfeld "Text3"
' Steuerelement: Textfeld "Text2"
' Steuerelement: Textfeld "Text1"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Beschriftungsfeld "Label6"
' Steuerelement: Beschriftungsfeld "Label5"
' Steuerelement: Beschriftungsfeld "Label4"
' Steuerelement: Beschriftungsfeld "Label3"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label1"



'Deklaration: Globale Form API-Konstanten
Const HKEY_CLASSES_ROOT = &H80000000
Const REG_SZ = 1&
Const MAX_PATH = 260&

'Deklaration: Globale Form API-Funktionen
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias _
        "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As _
        String, phkResult As Long) As Long

Private Declare Function RegSetValue Lib "advapi32.dll" Alias _
        "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As _
        String, ByVal dwType As Long, ByVal lpData As String, _
        ByVal cbData As Long) As Long
        
Private Declare Function RegCloseKey Lib "advapi32.dll" ( _
        ByVal hKey As Long) As Long

Private Sub Form_Load()
    'Control-Eigenschaften initialisieren
    Label1.Caption = "Anwendungsname"
    Label2.Caption = "Extension"
    Label3.Caption = "Registryname"
    Label4.Caption = "Anwendungspfad"
    Label5.Caption = "Icon - Nummer"
    Label6.Caption = "Icon - Datei"

    Text1.Text = "Selbstgebastelte Text-Editor Datei"
    Text2.Text = Environ("WINDIR") & "\Notepad.exe"
    Text3.Text = "Sg TextEdit Dat"
    Text4.Text = "sgte"
    Text5.Text = "15"
    Text6.Text = Environ("WINDIR") & "\Explorer.exe"

    Command1.Caption = "Registrieren"
End Sub

Private Sub Command1_Click()
    Call Registrieren(Text1.Text, Text2.Text, Text3.Text, Text4.Text, _
    Text6.Text, Val(Text5.Text))
End Sub

Private Sub Registrieren(ByVal strAppName As String, ByVal strAppPath As String, _
    ByVal strAppReg As String, ByVal strAppExt As String, _
    Optional ByVal strIconFile As String = "", Optional ByVal lngIconId As Long)

    'Deklaration: Lokale Prozedur-Variablen
    Dim lngKey As Long
    Dim lngResult As Long

    'Generiert den neuen Eintrag
    lngResult = RegCreateKey(HKEY_CLASSES_ROOT, strAppReg, lngKey)
    lngResult = RegSetValue(lngKey, vbNullString, REG_SZ, strAppName, 0)
    lngResult = RegCloseKey(lngKey)

    'Speichert das Icon, falls vorhanden
    If Len(strIconFile) > 0 Then
        lngResult = RegCreateKey(HKEY_CLASSES_ROOT, strAppReg & "\DefaultIcon", lngKey)

        If Not IsMissing(lngIconId) Then
            strIconFile = RTrim$(strIconFile) & "," & lngIconId
        End If

        lngResult = RegSetValue(lngKey, vbNullString, REG_SZ, strIconFile, 0)
        lngResult = RegCloseKey(lngKey)
    End If

    'Generiert die Assoziotion mit der Endung
    lngResult = RegCreateKey(HKEY_CLASSES_ROOT, "." & strAppExt, lngKey)
    lngResult = RegSetValue(lngKey, vbNullString, REG_SZ, strAppReg, 0)
    lngResult = RegCloseKey(lngKey)

    'Setzt den ausführenden Pfad für die Anwendung
    lngResult = RegCreateKey(HKEY_CLASSES_ROOT, strAppReg, lngKey)
    lngResult = RegSetValue(lngKey, "shell\open\command", REG_SZ, strAppPath & " %1", MAX_PATH)
    lngResult = RegCloseKey(lngKey)
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 7 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Florian Rittmeier am 30.07.2005 um 03:42

Der Code sollte noch um

' Das System über die Änderungen informieren
SHChangeNotify SHCNE_ASSOCCHANGED, 0&, 0&, 0&

ergänzt werden.

Gruß Florian

Kommentar von Ralf Bessler am 31.03.2005 um 22:45

Hallo,

geht das auch anderesrum??? Soll heissen, kann ich anhand einer Dateiendung automatisch die entsprechende Anwendung öffnen und die Quelldatei gleich mit??? (Ich ANFÄNGER meine in der Art 'SHELL app.path & "/DATEI.XLS"').

Grüße
Ralf BEssler

Kommentar von Alex am 03.09.2004 um 13:06

Hallo,

bei mir funktioniert der Aufruf der Anwendung mit einem Doppelklick auf die assoziierte Datei nicht, wenn in dem Anwendungspfad ein Leerzeichen enthalten ist(z.B. "Program Files") und es kommt diese Fehlermeldung:
"[Datei.Dateiendung] is not a valid Win32 Application."

Vielen Dank,
Alex.

Kommentar von Juerchen am 28.05.2004 um 12:11

Hallo,
ich hab Win XP Pro (englisch) und VB6 (SP5) ich hab mehrfach probiert, das zum laufen zu bringen. Die Assoziation funktioniert auch. Nur das mit dem Icon funktioniert nicht und der Dateibeschreibung nicht. es bleibt immernoch "bla File" anstatt meiner Beschreibung!

mfg
Jürchen

Kommentar von mab am 22.04.2003 um 00:35

Leider funktioniert der Tipp bei mir nicht, wobei mir die Funktionen von den Textboxen noch nicht einleuchtet. Wie übergibt man den Datei-Pfad/-Erweiterung an die Prozedur ? Liegt es vielleicht an VB6 oder Win ME ? thx 4 support ..mab

Kommentar von Sebbi-Webbi am 10.06.2002 um 14:52

Ich will dass bei meiner extension die erweiterung immer angezeigt werden soll!Wie kann ich in einem Schlüssel noch einen Wert neben (Standard) mit dem Namen "AlwaysShowExt"generieren??

Kommentar von Henning Strube am 10.03.2002 um 17:00

Mich würde interessieren wie ich die Verknüpfung in der Installationsroutine inclusive Überprüfung ob schon vorhanden und automatischer Deinstallation erreiche