VB 5/6-Tipp 0001: Anwendung mit Dateiendung assoziieren
von ActiveVB
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: | Verwendete API-Aufrufe: RegCloseKey, RegCreateKeyA (RegCreateKey), RegSetValueA (RegSetValue) | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB5 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB6 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
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