Problem mit den Übergabeparametern bei eigener Dateiendung

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von KnifeHunter.

    Problem mit den Übergabeparametern bei eigener Dateiendung

    Hi,

    ich habe vin programm, welches 2 verschiedene dateiendungen registriert.
    wenn ich eine entsprechende datei starte, wird mein programm ausgeführt und ich bekomme den pfad als parameter übergeben.

    problem dabei ist allerdings, dass der dateiname keine leerzeichen enthalten darf, da dann folgendes passiert:

    "C:\Test\Meine Datei.txt"
    ich bekomme dann als ersten Parameter:
    "C:\Test\Meine"
    und
    "Datei.txt"


    das ist nicht besonders benutzerfreundlich, wenn man ständig darauf achten muss, dass man keine leerzeichen in dateinamen macht.
    habt ihr eine idee, wie man das fixxen kann?


    MfG KnifeHunter

    KnifeHunter schrieb:

    problem dabei ist allerdings, dass der dateiname keine leerzeichen enthalten darf, da dann folgendes passiert:

    "C:\Test\Meine Datei.txt"
    ich bekomme dann als ersten Parameter:
    "C:\Test\Meine"
    und
    "Datei.txt"

    bei meim SolutionExplorer passiert nix dergleichen. Da würde "C:\Test\Meine Datei.txt" korrekt als ein CommandLineArg ankommen.

    ErfinderDesRades schrieb:

    bei meim SolutionExplorer passiert nix dergleichen. Da würde "C:\Test\Meine Datei.txt" korrekt als ein CommandLineArg ankommen.

    wie sieht deine funktion zum registrieren einer dateiendung aus?
    vielleicht liegt es daran...

    meine:

    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


    habe ich in einem anderen thread gefunden - leider fehlt es da ein bisschen an erklärungen...
    das mache ich nicht programmgesteuert. Sondern das muß beim SolutionExplorer der User mit Win-Bordmitteln machen.
    Ich hab ne Allergie dagegen, inne Registry rumzukrickeln, und wenn das auch noch durch nur halb verstandenen Code passiert - da kriege ich Schweißausbrüche von. ;(
    das wundert mich nicht =)
    die registry finde ich auch zum kotzen - aber um programme benutzerfreundlicher zu gestalten ist es oft sinnvoll, da doch die eine oder andere änderung vorzunehmen...


    EDIT: FIXXED!!!

    Lösung:

    VB.NET-Quellcode

    1. Private Sub ExecCommandLineArgs()
    2. If My.Application.CommandLineArgs.Count > 0 Then
    3. Dim CMDs As Array
    4. Dim Path As String
    5. Dim CommandLine As String = Environment.CommandLine
    6. CMDs = Split(CommandLine, """ ")
    7. Path = CMDs(1)
    8. End If


    auch in diesem Post nachzulesen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „KnifeHunter“ ()