Dateiendung registrieren

    • VB.NET

    Es gibt 67 Antworten in diesem Thema. Der letzte Beitrag () ist von vb-2010-user.

      Dateiendung registrieren

      Hallo,

      es gibt so viele Fragen zum Thema "Dateiendung registrieren", vor allem in letzter Zeit, dass ich denke das sich das hier lohnt. Daher habe ich eine kleine Funktion geschrieben:

      VB.NET-Quellcode

      1. Private Function Registerfile(ByVal endung As String, ByVal namedesdateityps As String, ByVal pfadzuprogramm As String, ByVal pfadzuicon As String) As Boolean
      2. Try
      3. Dim objSubKey As Microsoft.Win32.RegistryKey
      4. Dim objSubKey2 As Microsoft.Win32.RegistryKey
      5. Dim Wert As String = namedesdateityps
      6. Dim sKey As String = endung
      7. Dim sKey2 As String = endung & "\ShellNew"
      8. Dim sEntry As String = "Content Type"
      9. Dim sValue As String = "text/plain"
      10. Dim sEntry2 As String = "PerceivedType"
      11. Dim sValue2 As String = "text"
      12. Dim sEntry3 As String = "Nullfile"
      13. objSubKey = My.Computer.Registry.ClassesRoot.CreateSubKey(sKey)
      14. objSubKey.SetValue("", Wert)
      15. objSubKey.SetValue(sEntry, sValue)
      16. objSubKey.SetValue(sEntry2, sValue2)
      17. objSubKey2 = My.Computer.Registry.ClassesRoot.CreateSubKey(sKey2)
      18. objSubKey2.SetValue(sEntry3, "")
      19. Dim objSubKey3 As Microsoft.Win32.RegistryKey
      20. Dim sKey3 As String = namedesdateityps
      21. Dim sKey4 As String = namedesdateityps & "\shell\open\command"
      22. Dim skey5 As String = namedesdateityps & "\DefaultIcon"
      23. Dim sValue3 As String = namedesdateityps
      24. Dim objSubKey5 As Microsoft.Win32.RegistryKey
      25. Dim sValue5 As String = """" + pfadzuprogramm + """" + " %1"
      26. Dim sValue6 As String = """" + pfadzuicon + """"
      27. Dim objSubKey4 As Microsoft.Win32.RegistryKey
      28. objSubKey3 = My.Computer.Registry.ClassesRoot.CreateSubKey(sKey3)
      29. objSubKey3.SetValue("", sValue3)
      30. objSubKey4 = My.Computer.Registry.ClassesRoot.CreateSubKey(sKey4)
      31. objSubKey4.SetValue("", sValue5)
      32. objSubKey5 = My.Computer.Registry.ClassesRoot.CreateSubKey(skey5)
      33. objSubKey5.SetValue("", sValue6)
      34. Return True
      35. Catch ex As Exception
      36. Return False
      37. End Try
      38. End Function

      Aufrufbeispiel:

      VB.NET-Quellcode

      1. If Registerfile(".wrd", "Xword-Datei", Application.StartupPath & "\xword.exe", Application.StartupPath & "\icon.ico") Then
      2. MessageBox.Show("Die Dateiendung *.wrd wurde erfolgreich registiert.", "Info")
      3. Else
      4. MessageBox.Show("Die Dateiendung konnte nicht registriert werden.")
      5. End If

      Muss - logischerweise - entsprechend angepasst werden.

      Das Programm muss natürlich auch erkennen das die Datei auch mit einem Doppelklick geöffnet worden ist. Der folgende Code ist noch sehr unsauber, wenn jemand eine Idee hat wie man den verbessern kann raus damit.

      VB.NET-Quellcode

      1. If My.Application.CommandLineArgs.Count > 0 Then
      2. Dim v As Array
      3. Dim mypath As String
      4. Dim commandlineargs As String = Environment.CommandLine
      5. v = Split(commandlineargs, """ ")
      6. mypath = v(1)
      7. ' jetzt zb datei einlesen
      8. End If

      Unter Vista werden zum registrieren leider Administrator-Rechte benötigt (ausführen als -> administrator)

      Viel Spaß damit.


      Hinweis by LaMa5:
      - Dieser Thread wurde um 21 Beiträge gekürzt und beschränkt sich somit nur noch auf den eigentlichen Inhalt.
      - Unter Umständen sind Bezüge auf gelöschte Beiträge enthalten.

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „LaMa5“ ()

      Danke kevin89. Das registrieren funktioniert einwandfrei. Doch leider gibt es ein paar Probleme wenn ich die registrierte Datei starte. Ich hab mit einer MessageBox angezeigt, was für ein Pfad rauskommt und der Pfad steht in " z.B. "C:\Test\datei.file" das kommt raus. Nun frag ich mit

      VB.NET-Quellcode

      1. Dim Datei As New FileInfo(s_file)
      2. With Datei
      3. If .Exists() = True Then
      4. ' Datei existiert
      5. Else
      6. ' Datei existiert nicht
      7. End If
      8. End With


      Aber dann stürzt das Programm ab. An was kann das liegen.
      Machs mal direkt mit dem Pfad:

      VB.NET-Quellcode

      1. If IO.File.Exists(deinpfad) Then
      2. ' Datei existiert
      3. Else
      4. ' Datei existiert nicht
      5. End If

      Poste auch mal die Fehlermeldung. Es ist gut möglich, dass der Pfad ein Leerzeichen am Anfang oder Ende enthält, das lässt VB nicht durchgehen. Versuch das zu entfernen (wenn meine Vermutung stimmt).

      kevin89 schrieb:

      Machs mal direkt mit dem Pfad:

      VB.NET-Quellcode

      1. If IO.File.Exists(deinpfad) Then
      2. ' Datei existiert
      3. Else
      4. ' Datei existiert nicht
      5. End If

      Poste auch mal die Fehlermeldung. Es ist gut möglich, dass der Pfad ein Leerzeichen am Anfang oder Ende enthält, das lässt VB nicht durchgehen. Versuch das zu entfernen (wenn meine Vermutung stimmt).
      Hab die fehlermeldung grad nicht da. Es sind Leerzeichen im Pfad drin. Deshalb hat es mich auch gewundert das am Anfang und am Ende ein Anführungszeichen steht.
      Wie das das Tool nicht abstürzt :D

      Sorry ich meinte beim letzten Post nicht Leerzeichen, sondern Anführungszeichen mit Replace entfernen. Also bau Replace ein und lass dir den Pfad in einer Textbox ausgeben, da kannst du besser sehen, ob Leerzeichen da sind, oder nicht.

      kevin89 schrieb:

      Wie das das Tool nicht abstürzt :D

      Sorry ich meinte beim letzten Post nicht Leerzeichen, sondern Anführungszeichen mit Replace entfernen. Also bau Replace ein und lass dir den Pfad in einer Textbox ausgeben, da kannst du besser sehen, ob Leerzeichen da sind, oder nicht.
      OK dann habe ich dich falsch verstanden. Ich hab für mich ein paar String-Funktionen geschrieben, das ich nicht jedes Mal alles neu tippen muss. Wie kann ich das Anführunszeichen entfernen, mit Replace ist mir klar, aber das Anführungszeichen dient ja in VB.NET als Textinfasser

      z.B.

      "Hello World"
      Hrmpf. So in die Richtung...

      VB.NET-Quellcode

      1. Function GetParams() As List(Of String)
      2. Dim ret As New List(Of String)
      3. For Each t As String In Split(Environment.CommandLine, """ ") : ret.Add(t) : Next
      4. Return ret
      5. End Function
      6. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      7. Try : PictureBox1.Load(GetParams(1))
      8. Catch ex As BadImageFormatException
      9. MessageBox.Show("Ungültiges Bild!")
      10. Catch : MessageBox.Show("Fehler: " & Err.Description)
      11. End Try
      12. End Sub
      versteh das nicht ganz... hab jetzt ne form1 mit ner picturebox1 und diesem code:

      VB.NET-Quellcode

      1. Public Class Form1
      2. Function GetParams() As List(Of String)
      3. Dim ret As New List(Of String)
      4. For Each t As String In Split(Environment.CommandLine, """ ") : ret.Add(t) : Next
      5. Return ret
      6. End Function
      7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      8. Try : PictureBox1.Load(GetParams(1))
      9. Catch ex As BadImageFormatException
      10. MessageBox.Show("Ungültiges Bild!")
      11. Catch : MessageBox.Show("Fehler: " & Err.Description)
      12. End Try
      13. End Sub
      14. End Class


      Wenn bei einem bild nun rechtsklick --> öffnen mit.. und mein programm auswähle kommt immer noch das illegale zeichen im pfad wie kann ich regeln? verstehe das mit IO.Path.GetInvalidPathChars(). nicht ganz...

      MfG
      HoUzE
      Aber mit " oder sind die von dir? Probiers doch mal - testweise - so.

      VB.NET-Quellcode

      1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      2. Try : PictureBox1.Load(GetParams(1).Replace("""", ""))
      3. Catch ex As BadImageFormatException
      4. MessageBox.Show("Ungültiges Bild!")
      5. Catch : MessageBox.Show("Fehler: " & Err.Description)
      6. End Try
      Hallo alle zusammen,

      ich würde gerne mal wissen, wie ich einen mit Kevins-Code erzeugten Registry-Eintrag wieder löschen kann?


      EDIT

      Habe es mittlerweile doch selber geschafft. War gar nicht so kompliziert wie ich dachte.
      Für alle, die dasselbe Problem haben, hier meine Funktion(die ähnelt sich zum Zwecke der Übersicht der von Kevin):

      VB.NET-Quellcode

      1. Private Function UnRegisterFile(ByVal endung As String, ByVal namedesdateityps As String) As Boolean
      2. Try
      3. Dim key1 As String = endung
      4. Dim key2 As String = namedesdateityps
      5. My.Computer.Registry.ClassesRoot.DeleteSubKeyTree(key1)
      6. My.Computer.Registry.ClassesRoot.DeleteSubKeyTree(key2)
      7. Return True
      8. Catch ex As Exception
      9. Return False
      10. End Try
      11. End Function


      Der Aufruf könnte dann in etwa so aussehen:

      VB.NET-Quellcode

      1. If UnRegisterFile(".dwd", "DWD-Datei") Then
      2. MessageBox.Show("Der Registry-Eintrag wurde entfernt", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
      3. Else
      4. MessageBox.Show("Der Der Registry-Eintrag konnte nicht entfernt werden", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
      5. End If


      ;)

      MfG

      Oekos

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Oekos“ ()

      also ich finds schön gemacht.

      Ich hab nur ein Problem will damit ne selbstgemachte Textdatei bei doppelklcik mit meinem programm starten. Das Funzt auch aber ich weiß nicht wie ich jetzt noch die datei auslese.
      Ich bin glaube echt zu doof xD. Ich weiß echt nicht wie.

      Wäre nett wenn mir wer helfen könnte.
      Hey,

      Ich hab eine Frage, nähmlich wo muss ich diesen Code eingeben?
      Und Wie muss ich das machen, wenn das eine Textdatei werden soll, das die RTB das dann ließt?

      VB.NET-Quellcode

      1. If My.Application.CommandLineArgs.Count > 0 Then
      2. Dim v As Array
      3. Dim mypath As String
      4. Dim commandlineargs As String = Environment.CommandLine
      5. v = Split(commandlineargs, """ ")
      6. mypath = v(1)
      7. ' jetzt zb datei einlesen
      8. End If


      Ich brauche Hilfe.
      MfG. Mr. Anonym (AppTech)


      Edit by LaMa5:
      - VB-Tag eingefügt, das nächste Mal bitte selbst dran denken

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

      du musst nicht erst splitten
      du kannst auch gleich aus Environment.GetCommandLineArgs(1) die Datei auslesen
      Splitten solltest du nur wenn die Variablen zB so übergeben werden "shutdown -s -t 30"